diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e212547ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.out +*.out_py3 +*.pyc +*.pyo +v4-cokapi/node_modules/ +v4-cokapi/backends/javascript/node_modules/ +v4-cokapi/feedback/cokapi-feedback.db diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..e69de29bb diff --git a/README b/README index fb3591837..194ba3511 100644 --- a/README +++ b/README @@ -1,137 +1,248 @@ -Online Python Tutor -Copyright (C) 2010 Philip J. Guo (philip@pgbovine.net) -https://github.com/pgbovine/OnlinePythonTutor/ - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -====== -Introduction: - -The Online Python Tutor is a web application where you can type Python -scripts directly into your web browser, execute those scripts, and -single-step FORWARDS AND BACKWARDS through execution in order to view -the run-time state of all data structures. +Online Python Tutor -- http://pythontutor.com/ -- helps people overcome +a fundamental barrier to learning programming: understanding what +happens as the computer executes each line of a program's source code. +Using this tool, you can write Python, Java, JavaScript, TypeScript, +Ruby, C, and C++ programs in your Web browser and visualize what the +computer is doing step-by-step as it executes those programs. -Using this tool, teachers and students can write small Python code -snippets together and see what happens to the data structures when the -code gets executed. +All documentation is viewable online at: +https://github.com/pgbovine/OnlinePythonTutor/tree/master/v3/docs -Try it out live at: http://www.onlinepythontutor.com/ +https://github.com/pgbovine/OnlinePythonTutor/ +The v3/ sub-directory contains the latest version of the frontend code. ====== -System architecture overview: - -The Online Python Tutor is implemented as a web application, with a -JavaScript front-end making AJAX calls to a pure-Python back-end. - -The back-end has been tested on an Apache server running Python 2.5 -through CGI. Note that it will probably fail in subtle ways on other -Python 2.X (and will DEFINITELY fail on Python 3.X). Peter Wentworth -has create a port to Python 3.X, and hopefully we can eventually -integrate his code into my repository. - - -The front-end is HTML/JavaScript (using the jQuery library). It's -responsible for the input text box, submitting the Python code (as -plaintext) to the back-end, receiving an execution trace from the -back-end, and then rendering that trace as data structure -visualizations. The front-end code resides in these files in the -current directory: - - tutor.html - question.html - edu-python.js - edu-python-tutor.js - edu-python-questions.js - edu-python.css - jquery.textarea.js - .htaccess - to increase the size of allowed Apache HTTP responses - - (there are also other 3rd-party JavaScript library files) -Note on .htaccess: If your server limits the size of responses received -from HTTP requests, then you might need to use the following .htaccess -file included in your top-level (front-end) directory, to allow the -Online Python Tutor to receive traces from the back-end: +Copyright (C) Philip J. Guo (philip@pgbovine.net) - +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -# Set a ~2MB limit for response headers (bigger than default 512K limit) -SecResponseBodyLimit 2000000 - - - - -The back-end is a server-side CGI application that takes Python script -source code as input, executes the entire script (up to 200 executed -lines, to prevent infinite loops), and collects a full trace of all -variable values (i.e., data structures) after each line has been -executed. It then sends that full trace to the front-end in a -specially-encoded JSON format. The front-end then parses and visualizes -that trace and allows the user to single-step forwards AND backwards -through execution. - -The back-end resides in the cgi-bin/ sub-directory in this repository: - - cgi-bin/web_exec.py - the CGI entrance point to the back-end - cgi-bin/web_run_test.py - the CGI entrance point to the question - grading back-end - cgi-bin/pg_logger.py - the 'meat' of the back-end - cgi-bin/pg_encoder.py - encodes Python data into JSON - cgi-bin/demjson.py - 3rd-party JSON module, since Python 2.5 - doesn't have the built-in 'import json' - cgi-bin/create_db.py - for optional sqlite query logging - cgi-bin/db_common.py - for optional sqlite query logging - cgi-bin/.htaccess - for Apache CGI execute permissions - - -Due to the AJAX same-origin policy, the front-end and back-end must be -deployed on the same server (unless you do some fancy proxy magic). +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ====== -Original founding vision (from January 2010): - -I want to create a web-based interactive learning platform for students -to explore programming. I envision an HTML UI where a student can enter -in code and then single-step through it and see how the data structures -change during execution. - -Key insight: I realized that for the small programs that teachers and -students write for educational purposes, it's possible to simply LOG -everything that happens to data structures during execution. Then we -can simply play back that log in the front-end, which allows -single-stepping forwards and also BACKWARDS. - -After all, we don't need students to be able to interactive probe and -make changes in the middle of execution, which is the only value-added -of a REAL debugger. - -What kinds of things do we want to log? - - On the execution of each line, log: - - the line number just executed - - all data created by the program - - Also log calls and returns of a student's function - (but NOT library functions) -We can use the Python JSON module to encode data structures in JSON and -send it to the client's web browser +Project history: -The PDB debugger (Lib/pdb.py) is written in pure Python: - http://docs.python.org/library/pdb.html - - the bdb debugger framework is the C module that pdb calls - http://docs.python.org/library/bdb.html +v1-v2/ + [Project created in December 2009; I first wanted to make a JavaScript + run-time visualizer for education since it could all be in-browser, + but then realized that I couldn't easily hook into the JS debugger in + the browser to do single-stepping without making the user install + plug-ins; then I switched to a server-side solution and picked Python + as the target language. That turned out to be a wise choice in + hindsight since Python was poised to really take off as a CS1 language + in both traditional courses and MOOCs, starting around 2011.] + + Online Python Tutor version 1 - released on January 19, 2010 + "Release" email to 15 friends: + + Subject: version 0.0000001alpha of my online Python tutor + Body: + ''' + hi python fans (and non-fans) ... + + this is what i've been hacking on for the past few days instead of + doing my research ;) i'm planning to use it as a platform for + creating interactive online programming tutorials as part of a + volunteer project ... + + http://python.pgrind.com/ + + it'd be great to get your feedback on what i have so far. i'd love + to hear suggestions or complaints. thanks in advance! + + please don't share this link yet, mostly because my app is still + buggy and insecure (i definitely don't want random peoples from the + internet trying to hack it right now!) + + pg + ''' + + [From Jan 2010 until Aug 2011, v1 was deployed online on my personal + and MIT servers, and it barely had any users. From a technical + standpoint, it rendered all data structures as HTML tables and had no + pointers, so aliased data were duplicated. It was a proof-of-concept + side project that I had fun hacking on and showing off to people.] + + [In Sep-Oct 2011, I majorly brushed up OPT into v2 since a few power + users started using it more seriously and making feature requests + (e.g., Brad Miller, Suzanne Rivoire, Peter Wentworth), and + Python-based MOOCs were also just starting to take off ...] + + Online Python Tutor version 2 - released on October 4, 2011 + "Release" email to 13 friends: + + Subject: Re: version 0.0000001alpha of my online Python tutor + Body: + ''' + Dear subset of people who cared about my prior email from almost 2 + years ago ... + + I've recently kicked it up a notch with a "2.0" version and am about + to do a public release soon. I'd really appreciate any feedback, + criticism, and especially bug reports on Internet Explorer ;) + + http://people.csail.mit.edu/pgbovine/opt-prerelease/ + + Please don't share the link yet since it will be dead soon when I + move this app to its permanent home. I just want to get some early + feedback to eliminate the obviously embarrassing bugs before launch. + + THANKS! + + pg + ''' + + [From Oct 2011 until Sep 2012, v2 was deployed online and launched as + www.onlinepythontutor.com. The biggest technical advance over v1 was + the use of pointers (rather than duplicating objects with identical + object IDs) to better visualize aliasing. However, pointers could + point only from names to objects (i.e., from within a frame to the + heap); heap-to-heap pointers weren't implemented yet. During this time + period, MOOCs started taking off, and the usage of Python Tutor grew + organically.] + + +v3/ + + [In July-Sep 2012, I made a giant push to release v3, working closely + with John DeNero and others at Google and beyond ... awesome times!] + + Online Python Tutor version 3 - Released on September 18, 2012 + to 153,000+ people who followed the official Research@Google Google+ + account: https://plus.google.com/+ResearchatGoogle/posts/cseo9qi7LWq + + "Release" announcement from the Research @ Google G+ account: + ''' + Online Python Tutor: Web-Based Program Visualization for CS Education + + As part of his CS education work at Google, +Philip Guo has been + developing an open-source educational tool called Online Python Tutor + (http://www.pythontutor.com). This tool enables teachers and students + to write Python programs directly in the web browser and then + single-step forwards and backwards to visualize what the computer is + doing as it executes those programs. + + Program visualization for CS education is nothing new -- researchers + have been developing these sorts of tools for decades. However, most + of these tools never reach far beyond the confines of the researchers' + home universities due to the difficulty of installing and configuring + the visualization software. What makes Online Python Tutor unique and + effective is that it's the first known tool to adapt time-tested ideas + from the research literature (e.g., rendering of box-and-pointer + diagrams) for a web-based environment. Now anyone with a modern + browser can create, explore, and share their program visualizations by + simply visiting a web URL. + + This ease of access has been a major contributor to adoption: So far, + over 100,000 people have used Online Python Tutor to understand and + debug their programs, often as a supplement to learning from + textbooks, lecture notes, and online programming tutorials. In + addition, instructors in over a dozen universities such as MIT, UC + Berkeley, and the University of Washington have used it for teaching + introductory computer science courses. + + But this is just the beginning. Philip and his colleagues are now + building an online authoring environment so that, within the next few + months, teachers and students will be able to save their code snippets + and add annotations, discussion threads, lessons, and interactive + exercises on top of the associated visualizations. + + They are also actively seeking partnerships with educators at all + grade levels to deploy and improve Online Python Tutor. Please contact + Philip directly or re-share this post with educators who might be + interested in working with this tool in any capacity. + + Visit www.pythontutor.com to learn more and to start visualizing your + Python programs now! + ''' + + [This official publicity provided a big initial PUSH that spurred + worldwide usage of the tool, and it kept growing organically from + there thanks to momentum and also MOOCs and other online learning + resources quickly rising in popularity around 2012-2013.] + + [The biggest advance of v3 over v2 was more sophisticated pointer + visualizations and layout, including heap-to-heap pointers. Another + major advance is that each visualizer instance is now encapsulated + into a self-contained JavaScript object; thus, multiple visualizers + can now be embedded within a single web page. (in v1 and v2, only a + single visualizer could be displayed on a given page, since there was + no encapsulation; all state was global, eek!) Also, all state is + encapsulated in a simple URL, so that it's easily sharable or + iframe-embeddable, which is very useful! v3 also marked the launch of + the crisper pythontutor.com domain rather than the older and more + clunky www.onlinepythontutor.com domain used for v2. In mid-2014, the + "shared sessions" feature (a.k.a. Codechella) was launched onto the + site, which enables multiple users to simultaneously join a shared + session. During the period of v3, this tool experienced a significant + growth in user numbers to well beyond 1 million users and 10 million + visualized pieces of code!] + + +v4-cokapi/ + + 2015-01-24 - started a new version (based on v3 code base) to expand + Online Python Tutor to support multiple languages such as JavaScript + and Java. Note that this contains only backend code, so we still rely + on v3/ for the frontend (and the original Python backend) + + [v4 was purely a backend advancement; the v3 code is still used for + the frontend. By the end of 2015, six new languages had been added: + Java (from David Pritchard's backend), JavaScript, TypeScript, Ruby, + C, and C++. In short, 2015 was the year of adding new languages to + expand this tool's scope beyond just Python and hopefully making it + into a more generally-useful tool in the coming years.] + +--- +Contributor acknowledgments: + +John DeNero - for helping with the official Python 3 port and LOTS of code patches +Chris Horne - https://github.com/lahwran - for security tips +Joshua Landau - joshua@landau.ws - for security tips +Peter Wentworth and his students - for working on the original Python 3 fork circa 2011 +Brad Miller - for adding pop-up question dialogs to visualizations, and other bug fixes +David Pritchard and Will Gwozdz - for the Java frontend and other frontend enhancements +Peter Robinson - for v3/make_visualizations.py +Chris Meyers - for custom visualizations such as v3/matrix.py and v3/htmlFrame.py +Irene Chen - for holistic visualization mode -- v3/js/holistic.js + + +For advice and feedback from an instructor's perspective: + +Jennifer Campbell +John Dalbey +John DeNero +Fredo Durand +Michael Ernst +David Evans +Paul Gries +Adam Hartz +Tomas Lozano-Perez +Bertram Ludaescher +Brad Miller +Rob Miller +Peter Norvig +Andrew Petersen +David Pritchard +Suzanne Rivoire +Peter Wentworth +David Wilkins + +... and many, many more! diff --git a/cgi-bin/demjson.py b/cgi-bin/demjson.py deleted file mode 100644 index a513ee134..000000000 --- a/cgi-bin/demjson.py +++ /dev/null @@ -1,2138 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -r""" A JSON data encoder and decoder. - - This Python module implements the JSON (http://json.org/) data - encoding format; a subset of ECMAScript (aka JavaScript) for encoding - primitive data types (numbers, strings, booleans, lists, and - associative arrays) in a language-neutral simple text-based syntax. - - It can encode or decode between JSON formatted strings and native - Python data types. Normally you would use the encode() and decode() - functions defined by this module, but if you want more control over - the processing you can use the JSON class. - - This implementation tries to be as completely cormforming to all - intricacies of the standards as possible. It can operate in strict - mode (which only allows JSON-compliant syntax) or a non-strict mode - (which allows much more of the whole ECMAScript permitted syntax). - This includes complete support for Unicode strings (including - surrogate-pairs for non-BMP characters), and all number formats - including negative zero and IEEE 754 non-numbers such a NaN or - Infinity. - - The JSON/ECMAScript to Python type mappings are: - ---JSON--- ---Python--- - null None - undefined undefined (note 1) - Boolean (true,false) bool (True or False) - Integer int or long (note 2) - Float float - String str or unicode ( "..." or u"..." ) - Array [a, ...] list ( [...] ) - Object {a:b, ...} dict ( {...} ) - - -- Note 1. an 'undefined' object is declared in this module which - represents the native Python value for this type when in - non-strict mode. - - -- Note 2. some ECMAScript integers may be up-converted to Python - floats, such as 1e+40. Also integer -0 is converted to - float -0, so as to preserve the sign (which ECMAScript requires). - - In addition, when operating in non-strict mode, several IEEE 754 - non-numbers are also handled, and are mapped to specific Python - objects declared in this module: - - NaN (not a number) nan (float('nan')) - Infinity, +Infinity inf (float('inf')) - -Infinity neginf (float('-inf')) - - When encoding Python objects into JSON, you may use types other than - native lists or dictionaries, as long as they support the minimal - interfaces required of all sequences or mappings. This means you can - use generators and iterators, tuples, UserDict subclasses, etc. - - To make it easier to produce JSON encoded representations of user - defined classes, if the object has a method named json_equivalent(), - then it will call that method and attempt to encode the object - returned from it instead. It will do this recursively as needed and - before any attempt to encode the object using it's default - strategies. Note that any json_equivalent() method should return - "equivalent" Python objects to be encoded, not an already-encoded - JSON-formatted string. There is no such aid provided to decode - JSON back into user-defined classes as that would dramatically - complicate the interface. - - When decoding strings with this module it may operate in either - strict or non-strict mode. The strict mode only allows syntax which - is conforming to RFC 4627 (JSON), while the non-strict allows much - more of the permissible ECMAScript syntax. - - The following are permitted when processing in NON-STRICT mode: - - * Unicode format control characters are allowed anywhere in the input. - * All Unicode line terminator characters are recognized. - * All Unicode white space characters are recognized. - * The 'undefined' keyword is recognized. - * Hexadecimal number literals are recognized (e.g., 0xA6, 0177). - * String literals may use either single or double quote marks. - * Strings may contain \x (hexadecimal) escape sequences, as well as the - \v and \0 escape sequences. - * Lists may have omitted (elided) elements, e.g., [,,,,,], with - missing elements interpreted as 'undefined' values. - * Object properties (dictionary keys) can be of any of the - types: string literals, numbers, or identifiers (the later of - which are treated as if they are string literals)---as permitted - by ECMAScript. JSON only permits strings literals as keys. - - Concerning non-strict and non-ECMAScript allowances: - - * Octal numbers: If you allow the 'octal_numbers' behavior (which - is never enabled by default), then you can use octal integers - and octal character escape sequences (per the ECMAScript - standard Annex B.1.2). This behavior is allowed, if enabled, - because it was valid JavaScript at one time. - - * Multi-line string literals: Strings which are more than one - line long (contain embedded raw newline characters) are never - permitted. This is neither valid JSON nor ECMAScript. Some other - JSON implementations may allow this, but this module considers - that behavior to be a mistake. - - References: - * JSON (JavaScript Object Notation) - - * RFC 4627. The application/json Media Type for JavaScript Object Notation (JSON) - - * ECMA-262 3rd edition (1999) - - * IEEE 754-1985: Standard for Binary Floating-Point Arithmetic. - - -""" - -__author__ = "Deron Meranda " -__date__ = "2008-12-17" -__version__ = "1.4" -__credits__ = """Copyright (c) 2006-2008 Deron E. Meranda -Licensed under GNU LGPL 3.0 (GNU Lesser General Public License) or -later. See LICENSE.txt included with this software. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this program. If not, see -or . - -""" - -# ------------------------------ -# useful global constants - -content_type = 'application/json' -file_ext = 'json' -hexdigits = '0123456789ABCDEFabcdef' -octaldigits = '01234567' - -# ---------------------------------------------------------------------- -# Decimal and float types. -# -# If a JSON number can not be stored in a Python float without loosing -# precision and the Python has the decimal type, then we will try to -# use decimal instead of float. To make this determination we need to -# know the limits of the float type, but Python doesn't have an easy -# way to tell what the largest floating-point number it supports. So, -# we detemine the precision and scale of the float type by testing it. - -try: - # decimal module was introduced in Python 2.4 - import decimal -except ImportError: - decimal = None - -def determine_float_precision(): - """Returns a tuple (significant_digits, max_exponent) for the float type. - """ - import math - # Just count the digits in pi. The last two decimal digits - # may only be partial digits, so discount for them. - whole, frac = repr(math.pi).split('.') - sigdigits = len(whole) + len(frac) - 2 - - # This is a simple binary search. We find the largest exponent - # that the float() type can handle without going infinite or - # raising errors. - maxexp = None - minv = 0; maxv = 1000 - while True: - if minv+1 == maxv: - maxexp = minv - 1 - break - elif maxv < minv: - maxexp = None - break - m = (minv + maxv) // 2 - try: - f = repr(float( '1e+%d' % m )) - except ValueError: - f = None - else: - if not f or f[0] < '0' or f[0] > '9': - f = None - if not f: - # infinite - maxv = m - else: - minv = m - return sigdigits, maxexp - -float_sigdigits, float_maxexp = determine_float_precision() - -# ---------------------------------------------------------------------- -# The undefined value. -# -# ECMAScript has an undefined value (similar to yet distinct from null). -# Neither Python or strict JSON have support undefined, but to allow -# JavaScript behavior we must simulate it. - -class _undefined_class(object): - """Represents the ECMAScript 'undefined' value.""" - __slots__ = [] - def __repr__(self): - return self.__module__ + '.undefined' - def __str__(self): - return 'undefined' - def __nonzero__(self): - return False -undefined = _undefined_class() -del _undefined_class - - -# ---------------------------------------------------------------------- -# Non-Numbers: NaN, Infinity, -Infinity -# -# ECMAScript has official support for non-number floats, although -# strict JSON does not. Python doesn't either. So to support the -# full JavaScript behavior we must try to add them into Python, which -# is unfortunately a bit of black magic. If our python implementation -# happens to be built on top of IEEE 754 we can probably trick python -# into using real floats. Otherwise we must simulate it with classes. - -def _nonnumber_float_constants(): - """Try to return the Nan, Infinity, and -Infinity float values. - - This is unnecessarily complex because there is no standard - platform- independent way to do this in Python as the language - (opposed to some implementation of it) doesn't discuss - non-numbers. We try various strategies from the best to the - worst. - - If this Python interpreter uses the IEEE 754 floating point - standard then the returned values will probably be real instances - of the 'float' type. Otherwise a custom class object is returned - which will attempt to simulate the correct behavior as much as - possible. - - """ - try: - # First, try (mostly portable) float constructor. Works under - # Linux x86 (gcc) and some Unices. - nan = float('nan') - inf = float('inf') - neginf = float('-inf') - except ValueError: - try: - # Try the AIX (PowerPC) float constructors - nan = float('NaNQ') - inf = float('INF') - neginf = float('-INF') - except ValueError: - try: - # Next, try binary unpacking. Should work under - # platforms using IEEE 754 floating point. - import struct, sys - xnan = '7ff8000000000000'.decode('hex') # Quiet NaN - xinf = '7ff0000000000000'.decode('hex') - xcheck = 'bdc145651592979d'.decode('hex') # -3.14159e-11 - # Could use float.__getformat__, but it is a new python feature, - # so we use sys.byteorder. - if sys.byteorder == 'big': - nan = struct.unpack('d', xnan)[0] - inf = struct.unpack('d', xinf)[0] - check = struct.unpack('d', xcheck)[0] - else: - nan = struct.unpack('d', xnan[::-1])[0] - inf = struct.unpack('d', xinf[::-1])[0] - check = struct.unpack('d', xcheck[::-1])[0] - neginf = - inf - if check != -3.14159e-11: - raise ValueError('Unpacking raw IEEE 754 floats does not work') - except (ValueError, TypeError): - # Punt, make some fake classes to simulate. These are - # not perfect though. For instance nan * 1.0 == nan, - # as expected, but 1.0 * nan == 0.0, which is wrong. - class nan(float): - """An approximation of the NaN (not a number) floating point number.""" - def __repr__(self): return 'nan' - def __str__(self): return 'nan' - def __add__(self,x): return self - def __radd__(self,x): return self - def __sub__(self,x): return self - def __rsub__(self,x): return self - def __mul__(self,x): return self - def __rmul__(self,x): return self - def __div__(self,x): return self - def __rdiv__(self,x): return self - def __divmod__(self,x): return (self,self) - def __rdivmod__(self,x): return (self,self) - def __mod__(self,x): return self - def __rmod__(self,x): return self - def __pow__(self,exp): return self - def __rpow__(self,exp): return self - def __neg__(self): return self - def __pos__(self): return self - def __abs__(self): return self - def __lt__(self,x): return False - def __le__(self,x): return False - def __eq__(self,x): return False - def __neq__(self,x): return True - def __ge__(self,x): return False - def __gt__(self,x): return False - def __complex__(self,*a): raise NotImplementedError('NaN can not be converted to a complex') - if decimal: - nan = decimal.Decimal('NaN') - else: - nan = nan() - class inf(float): - """An approximation of the +Infinity floating point number.""" - def __repr__(self): return 'inf' - def __str__(self): return 'inf' - def __add__(self,x): return self - def __radd__(self,x): return self - def __sub__(self,x): return self - def __rsub__(self,x): return self - def __mul__(self,x): - if x is neginf or x < 0: - return neginf - elif x == 0: - return nan - else: - return self - def __rmul__(self,x): return self.__mul__(x) - def __div__(self,x): - if x == 0: - raise ZeroDivisionError('float division') - elif x < 0: - return neginf - else: - return self - def __rdiv__(self,x): - if x is inf or x is neginf or x is nan: - return nan - return 0.0 - def __divmod__(self,x): - if x == 0: - raise ZeroDivisionError('float divmod()') - elif x < 0: - return (nan,nan) - else: - return (self,self) - def __rdivmod__(self,x): - if x is inf or x is neginf or x is nan: - return (nan, nan) - return (0.0, x) - def __mod__(self,x): - if x == 0: - raise ZeroDivisionError('float modulo') - else: - return nan - def __rmod__(self,x): - if x is inf or x is neginf or x is nan: - return nan - return x - def __pow__(self, exp): - if exp == 0: - return 1.0 - else: - return self - def __rpow__(self, x): - if -1 < x < 1: return 0.0 - elif x == 1.0: return 1.0 - elif x is nan or x is neginf or x < 0: - return nan - else: - return self - def __neg__(self): return neginf - def __pos__(self): return self - def __abs__(self): return self - def __lt__(self,x): return False - def __le__(self,x): - if x is self: - return True - else: - return False - def __eq__(self,x): - if x is self: - return True - else: - return False - def __neq__(self,x): - if x is self: - return False - else: - return True - def __ge__(self,x): return True - def __gt__(self,x): return True - def __complex__(self,*a): raise NotImplementedError('Infinity can not be converted to a complex') - if decimal: - inf = decimal.Decimal('Infinity') - else: - inf = inf() - class neginf(float): - """An approximation of the -Infinity floating point number.""" - def __repr__(self): return '-inf' - def __str__(self): return '-inf' - def __add__(self,x): return self - def __radd__(self,x): return self - def __sub__(self,x): return self - def __rsub__(self,x): return self - def __mul__(self,x): - if x is self or x < 0: - return inf - elif x == 0: - return nan - else: - return self - def __rmul__(self,x): return self.__mul__(self) - def __div__(self,x): - if x == 0: - raise ZeroDivisionError('float division') - elif x < 0: - return inf - else: - return self - def __rdiv__(self,x): - if x is inf or x is neginf or x is nan: - return nan - return -0.0 - def __divmod__(self,x): - if x == 0: - raise ZeroDivisionError('float divmod()') - elif x < 0: - return (nan,nan) - else: - return (self,self) - def __rdivmod__(self,x): - if x is inf or x is neginf or x is nan: - return (nan, nan) - return (-0.0, x) - def __mod__(self,x): - if x == 0: - raise ZeroDivisionError('float modulo') - else: - return nan - def __rmod__(self,x): - if x is inf or x is neginf or x is nan: - return nan - return x - def __pow__(self,exp): - if exp == 0: - return 1.0 - else: - return self - def __rpow__(self, x): - if x is nan or x is inf or x is inf: - return nan - return 0.0 - def __neg__(self): return inf - def __pos__(self): return self - def __abs__(self): return inf - def __lt__(self,x): return True - def __le__(self,x): return True - def __eq__(self,x): - if x is self: - return True - else: - return False - def __neq__(self,x): - if x is self: - return False - else: - return True - def __ge__(self,x): - if x is self: - return True - else: - return False - def __gt__(self,x): return False - def __complex__(self,*a): raise NotImplementedError('-Infinity can not be converted to a complex') - if decimal: - neginf = decimal.Decimal('-Infinity') - else: - neginf = neginf(0) - return nan, inf, neginf - -nan, inf, neginf = _nonnumber_float_constants() -del _nonnumber_float_constants - - -# ---------------------------------------------------------------------- -# String processing helpers - -unsafe_string_chars = '"\\' + ''.join([chr(i) for i in range(0x20)]) -def skipstringsafe( s, start=0, end=None ): - i = start - #if end is None: - # end = len(s) - while i < end and s[i] not in unsafe_string_chars: - #c = s[i] - #if c in unsafe_string_chars: - # break - i += 1 - return i -def skipstringsafe_slow( s, start=0, end=None ): - i = start - if end is None: - end = len(s) - while i < end: - c = s[i] - if c == '"' or c == '\\' or ord(c) <= 0x1f: - break - i += 1 - return i - -def extend_list_with_sep( orig_seq, extension_seq, sepchar='' ): - if not sepchar: - orig_seq.extend( extension_seq ) - else: - for i, x in enumerate(extension_seq): - if i > 0: - orig_seq.append( sepchar ) - orig_seq.append( x ) - -def extend_and_flatten_list_with_sep( orig_seq, extension_seq, separator='' ): - for i, part in enumerate(extension_seq): - if i > 0 and separator: - orig_seq.append( separator ) - orig_seq.extend( part ) - - -# ---------------------------------------------------------------------- -# Unicode helpers -# -# JSON requires that all JSON implementations must support the UTF-32 -# encoding (as well as UTF-8 and UTF-16). But earlier versions of -# Python did not provide a UTF-32 codec. So we must implement UTF-32 -# ourselves in case we need it. - -def utf32le_encode( obj, errors='strict' ): - """Encodes a Unicode string into a UTF-32LE encoded byte string.""" - import struct - try: - import cStringIO as sio - except ImportError: - import StringIO as sio - f = sio.StringIO() - write = f.write - pack = struct.pack - for c in obj: - n = ord(c) - if 0xD800 <= n <= 0xDFFF: # surrogate codepoints are prohibited by UTF-32 - if errors == 'ignore': - continue - elif errors == 'replace': - n = ord('?') - else: - cname = 'U+%04X'%n - raise UnicodeError('UTF-32 can not encode surrogate characters',cname) - write( pack('L', n) ) - return f.getvalue() - - -def utf32le_decode( obj, errors='strict' ): - """Decodes a UTF-32LE byte string into a Unicode string.""" - if len(obj) % 4 != 0: - raise UnicodeError('UTF-32 decode error, data length not a multiple of 4 bytes') - import struct - unpack = struct.unpack - chars = [] - i = 0 - for i in range(0, len(obj), 4): - seq = obj[i:i+4] - n = unpack('L',seq)[0] - chars.append( unichr(n) ) - return u''.join( chars ) - - -def auto_unicode_decode( s ): - """Takes a string and tries to convert it to a Unicode string. - - This will return a Python unicode string type corresponding to the - input string (either str or unicode). The character encoding is - guessed by looking for either a Unicode BOM prefix, or by the - rules specified by RFC 4627. When in doubt it is assumed the - input is encoded in UTF-8 (the default for JSON). - - """ - if isinstance(s, unicode): - return s - if len(s) < 4: - return s.decode('utf8') # not enough bytes, assume default of utf-8 - # Look for BOM marker - import codecs - bom2 = s[:2] - bom4 = s[:4] - a, b, c, d = map(ord, s[:4]) # values of first four bytes - if bom4 == codecs.BOM_UTF32_LE: - encoding = 'utf-32le' - s = s[4:] - elif bom4 == codecs.BOM_UTF32_BE: - encoding = 'utf-32be' - s = s[4:] - elif bom2 == codecs.BOM_UTF16_LE: - encoding = 'utf-16le' - s = s[2:] - elif bom2 == codecs.BOM_UTF16_BE: - encoding = 'utf-16be' - s = s[2:] - # No BOM, so autodetect encoding used by looking at first four bytes - # according to RFC 4627 section 3. - elif a==0 and b==0 and c==0 and d!=0: # UTF-32BE - encoding = 'utf-32be' - elif a==0 and b!=0 and c==0 and d!=0: # UTF-16BE - encoding = 'utf-16be' - elif a!=0 and b==0 and c==0 and d==0: # UTF-32LE - encoding = 'utf-32le' - elif a!=0 and b==0 and c!=0 and d==0: # UTF-16LE - encoding = 'utf-16le' - else: #if a!=0 and b!=0 and c!=0 and d!=0: # UTF-8 - # JSON spec says default is UTF-8, so always guess it - # if we can't guess otherwise - encoding = 'utf8' - # Make sure the encoding is supported by Python - try: - cdk = codecs.lookup(encoding) - except LookupError: - if encoding.startswith('utf-32') \ - or encoding.startswith('ucs4') \ - or encoding.startswith('ucs-4'): - # Python doesn't natively have a UTF-32 codec, but JSON - # requires that it be supported. So we must decode these - # manually. - if encoding.endswith('le'): - unis = utf32le_decode(s) - else: - unis = utf32be_decode(s) - else: - raise JSONDecodeError('this python has no codec for this character encoding',encoding) - else: - # Convert to unicode using a standard codec - unis = s.decode(encoding) - return unis - - -def surrogate_pair_as_unicode( c1, c2 ): - """Takes a pair of unicode surrogates and returns the equivalent unicode character. - - The input pair must be a surrogate pair, with c1 in the range - U+D800 to U+DBFF and c2 in the range U+DC00 to U+DFFF. - - """ - n1, n2 = ord(c1), ord(c2) - if n1 < 0xD800 or n1 > 0xDBFF or n2 < 0xDC00 or n2 > 0xDFFF: - raise JSONDecodeError('illegal Unicode surrogate pair',(c1,c2)) - a = n1 - 0xD800 - b = n2 - 0xDC00 - v = (a << 10) | b - v += 0x10000 - return unichr(v) - - -def unicode_as_surrogate_pair( c ): - """Takes a single unicode character and returns a sequence of surrogate pairs. - - The output of this function is a tuple consisting of one or two unicode - characters, such that if the input character is outside the BMP range - then the output is a two-character surrogate pair representing that character. - - If the input character is inside the BMP then the output tuple will have - just a single character...the same one. - - """ - n = ord(c) - if n < 0x10000: - return (unichr(n),) # in BMP, surrogate pair not required - v = n - 0x10000 - vh = (v >> 10) & 0x3ff # highest 10 bits - vl = v & 0x3ff # lowest 10 bits - w1 = 0xD800 | vh - w2 = 0xDC00 | vl - return (unichr(w1), unichr(w2)) - - -# ---------------------------------------------------------------------- -# Type identification - -def isnumbertype( obj ): - """Is the object of a Python number type (excluding complex)?""" - return isinstance(obj, (int,long,float)) \ - and not isinstance(obj, bool) \ - or obj is nan or obj is inf or obj is neginf - - -def isstringtype( obj ): - """Is the object of a Python string type?""" - if isinstance(obj, basestring): - return True - # Must also check for some other pseudo-string types - import types, UserString - return isinstance(obj, types.StringTypes) \ - or isinstance(obj, UserString.UserString) \ - or isinstance(obj, UserString.MutableString) - - -# ---------------------------------------------------------------------- -# Numeric helpers - -def decode_hex( hexstring ): - """Decodes a hexadecimal string into it's integer value.""" - # We don't use the builtin 'hex' codec in python since it can - # not handle odd numbers of digits, nor raise the same type - # of exceptions we want to. - n = 0 - for c in hexstring: - if '0' <= c <= '9': - d = ord(c) - ord('0') - elif 'a' <= c <= 'f': - d = ord(c) - ord('a') + 10 - elif 'A' <= c <= 'F': - d = ord(c) - ord('A') + 10 - else: - raise JSONDecodeError('not a hexadecimal number',hexstring) - # Could use ((n << 4 ) | d), but python 2.3 issues a FutureWarning. - n = (n * 16) + d - return n - - -def decode_octal( octalstring ): - """Decodes an octal string into it's integer value.""" - n = 0 - for c in octalstring: - if '0' <= c <= '7': - d = ord(c) - ord('0') - else: - raise JSONDecodeError('not an octal number',octalstring) - # Could use ((n << 3 ) | d), but python 2.3 issues a FutureWarning. - n = (n * 8) + d - return n - - -# ---------------------------------------------------------------------- -# Exception classes. - -class JSONError(ValueError): - """Our base class for all JSON-related errors. - - """ - def pretty_description(self): - err = self.args[0] - if len(self.args) > 1: - err += ': ' - for anum, a in enumerate(self.args[1:]): - if anum > 1: - err += ', ' - astr = repr(a) - if len(astr) > 20: - astr = astr[:20] + '...' - err += astr - return err - -class JSONDecodeError(JSONError): - """An exception class raised when a JSON decoding error (syntax error) occurs.""" - - -class JSONEncodeError(JSONError): - """An exception class raised when a python object can not be encoded as a JSON string.""" - - -#---------------------------------------------------------------------- -# The main JSON encoder/decoder class. - -class JSON(object): - """An encoder/decoder for JSON data streams. - - Usually you will call the encode() or decode() methods. The other - methods are for lower-level processing. - - Whether the JSON parser runs in strict mode (which enforces exact - compliance with the JSON spec) or the more forgiving non-string mode - can be affected by setting the 'strict' argument in the object's - initialization; or by assigning True or False to the 'strict' - property of the object. - - You can also adjust a finer-grained control over strictness by - allowing or preventing specific behaviors. You can get a list of - all the available behaviors by accessing the 'behaviors' property. - Likewise the allowed_behaviors and prevented_behaviors list which - behaviors will be allowed and which will not. Call the allow() - or prevent() methods to adjust these. - - """ - _escapes_json = { # character escapes in JSON - '"': '"', - '/': '/', - '\\': '\\', - 'b': '\b', - 'f': '\f', - 'n': '\n', - 'r': '\r', - 't': '\t', - } - - _escapes_js = { # character escapes in Javascript - '"': '"', - '\'': '\'', - '\\': '\\', - 'b': '\b', - 'f': '\f', - 'n': '\n', - 'r': '\r', - 't': '\t', - 'v': '\v', - '0': '\x00' - } - - # Following is a reverse mapping of escape characters, used when we - # output JSON. Only those escapes which are always safe (e.g., in JSON) - # are here. It won't hurt if we leave questionable ones out. - _rev_escapes = {'\n': '\\n', - '\t': '\\t', - '\b': '\\b', - '\r': '\\r', - '\f': '\\f', - '"': '\\"', - '\\': '\\\\'} - - def __init__(self, strict=False, compactly=True, escape_unicode=False): - """Creates a JSON encoder/decoder object. - - If 'strict' is set to True, then only strictly-conforming JSON - output will be produced. Note that this means that some types - of values may not be convertable and will result in a - JSONEncodeError exception. - - If 'compactly' is set to True, then the resulting string will - have all extraneous white space removed; if False then the - string will be "pretty printed" with whitespace and indentation - added to make it more readable. - - If 'escape_unicode' is set to True, then all non-ASCII characters - will be represented as a unicode escape sequence; if False then - the actual real unicode character will be inserted if possible. - - The 'escape_unicode' can also be a function, which when called - with a single argument of a unicode character will return True - if the character should be escaped or False if it should not. - - If you wish to extend the encoding to ba able to handle - additional types, you should subclass this class and override - the encode_default() method. - - """ - import sys - self._set_strictness(strict) - self._encode_compactly = compactly - try: - # see if we were passed a predicate function - b = escape_unicode(u'A') - self._encode_unicode_as_escapes = escape_unicode - except (ValueError, NameError, TypeError): - # Just set to True or False. We could use lambda x:True - # to make it more consistent (always a function), but it - # will be too slow, so we'll make explicit tests later. - self._encode_unicode_as_escapes = bool(escape_unicode) - self._sort_dictionary_keys = True - - # The following is a boolean map of the first 256 characters - # which will quickly tell us which of those characters never - # need to be escaped. - - self._asciiencodable = [32 <= c < 128 and not self._rev_escapes.has_key(chr(c)) - for c in range(0,255)] - - def _set_strictness(self, strict): - """Changes the strictness behavior. - - Pass True to be very strict about JSON syntax, or False to be looser. - """ - self._allow_any_type_at_start = not strict - self._allow_all_numeric_signs = not strict - self._allow_comments = not strict - self._allow_control_char_in_string = not strict - self._allow_hex_numbers = not strict - self._allow_initial_decimal_point = not strict - self._allow_js_string_escapes = not strict - self._allow_non_numbers = not strict - self._allow_nonescape_characters = not strict # "\z" -> "z" - self._allow_nonstring_keys = not strict - self._allow_omitted_array_elements = not strict - self._allow_single_quoted_strings = not strict - self._allow_trailing_comma_in_literal = not strict - self._allow_undefined_values = not strict - self._allow_unicode_format_control_chars = not strict - self._allow_unicode_whitespace = not strict - # Always disable this by default - self._allow_octal_numbers = False - - def allow(self, behavior): - """Allow the specified behavior (turn off a strictness check). - - The list of all possible behaviors is available in the behaviors property. - You can see which behaviors are currently allowed by accessing the - allowed_behaviors property. - - """ - p = '_allow_' + behavior - if hasattr(self, p): - setattr(self, p, True) - else: - raise AttributeError('Behavior is not known',behavior) - - def prevent(self, behavior): - """Prevent the specified behavior (turn on a strictness check). - - The list of all possible behaviors is available in the behaviors property. - You can see which behaviors are currently prevented by accessing the - prevented_behaviors property. - - """ - p = '_allow_' + behavior - if hasattr(self, p): - setattr(self, p, False) - else: - raise AttributeError('Behavior is not known',behavior) - - def _get_behaviors(self): - return sorted([ n[len('_allow_'):] for n in self.__dict__ \ - if n.startswith('_allow_')]) - behaviors = property(_get_behaviors, - doc='List of known behaviors that can be passed to allow() or prevent() methods') - - def _get_allowed_behaviors(self): - return sorted([ n[len('_allow_'):] for n in self.__dict__ \ - if n.startswith('_allow_') and getattr(self,n)]) - allowed_behaviors = property(_get_allowed_behaviors, - doc='List of known behaviors that are currently allowed') - - def _get_prevented_behaviors(self): - return sorted([ n[len('_allow_'):] for n in self.__dict__ \ - if n.startswith('_allow_') and not getattr(self,n)]) - prevented_behaviors = property(_get_prevented_behaviors, - doc='List of known behaviors that are currently prevented') - - def _is_strict(self): - return not self.allowed_behaviors - strict = property(_is_strict, _set_strictness, - doc='True if adherence to RFC 4627 syntax is strict, or False is more generous ECMAScript syntax is permitted') - - - def isws(self, c): - """Determines if the given character is considered as white space. - - Note that Javscript is much more permissive on what it considers - to be whitespace than does JSON. - - Ref. ECMAScript section 7.2 - - """ - if not self._allow_unicode_whitespace: - return c in ' \t\n\r' - else: - if not isinstance(c,unicode): - c = unicode(c) - if c in u' \t\n\r\f\v': - return True - import unicodedata - return unicodedata.category(c) == 'Zs' - - def islineterm(self, c): - """Determines if the given character is considered a line terminator. - - Ref. ECMAScript section 7.3 - - """ - if c == '\r' or c == '\n': - return True - if c == u'\u2028' or c == u'\u2029': # unicodedata.category(c) in ['Zl', 'Zp'] - return True - return False - - def strip_format_control_chars(self, txt): - """Filters out all Unicode format control characters from the string. - - ECMAScript permits any Unicode "format control characters" to - appear at any place in the source code. They are to be - ignored as if they are not there before any other lexical - tokenization occurs. Note that JSON does not allow them. - - Ref. ECMAScript section 7.1. - - """ - import unicodedata - txt2 = filter( lambda c: unicodedata.category(unicode(c)) != 'Cf', - txt ) - return txt2 - - - def decode_null(self, s, i=0): - """Intermediate-level decoder for ECMAScript 'null' keyword. - - Takes a string and a starting index, and returns a Python - None object and the index of the next unparsed character. - - """ - if i < len(s) and s[i:i+4] == 'null': - return None, i+4 - raise JSONDecodeError('literal is not the JSON "null" keyword', s) - - def encode_undefined(self): - """Produces the ECMAScript 'undefined' keyword.""" - return 'undefined' - - def encode_null(self): - """Produces the JSON 'null' keyword.""" - return 'null' - - def decode_boolean(self, s, i=0): - """Intermediate-level decode for JSON boolean literals. - - Takes a string and a starting index, and returns a Python bool - (True or False) and the index of the next unparsed character. - - """ - if s[i:i+4] == 'true': - return True, i+4 - elif s[i:i+5] == 'false': - return False, i+5 - raise JSONDecodeError('literal value is not a JSON boolean keyword',s) - - def encode_boolean(self, b): - """Encodes the Python boolean into a JSON Boolean literal.""" - if bool(b): - return 'true' - return 'false' - - def decode_number(self, s, i=0, imax=None): - """Intermediate-level decoder for JSON numeric literals. - - Takes a string and a starting index, and returns a Python - suitable numeric type and the index of the next unparsed character. - - The returned numeric type can be either of a Python int, - long, or float. In addition some special non-numbers may - also be returned such as nan, inf, and neginf (technically - which are Python floats, but have no numeric value.) - - Ref. ECMAScript section 8.5. - - """ - if imax is None: - imax = len(s) - # Detect initial sign character(s) - if not self._allow_all_numeric_signs: - if s[i] == '+' or (s[i] == '-' and i+1 < imax and \ - s[i+1] in '+-'): - raise JSONDecodeError('numbers in strict JSON may only have a single "-" as a sign prefix',s[i:]) - sign = +1 - j = i # j will point after the sign prefix - while j < imax and s[j] in '+-': - if s[j] == '-': sign = sign * -1 - j += 1 - # Check for ECMAScript symbolic non-numbers - if s[j:j+3] == 'NaN': - if self._allow_non_numbers: - return nan, j+3 - else: - raise JSONDecodeError('NaN literals are not allowed in strict JSON') - elif s[j:j+8] == 'Infinity': - if self._allow_non_numbers: - if sign < 0: - return neginf, j+8 - else: - return inf, j+8 - else: - raise JSONDecodeError('Infinity literals are not allowed in strict JSON') - elif s[j:j+2] in ('0x','0X'): - if self._allow_hex_numbers: - k = j+2 - while k < imax and s[k] in hexdigits: - k += 1 - n = sign * decode_hex( s[j+2:k] ) - return n, k - else: - raise JSONDecodeError('hexadecimal literals are not allowed in strict JSON',s[i:]) - else: - # Decimal (or octal) number, find end of number. - # General syntax is: \d+[\.\d+][e[+-]?\d+] - k = j # will point to end of digit sequence - could_be_octal = ( k+1 < imax and s[k] == '0' ) # first digit is 0 - decpt = None # index into number of the decimal point, if any - ept = None # index into number of the e|E exponent start, if any - esign = '+' # sign of exponent - sigdigits = 0 # number of significant digits (approx, counts end zeros) - while k < imax and (s[k].isdigit() or s[k] in '.+-eE'): - c = s[k] - if c not in octaldigits: - could_be_octal = False - if c == '.': - if decpt is not None or ept is not None: - break - else: - decpt = k-j - elif c in 'eE': - if ept is not None: - break - else: - ept = k-j - elif c in '+-': - if not ept: - break - esign = c - else: #digit - if not ept: - sigdigits += 1 - k += 1 - number = s[j:k] # The entire number as a string - #print 'NUMBER IS: ', repr(number), ', sign', sign, ', esign', esign, \ - # ', sigdigits', sigdigits, \ - # ', decpt', decpt, ', ept', ept - - # Handle octal integers first as an exception. If octal - # is not enabled (the ECMAScipt standard) then just do - # nothing and treat the string as a decimal number. - if could_be_octal and self._allow_octal_numbers: - n = sign * decode_octal( number ) - return n, k - - # A decimal number. Do a quick check on JSON syntax restrictions. - if number[0] == '.' and not self._allow_initial_decimal_point: - raise JSONDecodeError('numbers in strict JSON must have at least one digit before the decimal point',s[i:]) - elif number[0] == '0' and \ - len(number) > 1 and number[1].isdigit(): - if self._allow_octal_numbers: - raise JSONDecodeError('initial zero digit is only allowed for octal integers',s[i:]) - else: - raise JSONDecodeError('initial zero digit must not be followed by other digits (octal numbers are not permitted)',s[i:]) - # Make sure decimal point is followed by a digit - if decpt is not None: - if decpt+1 >= len(number) or not number[decpt+1].isdigit(): - raise JSONDecodeError('decimal point must be followed by at least one digit',s[i:]) - # Determine the exponential part - if ept is not None: - if ept+1 >= len(number): - raise JSONDecodeError('exponent in number is truncated',s[i:]) - try: - exponent = int(number[ept+1:]) - except ValueError: - raise JSONDecodeError('not a valid exponent in number',s[i:]) - ##print 'EXPONENT', exponent - else: - exponent = 0 - # Try to make an int/long first. - if decpt is None and exponent >= 0: - # An integer - if ept: - n = int(number[:ept]) - else: - n = int(number) - n *= sign - if exponent: - n *= 10**exponent - if n == 0 and sign < 0: - # minus zero, must preserve negative sign so make a float - n = -0.0 - else: - try: - if decimal and (abs(exponent) > float_maxexp or sigdigits > float_sigdigits): - try: - n = decimal.Decimal(number) - n = n.normalize() - except decimal.Overflow: - if sign<0: - n = neginf - else: - n = inf - else: - n *= sign - else: - n = float(number) * sign - except ValueError: - raise JSONDecodeError('not a valid JSON numeric literal', s[i:j]) - return n, k - - def encode_number(self, n): - """Encodes a Python numeric type into a JSON numeric literal. - - The special non-numeric values of float('nan'), float('inf') - and float('-inf') are translated into appropriate JSON - literals. - - Note that Python complex types are not handled, as there is no - ECMAScript equivalent type. - - """ - if isinstance(n, complex): - if n.imag: - raise JSONEncodeError('Can not encode a complex number that has a non-zero imaginary part',n) - n = n.real - if isinstance(n, (int,long)): - return str(n) - if decimal and isinstance(n, decimal.Decimal): - return str(n) - global nan, inf, neginf - if n is nan: - return 'NaN' - elif n is inf: - return 'Infinity' - elif n is neginf: - return '-Infinity' - elif isinstance(n, float): - # Check for non-numbers. - # In python nan == inf == -inf, so must use repr() to distinguish - reprn = repr(n).lower() - if ('inf' in reprn and '-' in reprn) or n == neginf: - return '-Infinity' - elif 'inf' in reprn or n is inf: - return 'Infinity' - elif 'nan' in reprn or n is nan: - return 'NaN' - return repr(n) - else: - raise TypeError('encode_number expected an integral, float, or decimal number type',type(n)) - - def decode_string(self, s, i=0, imax=None): - """Intermediate-level decoder for JSON string literals. - - Takes a string and a starting index, and returns a Python - string (or unicode string) and the index of the next unparsed - character. - - """ - if imax is None: - imax = len(s) - if imax < i+2 or s[i] not in '"\'': - raise JSONDecodeError('string literal must be properly quoted',s[i:]) - closer = s[i] - if closer == '\'' and not self._allow_single_quoted_strings: - raise JSONDecodeError('string literals must use double quotation marks in strict JSON',s[i:]) - i += 1 # skip quote - if self._allow_js_string_escapes: - escapes = self._escapes_js - else: - escapes = self._escapes_json - ccallowed = self._allow_control_char_in_string - chunks = [] - _append = chunks.append - done = False - high_surrogate = None - while i < imax: - c = s[i] - # Make sure a high surrogate is immediately followed by a low surrogate - if high_surrogate and (i+1 >= imax or s[i:i+2] != '\\u'): - raise JSONDecodeError('High unicode surrogate must be followed by a low surrogate',s[i:]) - if c == closer: - i += 1 # skip end quote - done = True - break - elif c == '\\': - # Escaped character - i += 1 - if i >= imax: - raise JSONDecodeError('escape in string literal is incomplete',s[i-1:]) - c = s[i] - - if '0' <= c <= '7' and self._allow_octal_numbers: - # Handle octal escape codes first so special \0 doesn't kick in yet. - # Follow Annex B.1.2 of ECMAScript standard. - if '0' <= c <= '3': - maxdigits = 3 - else: - maxdigits = 2 - for k in range(i, i+maxdigits+1): - if k >= imax or s[k] not in octaldigits: - break - n = decode_octal(s[i:k]) - if n < 128: - _append( chr(n) ) - else: - _append( unichr(n) ) - i = k - continue - - if escapes.has_key(c): - _append(escapes[c]) - i += 1 - elif c == 'u' or c == 'x': - i += 1 - if c == 'u': - digits = 4 - else: # c== 'x' - if not self._allow_js_string_escapes: - raise JSONDecodeError(r'string literals may not use the \x hex-escape in strict JSON',s[i-1:]) - digits = 2 - if i+digits >= imax: - raise JSONDecodeError('numeric character escape sequence is truncated',s[i-1:]) - n = decode_hex( s[i:i+digits] ) - if high_surrogate: - # Decode surrogate pair and clear high surrogate - _append( surrogate_pair_as_unicode( high_surrogate, unichr(n) ) ) - high_surrogate = None - elif n < 128: - # ASCII chars always go in as a str - _append( chr(n) ) - elif 0xd800 <= n <= 0xdbff: # high surrogate - if imax < i + digits + 2 or s[i+digits] != '\\' or s[i+digits+1] != 'u': - raise JSONDecodeError('High unicode surrogate must be followed by a low surrogate',s[i-2:]) - high_surrogate = unichr(n) # remember until we get to the low surrogate - elif 0xdc00 <= n <= 0xdfff: # low surrogate - raise JSONDecodeError('Low unicode surrogate must be proceeded by a high surrogate',s[i-2:]) - else: - # Other chars go in as a unicode char - _append( unichr(n) ) - i += digits - else: - # Unknown escape sequence - if self._allow_nonescape_characters: - _append( c ) - i += 1 - else: - raise JSONDecodeError('unsupported escape code in JSON string literal',s[i-1:]) - elif ord(c) <= 0x1f: # A control character - if self.islineterm(c): - raise JSONDecodeError('line terminator characters must be escaped inside string literals',s[i:]) - elif ccallowed: - _append( c ) - i += 1 - else: - raise JSONDecodeError('control characters must be escaped inside JSON string literals',s[i:]) - else: # A normal character; not an escape sequence or end-quote. - # Find a whole sequence of "safe" characters so we can append them - # all at once rather than one a time, for speed. - j = i - i += 1 - while i < imax and s[i] not in unsafe_string_chars and s[i] != closer: - i += 1 - _append(s[j:i]) - if not done: - raise JSONDecodeError('string literal is not terminated with a quotation mark',s) - s = ''.join( chunks ) - return s, i - - def encode_string(self, s): - """Encodes a Python string into a JSON string literal. - - """ - # Must handle instances of UserString specially in order to be - # able to use ord() on it's simulated "characters". - import UserString - if isinstance(s, (UserString.UserString, UserString.MutableString)): - def tochar(c): - return c.data - else: - # Could use "lambda c:c", but that is too slow. So we set to None - # and use an explicit if test inside the loop. - tochar = None - - chunks = [] - chunks.append('"') - revesc = self._rev_escapes - asciiencodable = self._asciiencodable - encunicode = self._encode_unicode_as_escapes - i = 0 - imax = len(s) - while i < imax: - if tochar: - c = tochar(s[i]) - else: - c = s[i] - cord = ord(c) - if cord < 256 and asciiencodable[cord] and isinstance(encunicode, bool): - # Contiguous runs of plain old printable ASCII can be copied - # directly to the JSON output without worry (unless the user - # has supplied a custom is-encodable function). - j = i - i += 1 - while i < imax: - if tochar: - c = tochar(s[i]) - else: - c = s[i] - cord = ord(c) - if cord < 256 and asciiencodable[cord]: - i += 1 - else: - break - chunks.append( unicode(s[j:i]) ) - elif revesc.has_key(c): - # Has a shortcut escape sequence, like "\n" - chunks.append(revesc[c]) - i += 1 - elif cord <= 0x1F: - # Always unicode escape ASCII-control characters - chunks.append(r'\u%04x' % cord) - i += 1 - elif 0xD800 <= cord <= 0xDFFF: - # A raw surrogate character! This should never happen - # and there's no way to include it in the JSON output. - # So all we can do is complain. - cname = 'U+%04X' % cord - raise JSONEncodeError('can not include or escape a Unicode surrogate character',cname) - elif cord <= 0xFFFF: - # Other BMP Unicode character - if isinstance(encunicode, bool): - doesc = encunicode - else: - doesc = encunicode( c ) - if doesc: - chunks.append(r'\u%04x' % cord) - else: - chunks.append( c ) - i += 1 - else: # ord(c) >= 0x10000 - # Non-BMP Unicode - if isinstance(encunicode, bool): - doesc = encunicode - else: - doesc = encunicode( c ) - if doesc: - for surrogate in unicode_as_surrogate_pair(c): - chunks.append(r'\u%04x' % ord(surrogate)) - else: - chunks.append( c ) - i += 1 - chunks.append('"') - return ''.join( chunks ) - - def skip_comment(self, txt, i=0): - """Skips an ECMAScript comment, either // or /* style. - - The contents of the comment are returned as a string, as well - as the index of the character immediately after the comment. - - """ - if i+1 >= len(txt) or txt[i] != '/' or txt[i+1] not in '/*': - return None, i - if not self._allow_comments: - raise JSONDecodeError('comments are not allowed in strict JSON',txt[i:]) - multiline = (txt[i+1] == '*') - istart = i - i += 2 - while i < len(txt): - if multiline: - if txt[i] == '*' and i+1 < len(txt) and txt[i+1] == '/': - j = i+2 - break - elif txt[i] == '/' and i+1 < len(txt) and txt[i+1] == '*': - raise JSONDecodeError('multiline /* */ comments may not nest',txt[istart:i+1]) - else: - if self.islineterm(txt[i]): - j = i # line terminator is not part of comment - break - i += 1 - - if i >= len(txt): - if not multiline: - j = len(txt) # // comment terminated by end of file is okay - else: - raise JSONDecodeError('comment was never terminated',txt[istart:]) - return txt[istart:j], j - - def skipws(self, txt, i=0, imax=None, skip_comments=True): - """Skips whitespace. - """ - if not self._allow_comments and not self._allow_unicode_whitespace: - if imax is None: - imax = len(txt) - while i < imax and txt[i] in ' \r\n\t': - i += 1 - return i - else: - return self.skipws_any(txt, i, imax, skip_comments) - - def skipws_any(self, txt, i=0, imax=None, skip_comments=True): - """Skips all whitespace, including comments and unicode whitespace - - Takes a string and a starting index, and returns the index of the - next non-whitespace character. - - If skip_comments is True and not running in strict JSON mode, then - comments will be skipped over just like whitespace. - - """ - if imax is None: - imax = len(txt) - while i < imax: - if txt[i] == '/': - cmt, i = self.skip_comment(txt, i) - if i < imax and self.isws(txt[i]): - i += 1 - else: - break - return i - - def decode_composite(self, txt, i=0, imax=None): - """Intermediate-level JSON decoder for composite literal types (array and object). - - Takes text and a starting index, and returns either a Python list or - dictionary and the index of the next unparsed character. - - """ - if imax is None: - imax = len(txt) - i = self.skipws(txt, i, imax) - starti = i - if i >= imax or txt[i] not in '{[': - raise JSONDecodeError('composite object must start with "[" or "{"',txt[i:]) - if txt[i] == '[': - isdict = False - closer = ']' - obj = [] - else: - isdict = True - closer = '}' - obj = {} - i += 1 # skip opener - i = self.skipws(txt, i, imax) - - if i < imax and txt[i] == closer: - # empty composite - i += 1 - done = True - else: - saw_value = False # set to false at beginning and after commas - done = False - while i < imax: - i = self.skipws(txt, i, imax) - if i < imax and (txt[i] == ',' or txt[i] == closer): - c = txt[i] - i += 1 - if c == ',': - if not saw_value: - # no preceeding value, an elided (omitted) element - if isdict: - raise JSONDecodeError('can not omit elements of an object (dictionary)') - if self._allow_omitted_array_elements: - if self._allow_undefined_values: - obj.append( undefined ) - else: - obj.append( None ) - else: - raise JSONDecodeError('strict JSON does not permit omitted array (list) elements',txt[i:]) - saw_value = False - continue - else: # c == closer - if not saw_value and not self._allow_trailing_comma_in_literal: - if isdict: - raise JSONDecodeError('strict JSON does not allow a final comma in an object (dictionary) literal',txt[i-2:]) - else: - raise JSONDecodeError('strict JSON does not allow a final comma in an array (list) literal',txt[i-2:]) - done = True - break - - # Decode the item - if isdict and self._allow_nonstring_keys: - r = self.decodeobj(txt, i, identifier_as_string=True) - else: - r = self.decodeobj(txt, i, identifier_as_string=False) - if r: - if saw_value: - # two values without a separating comma - raise JSONDecodeError('values must be separated by a comma', txt[i:r[1]]) - saw_value = True - i = self.skipws(txt, r[1], imax) - if isdict: - key = r[0] # Ref 11.1.5 - if not isstringtype(key): - if isnumbertype(key): - if not self._allow_nonstring_keys: - raise JSONDecodeError('strict JSON only permits string literals as object properties (dictionary keys)',txt[starti:]) - else: - raise JSONDecodeError('object properties (dictionary keys) must be either string literals or numbers',txt[starti:]) - if i >= imax or txt[i] != ':': - raise JSONDecodeError('object property (dictionary key) has no value, expected ":"',txt[starti:]) - i += 1 - i = self.skipws(txt, i, imax) - rval = self.decodeobj(txt, i) - if rval: - i = self.skipws(txt, rval[1], imax) - obj[key] = rval[0] - else: - raise JSONDecodeError('object property (dictionary key) has no value',txt[starti:]) - else: # list - obj.append( r[0] ) - else: # not r - if isdict: - raise JSONDecodeError('expected a value, or "}"',txt[i:]) - elif not self._allow_omitted_array_elements: - raise JSONDecodeError('expected a value or "]"',txt[i:]) - else: - raise JSONDecodeError('expected a value, "," or "]"',txt[i:]) - # end while - if not done: - if isdict: - raise JSONDecodeError('object literal (dictionary) is not terminated',txt[starti:]) - else: - raise JSONDecodeError('array literal (list) is not terminated',txt[starti:]) - return obj, i - - def decode_javascript_identifier(self, name): - """Convert a JavaScript identifier into a Python string object. - - This method can be overriden by a subclass to redefine how JavaScript - identifiers are turned into Python objects. By default this just - converts them into strings. - - """ - return name - - def decodeobj(self, txt, i=0, imax=None, identifier_as_string=False, only_object_or_array=False): - """Intermediate-level JSON decoder. - - Takes a string and a starting index, and returns a two-tuple consting - of a Python object and the index of the next unparsed character. - - If there is no value at all (empty string, etc), the None is - returned instead of a tuple. - - """ - if imax is None: - imax = len(txt) - obj = None - i = self.skipws(txt, i, imax) - if i >= imax: - raise JSONDecodeError('Unexpected end of input') - c = txt[i] - - if c == '[' or c == '{': - obj, i = self.decode_composite(txt, i, imax) - elif only_object_or_array: - raise JSONDecodeError('JSON document must start with an object or array type only', txt[i:i+20]) - elif c == '"' or c == '\'': - obj, i = self.decode_string(txt, i, imax) - elif c.isdigit() or c in '.+-': - obj, i = self.decode_number(txt, i, imax) - elif c.isalpha() or c in'_$': - j = i - while j < imax and (txt[j].isalnum() or txt[j] in '_$'): - j += 1 - kw = txt[i:j] - if kw == 'null': - obj, i = None, j - elif kw == 'true': - obj, i = True, j - elif kw == 'false': - obj, i = False, j - elif kw == 'undefined': - if self._allow_undefined_values: - obj, i = undefined, j - else: - raise JSONDecodeError('strict JSON does not allow undefined elements',txt[i:]) - elif kw == 'NaN' or kw == 'Infinity': - obj, i = self.decode_number(txt, i) - else: - if identifier_as_string: - obj, i = self.decode_javascript_identifier(kw), j - else: - raise JSONDecodeError('unknown keyword or identifier',kw) - else: - raise JSONDecodeError('can not decode value',txt[i:]) - return obj, i - - - - def decode(self, txt): - """Decodes a JSON-endoded string into a Python object.""" - if self._allow_unicode_format_control_chars: - txt = self.strip_format_control_chars(txt) - r = self.decodeobj(txt, 0, only_object_or_array=not self._allow_any_type_at_start) - if not r: - raise JSONDecodeError('can not decode value',txt) - else: - obj, i = r - i = self.skipws(txt, i) - if i < len(txt): - raise JSONDecodeError('unexpected or extra text',txt[i:]) - return obj - - def encode(self, obj, nest_level=0): - """Encodes the Python object into a JSON string representation. - - This method will first attempt to encode an object by seeing - if it has a json_equivalent() method. If so than it will - call that method and then recursively attempt to encode - the object resulting from that call. - - Next it will attempt to determine if the object is a native - type or acts like a squence or dictionary. If so it will - encode that object directly. - - Finally, if no other strategy for encoding the object of that - type exists, it will call the encode_default() method. That - method currently raises an error, but it could be overridden - by subclasses to provide a hook for extending the types which - can be encoded. - - """ - chunks = [] - self.encode_helper(chunks, obj, nest_level) - return ''.join( chunks ) - - def encode_helper(self, chunklist, obj, nest_level): - #print 'encode_helper(chunklist=%r, obj=%r, nest_level=%r)'%(chunklist,obj,nest_level) - if hasattr(obj, 'json_equivalent'): - json = self.encode_equivalent( obj, nest_level=nest_level ) - if json is not None: - chunklist.append( json ) - return - if obj is None: - chunklist.append( self.encode_null() ) - elif obj is undefined: - if self._allow_undefined_values: - chunklist.append( self.encode_undefined() ) - else: - raise JSONEncodeError('strict JSON does not permit "undefined" values') - elif isinstance(obj, bool): - chunklist.append( self.encode_boolean(obj) ) - elif isinstance(obj, (int,long,float,complex)) or \ - (decimal and isinstance(obj, decimal.Decimal)): - chunklist.append( self.encode_number(obj) ) - elif isinstance(obj, basestring) or isstringtype(obj): - chunklist.append( self.encode_string(obj) ) - else: - self.encode_composite(chunklist, obj, nest_level) - - def encode_composite(self, chunklist, obj, nest_level): - """Encodes just dictionaries, lists, or sequences. - - Basically handles any python type for which iter() can create - an iterator object. - - This method is not intended to be called directly. Use the - encode() method instead. - - """ - #print 'encode_complex_helper(chunklist=%r, obj=%r, nest_level=%r)'%(chunklist,obj,nest_level) - try: - # Is it a dictionary or UserDict? Try iterkeys method first. - it = obj.iterkeys() - except AttributeError: - try: - # Is it a sequence? Try to make an iterator for it. - it = iter(obj) - except TypeError: - it = None - if it is not None: - # Does it look like a dictionary? Check for a minimal dict or - # UserDict interface. - isdict = hasattr(obj, '__getitem__') and hasattr(obj, 'keys') - compactly = self._encode_compactly - if isdict: - chunklist.append('{') - if compactly: - dictcolon = ':' - else: - dictcolon = ' : ' - else: - chunklist.append('[') - #print nest_level, 'opening sequence:', repr(chunklist) - if not compactly: - indent0 = ' ' * nest_level - indent = ' ' * (nest_level+1) - chunklist.append(' ') - sequence_chunks = [] # use this to allow sorting afterwards if dict - try: # while not StopIteration - numitems = 0 - while True: - obj2 = it.next() - if obj2 is obj: - raise JSONEncodeError('trying to encode an infinite sequence',obj) - if isdict and not isstringtype(obj2): - # Check JSON restrictions on key types - if isnumbertype(obj2): - if not self._allow_nonstring_keys: - raise JSONEncodeError('object properties (dictionary keys) must be strings in strict JSON',obj2) - else: - raise JSONEncodeError('object properties (dictionary keys) can only be strings or numbers in ECMAScript',obj2) - - # Encode this item in the sequence and put into item_chunks - item_chunks = [] - self.encode_helper( item_chunks, obj2, nest_level=nest_level+1 ) - if isdict: - item_chunks.append(dictcolon) - obj3 = obj[obj2] - self.encode_helper(item_chunks, obj3, nest_level=nest_level+2) - - #print nest_level, numitems, 'item:', repr(obj2) - #print nest_level, numitems, 'sequence_chunks:', repr(sequence_chunks) - #print nest_level, numitems, 'item_chunks:', repr(item_chunks) - #extend_list_with_sep(sequence_chunks, item_chunks) - sequence_chunks.append(item_chunks) - #print nest_level, numitems, 'new sequence_chunks:', repr(sequence_chunks) - numitems += 1 - except StopIteration: - pass - - if isdict and self._sort_dictionary_keys: - sequence_chunks.sort() # Note sorts by JSON repr, not original Python object - if compactly: - sep = ',' - else: - sep = ',\n' + indent - - #print nest_level, 'closing sequence' - #print nest_level, 'chunklist:', repr(chunklist) - #print nest_level, 'sequence_chunks:', repr(sequence_chunks) - extend_and_flatten_list_with_sep( chunklist, sequence_chunks, sep ) - #print nest_level, 'new chunklist:', repr(chunklist) - - if not compactly: - if numitems > 1: - chunklist.append('\n' + indent0) - else: - chunklist.append(' ') - if isdict: - chunklist.append('}') - else: - chunklist.append(']') - else: # Can't create an iterator for the object - json2 = self.encode_default( obj, nest_level=nest_level ) - chunklist.append( json2 ) - - def encode_equivalent( self, obj, nest_level=0 ): - """This method is used to encode user-defined class objects. - - The object being encoded should have a json_equivalent() - method defined which returns another equivalent object which - is easily JSON-encoded. If the object in question has no - json_equivalent() method available then None is returned - instead of a string so that the encoding will attempt the next - strategy. - - If a caller wishes to disable the calling of json_equivalent() - methods, then subclass this class and override this method - to just return None. - - """ - if hasattr(obj, 'json_equivalent') \ - and callable(getattr(obj,'json_equivalent')): - obj2 = obj.json_equivalent() - if obj2 is obj: - # Try to prevent careless infinite recursion - raise JSONEncodeError('object has a json_equivalent() method that returns itself',obj) - json2 = self.encode( obj2, nest_level=nest_level ) - return json2 - else: - return None - - def encode_default( self, obj, nest_level=0 ): - """This method is used to encode objects into JSON which are not straightforward. - - This method is intended to be overridden by subclasses which wish - to extend this encoder to handle additional types. - - """ - raise JSONEncodeError('can not encode object into a JSON representation',obj) - - -# ------------------------------ - -def encode( obj, strict=False, compactly=True, escape_unicode=False, encoding=None ): - """Encodes a Python object into a JSON-encoded string. - - If 'strict' is set to True, then only strictly-conforming JSON - output will be produced. Note that this means that some types - of values may not be convertable and will result in a - JSONEncodeError exception. - - If 'compactly' is set to True, then the resulting string will - have all extraneous white space removed; if False then the - string will be "pretty printed" with whitespace and indentation - added to make it more readable. - - If 'escape_unicode' is set to True, then all non-ASCII characters - will be represented as a unicode escape sequence; if False then - the actual real unicode character will be inserted. - - If no encoding is specified (encoding=None) then the output will - either be a Python string (if entirely ASCII) or a Python unicode - string type. - - However if an encoding name is given then the returned value will - be a python string which is the byte sequence encoding the JSON - value. As the default/recommended encoding for JSON is UTF-8, - you should almost always pass in encoding='utf8'. - - """ - import sys - encoder = None # Custom codec encoding function - bom = None # Byte order mark to prepend to final output - cdk = None # Codec to use - if encoding is not None: - import codecs - try: - cdk = codecs.lookup(encoding) - except LookupError: - cdk = None - - if cdk: - pass - elif not cdk: - # No built-in codec was found, see if it is something we - # can do ourself. - encoding = encoding.lower() - if encoding.startswith('utf-32') or encoding.startswith('utf32') \ - or encoding.startswith('ucs4') \ - or encoding.startswith('ucs-4'): - # Python doesn't natively have a UTF-32 codec, but JSON - # requires that it be supported. So we must decode these - # manually. - if encoding.endswith('le'): - encoder = utf32le_encode - elif encoding.endswith('be'): - encoder = utf32be_encode - else: - encoder = utf32be_encode - bom = codecs.BOM_UTF32_BE - elif encoding.startswith('ucs2') or encoding.startswith('ucs-2'): - # Python has no UCS-2, but we can simulate with - # UTF-16. We just need to force us to not try to - # encode anything past the BMP. - encoding = 'utf-16' - if not escape_unicode and not callable(escape_unicode): - escape_unicode = lambda c: (0xD800 <= ord(c) <= 0xDFFF) or ord(c) >= 0x10000 - else: - raise JSONEncodeError('this python has no codec for this character encoding',encoding) - - if not escape_unicode and not callable(escape_unicode): - if encoding and encoding.startswith('utf'): - # All UTF-x encodings can do the whole Unicode repertoire, so - # do nothing special. - pass - else: - # Even though we don't want to escape all unicode chars, - # the encoding being used may force us to do so anyway. - # We must pass in a function which says which characters - # the encoding can handle and which it can't. - def in_repertoire( c, encoding_func ): - try: - x = encoding_func( c, errors='strict' ) - except UnicodeError: - return False - return True - if encoder: - escape_unicode = lambda c: not in_repertoire(c, encoder) - elif cdk: - escape_unicode = lambda c: not in_repertoire(c, cdk[0]) - else: - pass # Let the JSON object deal with it - - j = JSON( strict=strict, compactly=compactly, escape_unicode=escape_unicode ) - - unitxt = j.encode( obj ) - if encoder: - txt = encoder( unitxt ) - elif encoding is not None: - txt = unitxt.encode( encoding ) - else: - txt = unitxt - if bom: - txt = bom + txt - return txt - - -def decode( txt, strict=False, encoding=None, **kw ): - """Decodes a JSON-encoded string into a Python object. - - If 'strict' is set to True, then those strings that are not - entirely strictly conforming to JSON will result in a - JSONDecodeError exception. - - The input string can be either a python string or a python unicode - string. If it is already a unicode string, then it is assumed - that no character set decoding is required. - - However, if you pass in a non-Unicode text string (i.e., a python - type 'str') then an attempt will be made to auto-detect and decode - the character encoding. This will be successful if the input was - encoded in any of UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE), - and of course plain ASCII works too. - - Note though that if you know the character encoding, then you - should convert to a unicode string yourself, or pass it the name - of the 'encoding' to avoid the guessing made by the auto - detection, as with - - python_object = demjson.decode( input_bytes, encoding='utf8' ) - - Optional keywords arguments must be of the form - allow_xxxx=True/False - or - prevent_xxxx=True/False - where each will allow or prevent the specific behavior, after the - evaluation of the 'strict' argument. For example, if strict=True - then by also passing 'allow_comments=True' then comments will be - allowed. If strict=False then prevent_comments=True will allow - everything except comments. - - """ - # Initialize the JSON object - j = JSON( strict=strict ) - for keyword, value in kw.items(): - if keyword.startswith('allow_'): - behavior = keyword[6:] - allow = bool(value) - elif keyword.startswith('prevent_'): - behavior = keyword[8:] - allow = not bool(value) - else: - raise ValueError('unknown keyword argument', keyword) - if allow: - j.allow(behavior) - else: - j.prevent(behavior) - - # Convert the input string into unicode if needed. - if isinstance(txt,unicode): - unitxt = txt - else: - if encoding is None: - unitxt = auto_unicode_decode( txt ) - else: - cdk = None # codec - decoder = None - import codecs - try: - cdk = codecs.lookup(encoding) - except LookupError: - encoding = encoding.lower() - decoder = None - if encoding.startswith('utf-32') \ - or encoding.startswith('ucs4') \ - or encoding.startswith('ucs-4'): - # Python doesn't natively have a UTF-32 codec, but JSON - # requires that it be supported. So we must decode these - # manually. - if encoding.endswith('le'): - decoder = utf32le_decode - elif encoding.endswith('be'): - decoder = utf32be_decode - else: - if txt.startswith( codecs.BOM_UTF32_BE ): - decoder = utf32be_decode - txt = txt[4:] - elif txt.startswith( codecs.BOM_UTF32_LE ): - decoder = utf32le_decode - txt = txt[4:] - else: - if encoding.startswith('ucs'): - raise JSONDecodeError('UCS-4 encoded string must start with a BOM') - decoder = utf32be_decode # Default BE for UTF, per unicode spec - elif encoding.startswith('ucs2') or encoding.startswith('ucs-2'): - # Python has no UCS-2, but we can simulate with - # UTF-16. We just need to force us to not try to - # encode anything past the BMP. - encoding = 'utf-16' - - if decoder: - unitxt = decoder(txt) - elif encoding: - unitxt = txt.decode(encoding) - else: - raise JSONDecodeError('this python has no codec for this character encoding',encoding) - - # Check that the decoding seems sane. Per RFC 4627 section 3: - # "Since the first two characters of a JSON text will - # always be ASCII characters [RFC0020], ..." - # - # This check is probably not necessary, but it allows us to - # raise a suitably descriptive error rather than an obscure - # syntax error later on. - # - # Note that the RFC requirements of two ASCII characters seems - # to be an incorrect statement as a JSON string literal may - # have as it's first character any unicode character. Thus - # the first two characters will always be ASCII, unless the - # first character is a quotation mark. And in non-strict - # mode we can also have a few other characters too. - if len(unitxt) > 2: - first, second = unitxt[:2] - if first in '"\'': - pass # second can be anything inside string literal - else: - if ((ord(first) < 0x20 or ord(first) > 0x7f) or \ - (ord(second) < 0x20 or ord(second) > 0x7f)) and \ - (not j.isws(first) and not j.isws(second)): - # Found non-printable ascii, must check unicode - # categories to see if the character is legal. - # Only whitespace, line and paragraph separators, - # and format control chars are legal here. - import unicodedata - catfirst = unicodedata.category(unicode(first)) - catsecond = unicodedata.category(unicode(second)) - if catfirst not in ('Zs','Zl','Zp','Cf') or \ - catsecond not in ('Zs','Zl','Zp','Cf'): - raise JSONDecodeError('the decoded string is gibberish, is the encoding correct?',encoding) - # Now ready to do the actual decoding - obj = j.decode( unitxt ) - return obj - -# end file diff --git a/cgi-bin/load_question.py b/cgi-bin/load_question.py deleted file mode 100755 index af67e8230..000000000 --- a/cgi-bin/load_question.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/python2.5 - -# Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) -# https://github.com/pgbovine/OnlinePythonTutor/ -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# Load a question file in the 'questions/' sub-directory, parse it, -# and return it to the caller in JSON format -QUESTIONS_DIR = '../questions/' - -from parse_questions import parseQuestionsFile - -import cgi, os, demjson - -form = cgi.FieldStorage() -question_file = form['question_file'].value - -fn = QUESTIONS_DIR + question_file + '.txt' -assert os.path.isfile(fn) - - -# Crucial first line to make sure that Apache serves this data -# correctly - DON'T FORGET THE EXTRA NEWLINES!!!: -print "Content-type: text/plain; charset=iso-8859-1\n\n" -print demjson.encode(parseQuestionsFile(fn)) diff --git a/jquery.textarea.js b/jquery.textarea.js deleted file mode 100644 index cd8acd5e4..000000000 --- a/jquery.textarea.js +++ /dev/null @@ -1,260 +0,0 @@ -// include this file AFTER including jQuery - -/* - * Tabby jQuery plugin version 0.12 - * - * Ted Devito - http://teddevito.com/demos/textarea.html - * - * You should have received a copy of the GNU General Public License - * along with Easy Widgets. If not, see - * - * Plugin development pattern based on: http://www.learningjquery.com/2007/10/a-plugin-development-pattern - * - */ - -// create closure - -(function($) { - - // plugin definition - - $.fn.tabby = function(options) { - //debug(this); - // build main options before element iteration - var opts = $.extend({}, $.fn.tabby.defaults, options); - var pressed = $.fn.tabby.pressed; - - // iterate and reformat each matched element - return this.each(function() { - $this = $(this); - - // build element specific options - var options = $.meta ? $.extend({}, opts, $this.data()) : opts; - - $this.bind('keydown',function (e) { - var kc = $.fn.tabby.catch_kc(e); - if (16 == kc) pressed.shft = true; - /* - because both CTRL+TAB and ALT+TAB default to an event (changing tab/window) that - will prevent js from capturing the keyup event, we'll set a timer on releasing them. - */ - if (17 == kc) {pressed.ctrl = true; setTimeout("$.fn.tabby.pressed.ctrl = false;",1000);} - if (18 == kc) {pressed.alt = true; setTimeout("$.fn.tabby.pressed.alt = false;",1000);} - - if (9 == kc && !pressed.ctrl && !pressed.alt) { - e.preventDefault; // does not work in O9.63 ?? - pressed.last = kc; setTimeout("$.fn.tabby.pressed.last = null;",0); - process_keypress ($(e.target).get(0), pressed.shft, options); - return false; - } - - }).bind('keyup',function (e) { - if (16 == $.fn.tabby.catch_kc(e)) pressed.shft = false; - }).bind('blur',function (e) { // workaround for Opera -- http://www.webdeveloper.com/forum/showthread.php?p=806588 - if (9 == pressed.last) $(e.target).one('focus',function (e) {pressed.last = null;}).get(0).focus(); - }); - - }); - }; - - // define and expose any extra methods - $.fn.tabby.catch_kc = function(e) { return e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which; }; - $.fn.tabby.pressed = {shft : false, ctrl : false, alt : false, last: null}; - - // private function for debugging - function debug($obj) { - if (window.console && window.console.log) - window.console.log('textarea count: ' + $obj.size()); - }; - - function process_keypress (o,shft,options) { - var scrollTo = o.scrollTop; - //var tabString = String.fromCharCode(9); - - // gecko; o.setSelectionRange is only available when the text box has focus - if (o.setSelectionRange) gecko_tab (o, shft, options); - - // ie; document.selection is always available - else if (document.selection) ie_tab (o, shft, options); - - o.scrollTop = scrollTo; - } - - // plugin defaults - //$.fn.tabby.defaults = {tabString : String.fromCharCode(9)}; - // modified by pgbovine: - $.fn.tabby.defaults = {tabString : ' '}; - - function gecko_tab (o, shft, options) { - var ss = o.selectionStart; - var es = o.selectionEnd; - - // when there's no selection and we're just working with the caret, we'll add/remove the tabs at the caret, providing more control - if(ss == es) { - // SHIFT+TAB - if (shft) { - // check to the left of the caret first - //if ("\t" == o.value.substring(ss-options.tabString.length, ss)) { - // modified by pgbovine: - if (" " == o.value.substring(ss-options.tabString.length, ss)) { - o.value = o.value.substring(0, ss-options.tabString.length) + o.value.substring(ss); // put it back together omitting one character to the left - o.focus(); - o.setSelectionRange(ss - options.tabString.length, ss - options.tabString.length); - } - // then check to the right of the caret - else if ("\t" == o.value.substring(ss, ss + options.tabString.length)) { - o.value = o.value.substring(0, ss) + o.value.substring(ss + options.tabString.length); // put it back together omitting one character to the right - o.focus(); - o.setSelectionRange(ss,ss); - } - } - // TAB - else { - o.value = o.value.substring(0, ss) + options.tabString + o.value.substring(ss); - o.focus(); - o.setSelectionRange(ss + options.tabString.length, ss + options.tabString.length); - } - } - // selections will always add/remove tabs from the start of the line - else { - // split the textarea up into lines and figure out which lines are included in the selection - var lines = o.value.split("\n"); - var indices = new Array(); - var sl = 0; // start of the line - var el = 0; // end of the line - var sel = false; - for (var i in lines) { - el = sl + lines[i].length; - indices.push({start: sl, end: el, selected: (sl <= ss && el > ss) || (el >= es && sl < es) || (sl > ss && el < es)}); - sl = el + 1;// for "\n" - } - - // walk through the array of lines (indices) and add tabs where appropriate - var modifier = 0; - for (var i in indices) { - if (indices[i].selected) { - var pos = indices[i].start + modifier; // adjust for tabs already inserted/removed - // SHIFT+TAB - if (shft && options.tabString == o.value.substring(pos,pos+options.tabString.length)) { // only SHIFT+TAB if there's a tab at the start of the line - o.value = o.value.substring(0,pos) + o.value.substring(pos + options.tabString.length); // omit the tabstring to the right - modifier -= options.tabString.length; - } - // TAB - else if (!shft) { - o.value = o.value.substring(0,pos) + options.tabString + o.value.substring(pos); // insert the tabstring - modifier += options.tabString.length; - } - } - } - o.focus(); - var ns = ss + ((modifier > 0) ? options.tabString.length : (modifier < 0) ? -options.tabString.length : 0); - var ne = es + modifier; - o.setSelectionRange(ns,ne); - } - } - - function ie_tab (o, shft, options) { - var range = document.selection.createRange(); - - if (o == range.parentElement()) { - // when there's no selection and we're just working with the caret, we'll add/remove the tabs at the caret, providing more control - if ('' == range.text) { - // SHIFT+TAB - if (shft) { - var bookmark = range.getBookmark(); - //first try to the left by moving opening up our empty range to the left - range.moveStart('character', -options.tabString.length); - if (options.tabString == range.text) { - range.text = ''; - } else { - // if that didn't work then reset the range and try opening it to the right - range.moveToBookmark(bookmark); - range.moveEnd('character', options.tabString.length); - if (options.tabString == range.text) - range.text = ''; - } - // move the pointer to the start of them empty range and select it - range.collapse(true); - range.select(); - } - - else { - // very simple here. just insert the tab into the range and put the pointer at the end - range.text = options.tabString; - range.collapse(false); - range.select(); - } - } - // selections will always add/remove tabs from the start of the line - else { - - var selection_text = range.text; - var selection_len = selection_text.length; - var selection_arr = selection_text.split("\r\n"); - - var before_range = document.body.createTextRange(); - before_range.moveToElementText(o); - before_range.setEndPoint("EndToStart", range); - var before_text = before_range.text; - var before_arr = before_text.split("\r\n"); - var before_len = before_text.length; // - before_arr.length + 1; - - var after_range = document.body.createTextRange(); - after_range.moveToElementText(o); - after_range.setEndPoint("StartToEnd", range); - var after_text = after_range.text; // we can accurately calculate distance to the end because we're not worried about MSIE trimming a \r\n - - var end_range = document.body.createTextRange(); - end_range.moveToElementText(o); - end_range.setEndPoint("StartToEnd", before_range); - var end_text = end_range.text; // we can accurately calculate distance to the end because we're not worried about MSIE trimming a \r\n - - var check_html = $(o).html(); - $("#r3").text(before_len + " + " + selection_len + " + " + after_text.length + " = " + check_html.length); - if((before_len + end_text.length) < check_html.length) { - before_arr.push(""); - before_len += 2; // for the \r\n that was trimmed - if (shft && options.tabString == selection_arr[0].substring(0,options.tabString.length)) - selection_arr[0] = selection_arr[0].substring(options.tabString.length); - else if (!shft) selection_arr[0] = options.tabString + selection_arr[0]; - } else { - if (shft && options.tabString == before_arr[before_arr.length-1].substring(0,options.tabString.length)) - before_arr[before_arr.length-1] = before_arr[before_arr.length-1].substring(options.tabString.length); - else if (!shft) before_arr[before_arr.length-1] = options.tabString + before_arr[before_arr.length-1]; - } - - for (var i = 1; i < selection_arr.length; i++) { - if (shft && options.tabString == selection_arr[i].substring(0,options.tabString.length)) - selection_arr[i] = selection_arr[i].substring(options.tabString.length); - else if (!shft) selection_arr[i] = options.tabString + selection_arr[i]; - } - - if (1 == before_arr.length && 0 == before_len) { - if (shft && options.tabString == selection_arr[0].substring(0,options.tabString.length)) - selection_arr[0] = selection_arr[0].substring(options.tabString.length); - else if (!shft) selection_arr[0] = options.tabString + selection_arr[0]; - } - - if ((before_len + selection_len + after_text.length) < check_html.length) { - selection_arr.push(""); - selection_len += 2; // for the \r\n that was trimmed - } - - before_range.text = before_arr.join("\r\n"); - range.text = selection_arr.join("\r\n"); - - var new_range = document.body.createTextRange(); - new_range.moveToElementText(o); - - if (0 < before_len) new_range.setEndPoint("StartToEnd", before_range); - else new_range.setEndPoint("StartToStart", before_range); - new_range.setEndPoint("EndToEnd", range); - - new_range.select(); - - } - } - } - -// end of closure -})(jQuery); diff --git a/.htaccess b/v1-v2/.htaccess similarity index 100% rename from .htaccess rename to v1-v2/.htaccess diff --git a/v1-v2/Python3-porting.txt b/v1-v2/Python3-porting.txt new file mode 100644 index 000000000..dca80e0fa --- /dev/null +++ b/v1-v2/Python3-porting.txt @@ -0,0 +1,101 @@ +See cgi-bin/p4_encoder.py for some proposed changes + +John DeNero's comments on 2012-07-23 +''' +Distinguishing whether +some x is a class or not in Python 3 should be performed via: + +isinstance(x, type) + +I don't think any sort of hack or repr comparison is required. +''' + + +Notes from Peter Wentworth about porting to Python 3 +''' +Hi Philip - a bug in the code I sent you [NB, see: python3_viz.zip]! I +really kludged how I tested for classes vs instances in the file +p3_encoder that I sent you. At line 77 of that file, I used str(dat) +to convert the object to a string, and then did some hackish substring +searching. But if the user provides a __str__ method in the class, it +gets called instead, leading to trouble. + +My quick hack was to change the str(dat) call to repr(dat) (which won't +dispatch to user-written methods), but it doesn't solve the key issue +that I have not taken proper care to cleanly categorize +types/objects/classes in Python 3. + +Peter + +-----Original Message----- +From: George Wells +Sent: 21 September 2011 03:47 PM +To: Peter Wentworth +Subject: Python visualiser + +Hi Peter + +I just tried a simple example of a class in the visualiser and it is +generating an error for some reason (the code runs fine in the +interpreter). It was working fine until I added the second method +(__str__). + +The code is: + +-----8<----- +class Point: + def __init__ (self, x=0, y=0): + self.x=x + self.y=y + def __str__ (self): + return '({0}, {1})'.format(self.x, self.y) + +pt=Point(3,4) +print(pt) +-----8<----- + +Cheers, +George. +''' + +''' +Hi Philip + +And my last bug report was even sloppy. I use str(dat) at three +different places in that file, so it needs to be refactored a little +before changing the str() to repr() +''' + +Regarding how to port to Python 3 ... +''' +HI Philip + +I don't have anything to recommend. My experience is that there are +very few (end-user) things that are quite widely talked about in various +forums. Key ones for me is that print is now a function; range is +inherently lazy (like P2 xrange used to be), strings are no longer +ascii – they are all Unicode, input takes on the semantics of P2 +rawinput, and some methods to iterate over dictionaries are different. + +In the context of the visualizer, changing Python 2 to Python 3 wasn't +particularly complicated, except for the class/instance hurdle. P3 has +a more unified class-based type system, immediately evident if you ask +type(123) -- it now returns . Classes are themselves +instances of some MetaClass, with a thing called 'type' at the top of +the hierarchy. ('type' is an instance of 'type') So there isn't +really an easy end-user way to ask "is this a class or an instance?" – +it is both at the same time! There is some library that can expose +detailed internal attributes of things, but I chose not to use that. +Rather, if you ask for repr(obj) it turns it into some external string +that always has the word 'instance' in it for instances! So I got repr +to do the internal inspection and I made the decision with some string +matching. + +One of the more interesting new features in Python 3 is a function +annotation mechanism. The compiler ignores annotations. The idea +seems to be "lets allow annotations and see what creative things the +third-party tools do with them". See +http://www.python.org/dev/peps/pep-3107/ where they use annotations for +type signatures etc. +''' + diff --git a/v1-v2/README b/v1-v2/README new file mode 100644 index 000000000..f57dec1fb --- /dev/null +++ b/v1-v2/README @@ -0,0 +1,115 @@ +This directory contains the contents of Versions 1 and 2 of Online +Python Tutor, for archival purposes: + +Version 1 - Released on January 19, 2010 +Version 2 - Released on October 4, 2011 + +--- +TODO: symlink example-code/ to ../v3/example-code/ if you want to get +example-code/ working. symlinks are annoying with Dropbox, so I've +removed it from the git repo for now + +====== +System architecture overview: + +The Online Python Tutor is implemented as a web application, with a +JavaScript front-end making AJAX calls to a pure-Python back-end. + +The back-end has been tested on an Apache server running Python 2.6 +through CGI. Note that it will probably fail in subtle ways on other +Python 2.X (and will DEFINITELY fail on Python 3.X). Peter Wentworth +has create a port to Python 3.X, and hopefully we can eventually +integrate his code into my repository. + + +The front-end is HTML/JavaScript (using the jQuery library). It's +responsible for the input text box, submitting the Python code (as +plaintext) to the back-end, receiving an execution trace from the +back-end, and then rendering that trace as data structure +visualizations. The front-end code resides in these files in the +current directory: + + tutor.html + question.html + edu-python.js + edu-python-tutor.js + edu-python-questions.js + edu-python.css + jquery.textarea.js + .htaccess - to increase the size of allowed Apache HTTP responses + + (there are also other 3rd-party JavaScript library files) + +Note on .htaccess: If your server limits the size of responses received +from HTTP requests, then you might need to use the following .htaccess +file included in your top-level (front-end) directory, to allow the +Online Python Tutor to receive traces from the back-end: + + + +# Set a ~2MB limit for response headers (bigger than default 512K limit) +SecResponseBodyLimit 2000000 + + + + +The back-end is a server-side CGI application that takes Python script +source code as input, executes the entire script (up to 200 executed +lines, to prevent infinite loops), and collects a full trace of all +variable values (i.e., data structures) after each line has been +executed. It then sends that full trace to the front-end in a +specially-encoded JSON format. The front-end then parses and visualizes +that trace and allows the user to single-step forwards AND backwards +through execution. + +The back-end resides in the cgi-bin/ sub-directory in this repository: + + cgi-bin/web_exec.py - the CGI entrance point to the back-end + cgi-bin/web_run_test.py - the CGI entrance point to the question + grading back-end + cgi-bin/pg_logger.py - the 'meat' of the back-end + cgi-bin/pg_encoder.py - encodes Python data into JSON + cgi-bin/create_db.py - for optional sqlite query logging + cgi-bin/db_common.py - for optional sqlite query logging + cgi-bin/.htaccess - for Apache CGI execute permissions + + +Due to the AJAX same-origin policy, the front-end and back-end must be +deployed on the same server (unless you do some fancy proxy magic). + + +====== +Original founding vision (from January 2010): + +I want to create a web-based interactive learning platform for students +to explore programming. I envision an HTML UI where a student can enter +in code and then single-step through it and see how the data structures +change during execution. + +Key insight: I realized that for the small programs that teachers and +students write for educational purposes, it's possible to simply LOG +everything that happens to data structures during execution. Then we +can simply play back that log in the front-end, which allows +single-stepping forwards and also BACKWARDS. + +After all, we don't need students to be able to interactive probe and +make changes in the middle of execution, which is the only value-added +of a REAL debugger. + +What kinds of things do we want to log? + + On the execution of each line, log: + - the line number just executed + - all data created by the program + + Also log calls and returns of a student's function + (but NOT library functions) + +We can use the Python JSON module to encode data structures in JSON and +send it to the client's web browser + +The PDB debugger (Lib/pdb.py) is written in pure Python: + http://docs.python.org/library/pdb.html + - the bdb debugger framework is the C module that pdb calls + http://docs.python.org/library/bdb.html + diff --git a/TODO b/v1-v2/TODO similarity index 100% rename from TODO rename to v1-v2/TODO diff --git a/alias-screenshot.png b/v1-v2/alias-screenshot.png similarity index 100% rename from alias-screenshot.png rename to v1-v2/alias-screenshot.png diff --git a/cgi-bin/.htaccess b/v1-v2/cgi-bin/.htaccess similarity index 100% rename from cgi-bin/.htaccess rename to v1-v2/cgi-bin/.htaccess diff --git a/cgi-bin/create_db.py b/v1-v2/cgi-bin/create_db.py similarity index 100% rename from cgi-bin/create_db.py rename to v1-v2/cgi-bin/create_db.py diff --git a/cgi-bin/db_common.py b/v1-v2/cgi-bin/db_common.py similarity index 100% rename from cgi-bin/db_common.py rename to v1-v2/cgi-bin/db_common.py diff --git a/cgi-bin/index.html b/v1-v2/cgi-bin/index.html similarity index 100% rename from cgi-bin/index.html rename to v1-v2/cgi-bin/index.html diff --git a/v1-v2/cgi-bin/load_question.py b/v1-v2/cgi-bin/load_question.py new file mode 100755 index 000000000..14d6522f8 --- /dev/null +++ b/v1-v2/cgi-bin/load_question.py @@ -0,0 +1,46 @@ +#!/usr/bin/python2.6 + +# Online Python Tutor +# https://github.com/pgbovine/OnlinePythonTutor/ +# +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +# Load a question file in the 'questions/' sub-directory, parse it, +# and return it to the caller in JSON format +QUESTIONS_DIR = '../questions/' + +from parse_questions import parseQuestionsFile + +import cgi, os, json + +form = cgi.FieldStorage() +question_file = form['question_file'].value + +fn = QUESTIONS_DIR + question_file + '.txt' +assert os.path.isfile(fn) + + +# Crucial first line to make sure that Apache serves this data +# correctly - DON'T FORGET THE EXTRA NEWLINES!!!: +print "Content-type: text/plain; charset=iso-8859-1\n\n" +print json.dumps(parseQuestionsFile(fn)) diff --git a/v1-v2/cgi-bin/p4_encoder.py b/v1-v2/cgi-bin/p4_encoder.py new file mode 100755 index 000000000..4c28ac3de --- /dev/null +++ b/v1-v2/cgi-bin/p4_encoder.py @@ -0,0 +1,192 @@ +#!/usr/bin/python3 -u + +# Python 3 version of encoder by David Pritchard, built upon work by Peter Wentworth +# (diff with pg_encoder.py, which is for Python 2) + + +# given an arbitrary piece of Python data, encode it in such a manner +# that it can be later encoded into JSON. +# http://json.org/ +# +# Format: +# * None, int, float, str, bool - unchanged (long is removed in Python 3) +# (json.dumps encodes these fine verbatim) +# * list - ['LIST', unique_id, elt1, elt2, elt3, ..., eltN] +# * tuple - ['TUPLE', unique_id, elt1, elt2, elt3, ..., eltN] +# * set - ['SET', unique_id, elt1, elt2, elt3, ..., eltN] +# * dict - ['DICT', unique_id, [key1, value1], [key2, value2], ..., [keyN, valueN]] +# * instance - ['INSTANCE', class name, unique_id, [attr1, value1], [attr2, value2], ..., [attrN, valueN]] +# * class - ['CLASS', class name, unique_id, [list of superclass names], [attr1, value1], [attr2, value2], ..., [attrN, valueN]] +# * circular reference - ['CIRCULAR_REF', unique_id] +# * other - [, unique_id, string representation of object] +# +# +# the unique_id is derived from id(), which allows us to explicitly +# capture aliasing of compound values + +# Key: real ID from id() +# Value: a small integer for greater readability, set by cur_small_id +real_to_small_IDs = {} +cur_small_id = 1 + +import re, types +#typeRE = re.compile("") # not used in Python 3 +classRE = re.compile("") +functionRE = re.compile("") # new case for Python 3 + +# When we find a and x is in this list, don't confuse the beginner by listing the inner details +native_types = ['int', 'float', 'str', 'tuple', 'list', 'set', 'dict', 'bool', 'NoneType', 'bytes', 'type', 'object'] + +def encode(dat, ignore_id=False): + + def append_attributes(ret, new_compound_obj_ids, dict): + """ Put attributes onto ret. """ + # traverse the __dict__ to grab attributes + # (filter out useless-seeming ones): + + user_attrs = sorted([e for e in dict.keys() + if e not in {'__doc__', '__module__', '__return__', '__locals__', + '__weakref__', '__dict__'} + ]) + for attr in user_attrs: + foo = [encode_helper(attr, new_compound_obj_ids), + encode_helper(dict[attr], new_compound_obj_ids)] + ret.append(foo) + + def encode_helper(dat, compound_obj_ids): + # primitive type + if dat is None or type(dat) in (int, float, str, bool): + return dat + # compound type + else: + my_id = id(dat) + + global cur_small_id + if my_id not in real_to_small_IDs: + if ignore_id: + real_to_small_IDs[my_id] = 99999 + else: + real_to_small_IDs[my_id] = cur_small_id + cur_small_id += 1 + + if my_id in compound_obj_ids: + return ['CIRCULAR_REF', real_to_small_IDs[my_id]] + + new_compound_obj_ids = compound_obj_ids.union([my_id]) + + typ = type(dat) + obj_as_string = object.__repr__(dat) + + my_small_id = real_to_small_IDs[my_id] + + if typ == list: + ret = ['LIST', my_small_id] + for e in dat: ret.append(encode_helper(e, new_compound_obj_ids)) + elif typ == tuple: + ret = ['TUPLE', my_small_id] + for e in dat: ret.append(encode_helper(e, new_compound_obj_ids)) + elif typ == set: + ret = ['SET', my_small_id] + for e in dat: ret.append(encode_helper(e, new_compound_obj_ids)) + elif typ == dict: + ret = ['DICT', my_small_id] + append_attributes(ret, new_compound_obj_ids, dat) + + elif typ == type: # its a class. What a mess they made of it! + superclass_names = [e.__name__ for e in dat.__bases__] + ret = ['CLASS', dat.__name__, my_small_id, superclass_names] + if dat.__name__ not in native_types: + if hasattr(dat, '__dict__'): + append_attributes(ret, new_compound_obj_ids, dat.__dict__) + + elif repr(typ)[:6] == "= 0: # is it an instance? + ret = ['INSTANCE', dat.__class__.__name__, my_small_id] + if hasattr(dat, '__dict__'): + append_attributes(ret, new_compound_obj_ids, dat.__dict__) + + else: + typeStr = repr(typ) + m = classRE.match(typeStr) + assert m, typ + ret = [m.group(1), my_small_id , obj_as_string] + + return ret + + return encode_helper(dat, set()) + + +if __name__ == '__main__': + + def test(actual, expected=0): + """ Compare the actual to the expected value, and print a suitable message. """ + import sys + linenum = sys._getframe(1).f_lineno # get the caller's line number. + if (expected == actual): + msg = "Test on line %s passed." % (linenum) + else: + msg = "Test on line %s failed. Expected '%s', but got '%s'." % (linenum, expected, actual) + print(msg) + + class P(): + p_attr1 = 123 + def p_method(self, x): + return 2*x + + class Q(P): + pass + + p1 = P() + q1 = Q() + + addr = 1 + + test(encode("hello"),"hello") + test(encode(123),123) + test(encode(123.45),123.45) + test(encode(132432134423143132432134423143),132432134423143132432134423143) + test(encode(False),False) + test(encode(None),None) + + + test(encode((1,2)), ['TUPLE', addr, 1, 2]) + + addr += 1 + test(encode([1,2]), ['LIST', addr, 1, 2]) + + addr += 1 + test(encode({1:'mon'}), ['DICT', addr, [1, 'mon']]) + + addr += 1 + test(encode(test), ['function', addr, 'test']) + + addr += 1 + test(encode(P), ['CLASS', 'P', addr, ['object'], ['p_attr1', 123], ['p_method', ['function', addr+1, 'p_method']]]) + + addr += 2 + test(encode(Q), ['CLASS', 'Q', addr, ['P']]) + + addr += 1 + test(encode(p1), ['INSTANCE', 'P', addr]) + + addr += 1 + test(encode(q1), ['INSTANCE', 'Q', addr]) + + addr += 1 + test(encode(min), ['builtin_function_or_method', addr, ''] ) + + addr += 1 + test(encode(range(1,3)), ['range', addr, 'range(1, 3)']) + + addr += 1 + test(encode({1,2}), ['SET', addr, 1, 2]) + + addr += 1 + p = [1,2,3] + p.append(p) # make a circular reference + + test(encode(p), ['LIST', addr, 1, 2, 3, ['CIRCULAR_REF', addr]]) + +# Need some new tests for z = type(123) + + + print(encode({"stdout": "", "func_name": "", "globals": {"sum": 0, "friends": ["LIST", 1, "Joe", "Bill"], "length": 3, "f": "Joe"}, "stack_locals": [], "line": 7, "event": "step_line"})) diff --git a/cgi-bin/parse_questions.py b/v1-v2/cgi-bin/parse_questions.py similarity index 65% rename from cgi-bin/parse_questions.py rename to v1-v2/cgi-bin/parse_questions.py index 5a3935f19..392ab43ae 100644 --- a/cgi-bin/parse_questions.py +++ b/v1-v2/cgi-bin/parse_questions.py @@ -1,19 +1,27 @@ # Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) # https://github.com/pgbovine/OnlinePythonTutor/ # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + # Defines a function that parses an Online Python Tutor 'questions file' # into a dict, which can easily be converted into JSON diff --git a/cgi-bin/pg_encoder.py b/v1-v2/cgi-bin/pg_encoder.py similarity index 77% rename from cgi-bin/pg_encoder.py rename to v1-v2/cgi-bin/pg_encoder.py index 2de1f97eb..01618dfe3 100644 --- a/cgi-bin/pg_encoder.py +++ b/v1-v2/cgi-bin/pg_encoder.py @@ -1,19 +1,26 @@ # Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) # https://github.com/pgbovine/OnlinePythonTutor/ # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Given an arbitrary piece of Python data, encode it in such a manner diff --git a/cgi-bin/pg_logger.py b/v1-v2/cgi-bin/pg_logger.py similarity index 89% rename from cgi-bin/pg_logger.py rename to v1-v2/cgi-bin/pg_logger.py index 6c948af52..673c3dbf6 100644 --- a/cgi-bin/pg_logger.py +++ b/v1-v2/cgi-bin/pg_logger.py @@ -1,19 +1,26 @@ # Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) # https://github.com/pgbovine/OnlinePythonTutor/ # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # This is the meat of the Online Python Tutor back-end. It implements a @@ -21,7 +28,7 @@ # Python debugger imported via the bdb module), printing out the values # of all in-scope data structures after each executed instruction. -# Note that I've only tested this logger on Python 2.5, so it will +# Note that I've only tested this logger on Python 2.6, so it will # probably fail in subtle ways on other Python 2.X (and will DEFINITELY # fail on Python 3.X). diff --git a/cgi-bin/run_tests.py b/v1-v2/cgi-bin/run_tests.py similarity index 78% rename from cgi-bin/run_tests.py rename to v1-v2/cgi-bin/run_tests.py index 550815736..221bea85e 100644 --- a/cgi-bin/run_tests.py +++ b/v1-v2/cgi-bin/run_tests.py @@ -1,19 +1,26 @@ # Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) # https://github.com/pgbovine/OnlinePythonTutor/ # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Regression tests for Online Python Tutor back-end @@ -23,7 +30,6 @@ import os, sys, re, shutil, filecmp, optparse, difflib import pg_logger -import demjson # all tests are found in this directory: @@ -35,7 +41,7 @@ def execute(test_script): def my_finalizer(output_lst): outfile = open(test_script[:-3] + '.out', 'w') - output_json = demjson.encode(output_lst, compactly=False) + output_json = json.dumps(output_lst) print >> outfile, output_json pg_logger.exec_script_str(open(test_script).read(), my_finalizer, True) diff --git a/cgi-bin/web_exec.py b/v1-v2/cgi-bin/web_exec.py similarity index 64% rename from cgi-bin/web_exec.py rename to v1-v2/cgi-bin/web_exec.py index 4df13f30c..9debc60ec 100755 --- a/cgi-bin/web_exec.py +++ b/v1-v2/cgi-bin/web_exec.py @@ -1,21 +1,28 @@ -#!/usr/bin/python2.5 +#!/usr/bin/python2.6 # Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) # https://github.com/pgbovine/OnlinePythonTutor/ # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Executes the Online Python Tutor back-end as a CGI script, which @@ -24,8 +31,8 @@ # # Returns a complete JSON execution trace to the front-end. # -# This version uses Python 2.5 on the MIT CSAIL servers. -# (note that Python 2.4 doesn't work on CSAIL, but Python 2.5 does) +# This version uses Python 2.6 on the MIT CSAIL servers. +# (note that Python 2.4 doesn't work on CSAIL, but Python 2.6 does) # # If you want to run this script, then you'll need to change the # shebang line at the top of this file to point to your system's Python. @@ -43,9 +50,7 @@ import cgi import pg_logger -# Python 2.5 doesn't have a built-in json module, so I'm using a -# 3rd-party module. I think you can do 'import json' in Python >= 2.6 -import demjson +import json if LOG_QUERIES: import os, time, db_common @@ -53,7 +58,7 @@ def web_finalizer(output_lst): # use compactly=False to produce human-readable JSON, # except at the expense of being a LARGER download - output_json = demjson.encode(output_lst, compactly=True) + output_json = json.dumps(output_lst) # query logging is optional if LOG_QUERIES: diff --git a/cgi-bin/web_run_test.py b/v1-v2/cgi-bin/web_run_test.py similarity index 77% rename from cgi-bin/web_run_test.py rename to v1-v2/cgi-bin/web_run_test.py index c0ae45605..abe4592a6 100755 --- a/cgi-bin/web_run_test.py +++ b/v1-v2/cgi-bin/web_run_test.py @@ -1,21 +1,28 @@ -#!/usr/bin/python2.5 +#!/usr/bin/python2.6 # Online Python Tutor -# Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) # https://github.com/pgbovine/OnlinePythonTutor/ # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: # -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # Runs both 'user_script' and 'expect_script' and returns whether the @@ -26,9 +33,7 @@ import cgi import pg_logger -# Python 2.5 doesn't have a built-in json module, so I'm using a -# 3rd-party module. I think you can do 'import json' in Python >= 2.6 -import demjson +import json user_trace = None # the FULL user trace (without any IDs, though) expect_trace_final_entry = None @@ -60,7 +65,7 @@ def expect_script_finalizer(output_lst): # Crucial first line to make sure that Apache serves this data # correctly - DON'T FORGET THE EXTRA NEWLINES!!!: print "Content-type: text/plain; charset=iso-8859-1\n\n" - output_json = demjson.encode(ret, compactly=True) + output_json = json.dumps(ret) print output_json else: @@ -122,7 +127,7 @@ def really_finalize(): # Crucial first line to make sure that Apache serves this data # correctly - DON'T FORGET THE EXTRA NEWLINES!!!: print "Content-type: text/plain; charset=iso-8859-1\n\n" - output_json = demjson.encode(ret, compactly=True) + output_json = json.dumps(ret) print output_json diff --git a/edu-python-questions.js b/v1-v2/edu-python-questions.js similarity index 90% rename from edu-python-questions.js rename to v1-v2/edu-python-questions.js index dab19bd6d..7c1933a21 100644 --- a/edu-python-questions.js +++ b/v1-v2/edu-python-questions.js @@ -1,21 +1,28 @@ /* Online Python Tutor -Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) https://github.com/pgbovine/OnlinePythonTutor/ -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -You should have received a copy of the GNU General Public License -along with this program. If not, see . +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @@ -52,8 +59,9 @@ function resetTestResults() { $(document).ready(function() { eduPythonCommonInit(); // must call this first! - $("#actualCodeInput").tabby(); // recognize TAB and SHIFT-TAB - $("#testCodeInput").tabby(); // recognize TAB and SHIFT-TAB + // this doesn't work since we need jquery.textarea.js ... + //$("#actualCodeInput").tabby(); // recognize TAB and SHIFT-TAB + //$("#testCodeInput").tabby(); // recognize TAB and SHIFT-TAB // be friendly to the browser's forward and back buttons diff --git a/edu-python-title.css b/v1-v2/edu-python-title.css similarity index 61% rename from edu-python-title.css rename to v1-v2/edu-python-title.css index 55cb13448..9081041b8 100644 --- a/edu-python-title.css +++ b/v1-v2/edu-python-title.css @@ -1,21 +1,28 @@ /* Online Python Tutor -Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) https://github.com/pgbovine/OnlinePythonTutor/ -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . +Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ diff --git a/edu-python-tutor.js b/v1-v2/edu-python-tutor.js similarity index 82% rename from edu-python-tutor.js rename to v1-v2/edu-python-tutor.js index 7905c3d57..7793f7818 100644 --- a/edu-python-tutor.js +++ b/v1-v2/edu-python-tutor.js @@ -1,21 +1,28 @@ /* Online Python Tutor -Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) https://github.com/pgbovine/OnlinePythonTutor/ -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -You should have received a copy of the GNU General Public License -along with this program. If not, see . +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @@ -40,7 +47,8 @@ function enterVisualizeMode(traceData) { $(document).ready(function() { eduPythonCommonInit(); // must call this first! - $("#pyInput").tabby(); // recognize TAB and SHIFT-TAB + // this doesn't work since we need jquery.textarea.js ... + //$("#pyInput").tabby(); // recognize TAB and SHIFT-TAB // be friendly to the browser's forward and back buttons diff --git a/edu-python.css b/v1-v2/edu-python.css similarity index 90% rename from edu-python.css rename to v1-v2/edu-python.css index 5124fdf52..21d2ea64f 100644 --- a/edu-python.css +++ b/v1-v2/edu-python.css @@ -1,21 +1,28 @@ /* Online Python Tutor -Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) https://github.com/pgbovine/OnlinePythonTutor/ -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . +Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ diff --git a/edu-python.js b/v1-v2/edu-python.js similarity index 97% rename from edu-python.js rename to v1-v2/edu-python.js index ee837e864..c5e2edaec 100644 --- a/edu-python.js +++ b/v1-v2/edu-python.js @@ -1,21 +1,28 @@ /* Online Python Tutor -Copyright (C) 2010-2011 Philip J. Guo (philip@pgbovine.net) https://github.com/pgbovine/OnlinePythonTutor/ -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . +Copyright (C) 2010-2012 Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ diff --git a/grading-375.png b/v1-v2/grading-375.png similarity index 100% rename from grading-375.png rename to v1-v2/grading-375.png diff --git a/hunt-mcilroy.js b/v1-v2/hunt-mcilroy.js similarity index 100% rename from hunt-mcilroy.js rename to v1-v2/hunt-mcilroy.js diff --git a/index.html b/v1-v2/index.html similarity index 81% rename from index.html rename to v1-v2/index.html index c7694a825..4952d4d48 100644 --- a/index.html +++ b/v1-v2/index.html @@ -4,21 +4,28 @@ @@ -201,7 +208,7 @@

new practice problems in plain text format

diff --git a/jquery-1.3.2.min.js b/v1-v2/jquery-1.3.2.min.js similarity index 100% rename from jquery-1.3.2.min.js rename to v1-v2/jquery-1.3.2.min.js diff --git a/jquery.autogrow.js b/v1-v2/jquery.autogrow.js similarity index 100% rename from jquery.autogrow.js rename to v1-v2/jquery.autogrow.js diff --git a/jquery.ba-bbq.min.js b/v1-v2/jquery.ba-bbq.min.js similarity index 100% rename from jquery.ba-bbq.min.js rename to v1-v2/jquery.ba-bbq.min.js diff --git a/jquery.corner.js b/v1-v2/jquery.corner.js similarity index 100% rename from jquery.corner.js rename to v1-v2/jquery.corner.js diff --git a/jquery.jsPlumb-1.3.3-all-min.js b/v1-v2/jquery.jsPlumb-1.3.3-all-min.js similarity index 100% rename from jquery.jsPlumb-1.3.3-all-min.js rename to v1-v2/jquery.jsPlumb-1.3.3-all-min.js diff --git a/jquery.min.js b/v1-v2/jquery.min.js similarity index 100% rename from jquery.min.js rename to v1-v2/jquery.min.js diff --git a/jsplumb-test.js b/v1-v2/jsplumb-test.js similarity index 100% rename from jsplumb-test.js rename to v1-v2/jsplumb-test.js diff --git a/mock-data.js b/v1-v2/mock-data.js similarity index 100% rename from mock-data.js rename to v1-v2/mock-data.js diff --git a/question.html b/v1-v2/question.html similarity index 78% rename from question.html rename to v1-v2/question.html index 6ea6ea4d2..a60214513 100644 --- a/question.html +++ b/v1-v2/question.html @@ -4,21 +4,28 @@ @@ -40,8 +47,6 @@ - - @@ -195,7 +200,7 @@

This application supports the core Python 2.5 language, with no +href="http://docs.python.org/release/2.6/">Python 2.6 language, with no module imports or file I/O. It's meant to be used as a platform for creating programming tutorials, not for running or debugging production code. @@ -206,7 +211,7 @@ repository and send bug reports, feedback, and suggestions to philip@pgbovine.net

-Copyright © 2010-2011 Philip Guo. All rights reserved. +Copyright © 2010-2012 Philip Guo. All rights reserved. diff --git a/questions/debug-bsearch.txt b/v1-v2/questions/debug-bsearch.txt similarity index 100% rename from questions/debug-bsearch.txt rename to v1-v2/questions/debug-bsearch.txt diff --git a/questions/debug-ireverse.txt b/v1-v2/questions/debug-ireverse.txt similarity index 100% rename from questions/debug-ireverse.txt rename to v1-v2/questions/debug-ireverse.txt diff --git a/questions/debug-mergesort.txt b/v1-v2/questions/debug-mergesort.txt similarity index 100% rename from questions/debug-mergesort.txt rename to v1-v2/questions/debug-mergesort.txt diff --git a/questions/optimize-find-dups.txt b/v1-v2/questions/optimize-find-dups.txt similarity index 100% rename from questions/optimize-find-dups.txt rename to v1-v2/questions/optimize-find-dups.txt diff --git a/questions/optimize-search.txt b/v1-v2/questions/optimize-search.txt similarity index 100% rename from questions/optimize-search.txt rename to v1-v2/questions/optimize-search.txt diff --git a/questions/optimize-sum.txt b/v1-v2/questions/optimize-sum.txt similarity index 100% rename from questions/optimize-sum.txt rename to v1-v2/questions/optimize-sum.txt diff --git a/questions/remove-dups.txt b/v1-v2/questions/remove-dups.txt similarity index 100% rename from questions/remove-dups.txt rename to v1-v2/questions/remove-dups.txt diff --git a/questions/reverse.txt b/v1-v2/questions/reverse.txt similarity index 100% rename from questions/reverse.txt rename to v1-v2/questions/reverse.txt diff --git a/questions/two-sum.txt b/v1-v2/questions/two-sum.txt similarity index 100% rename from questions/two-sum.txt rename to v1-v2/questions/two-sum.txt diff --git a/red-sad-face.jpg b/v1-v2/red-sad-face.jpg similarity index 100% rename from red-sad-face.jpg rename to v1-v2/red-sad-face.jpg diff --git a/test-programs/caught_exception_1.golden b/v1-v2/test-programs/caught_exception_1.golden similarity index 100% rename from test-programs/caught_exception_1.golden rename to v1-v2/test-programs/caught_exception_1.golden diff --git a/test-programs/caught_exception_1.py b/v1-v2/test-programs/caught_exception_1.py similarity index 100% rename from test-programs/caught_exception_1.py rename to v1-v2/test-programs/caught_exception_1.py diff --git a/test-programs/caught_exception_2.golden b/v1-v2/test-programs/caught_exception_2.golden similarity index 100% rename from test-programs/caught_exception_2.golden rename to v1-v2/test-programs/caught_exception_2.golden diff --git a/test-programs/caught_exception_2.py b/v1-v2/test-programs/caught_exception_2.py similarity index 100% rename from test-programs/caught_exception_2.py rename to v1-v2/test-programs/caught_exception_2.py diff --git a/test-programs/circ_ref.golden b/v1-v2/test-programs/circ_ref.golden similarity index 100% rename from test-programs/circ_ref.golden rename to v1-v2/test-programs/circ_ref.golden diff --git a/test-programs/circ_ref.py b/v1-v2/test-programs/circ_ref.py similarity index 100% rename from test-programs/circ_ref.py rename to v1-v2/test-programs/circ_ref.py diff --git a/test-programs/circ_ref_2.golden b/v1-v2/test-programs/circ_ref_2.golden similarity index 100% rename from test-programs/circ_ref_2.golden rename to v1-v2/test-programs/circ_ref_2.golden diff --git a/test-programs/circ_ref_2.py b/v1-v2/test-programs/circ_ref_2.py similarity index 100% rename from test-programs/circ_ref_2.py rename to v1-v2/test-programs/circ_ref_2.py diff --git a/test-programs/circ_ref_fake.golden b/v1-v2/test-programs/circ_ref_fake.golden similarity index 100% rename from test-programs/circ_ref_fake.golden rename to v1-v2/test-programs/circ_ref_fake.golden diff --git a/test-programs/circ_ref_fake.py b/v1-v2/test-programs/circ_ref_fake.py similarity index 100% rename from test-programs/circ_ref_fake.py rename to v1-v2/test-programs/circ_ref_fake.py diff --git a/test-programs/class_test.golden b/v1-v2/test-programs/class_test.golden similarity index 100% rename from test-programs/class_test.golden rename to v1-v2/test-programs/class_test.golden diff --git a/test-programs/class_test.py b/v1-v2/test-programs/class_test.py similarity index 100% rename from test-programs/class_test.py rename to v1-v2/test-programs/class_test.py diff --git a/test-programs/class_test_2.golden b/v1-v2/test-programs/class_test_2.golden similarity index 100% rename from test-programs/class_test_2.golden rename to v1-v2/test-programs/class_test_2.golden diff --git a/test-programs/class_test_2.py b/v1-v2/test-programs/class_test_2.py similarity index 100% rename from test-programs/class_test_2.py rename to v1-v2/test-programs/class_test_2.py diff --git a/test-programs/class_test_3.golden b/v1-v2/test-programs/class_test_3.golden similarity index 100% rename from test-programs/class_test_3.golden rename to v1-v2/test-programs/class_test_3.golden diff --git a/test-programs/class_test_3.py b/v1-v2/test-programs/class_test_3.py similarity index 100% rename from test-programs/class_test_3.py rename to v1-v2/test-programs/class_test_3.py diff --git a/test-programs/data_test.golden b/v1-v2/test-programs/data_test.golden similarity index 100% rename from test-programs/data_test.golden rename to v1-v2/test-programs/data_test.golden diff --git a/test-programs/data_test.py b/v1-v2/test-programs/data_test.py similarity index 100% rename from test-programs/data_test.py rename to v1-v2/test-programs/data_test.py diff --git a/test-programs/dict_error.golden b/v1-v2/test-programs/dict_error.golden similarity index 100% rename from test-programs/dict_error.golden rename to v1-v2/test-programs/dict_error.golden diff --git a/test-programs/dict_error.py b/v1-v2/test-programs/dict_error.py similarity index 100% rename from test-programs/dict_error.py rename to v1-v2/test-programs/dict_error.py diff --git a/test-programs/dict_test.golden b/v1-v2/test-programs/dict_test.golden similarity index 100% rename from test-programs/dict_test.golden rename to v1-v2/test-programs/dict_test.golden diff --git a/test-programs/dict_test.py b/v1-v2/test-programs/dict_test.py similarity index 100% rename from test-programs/dict_test.py rename to v1-v2/test-programs/dict_test.py diff --git a/test-programs/exec_test.golden b/v1-v2/test-programs/exec_test.golden similarity index 100% rename from test-programs/exec_test.golden rename to v1-v2/test-programs/exec_test.golden diff --git a/test-programs/exec_test.py b/v1-v2/test-programs/exec_test.py similarity index 100% rename from test-programs/exec_test.py rename to v1-v2/test-programs/exec_test.py diff --git a/test-programs/func_exception.golden b/v1-v2/test-programs/func_exception.golden similarity index 100% rename from test-programs/func_exception.golden rename to v1-v2/test-programs/func_exception.golden diff --git a/test-programs/func_exception.py b/v1-v2/test-programs/func_exception.py similarity index 100% rename from test-programs/func_exception.py rename to v1-v2/test-programs/func_exception.py diff --git a/test-programs/generator_test.golden b/v1-v2/test-programs/generator_test.golden similarity index 100% rename from test-programs/generator_test.golden rename to v1-v2/test-programs/generator_test.golden diff --git a/test-programs/generator_test.py b/v1-v2/test-programs/generator_test.py similarity index 100% rename from test-programs/generator_test.py rename to v1-v2/test-programs/generator_test.py diff --git a/test-programs/import_error.golden b/v1-v2/test-programs/import_error.golden similarity index 100% rename from test-programs/import_error.golden rename to v1-v2/test-programs/import_error.golden diff --git a/test-programs/import_error.py b/v1-v2/test-programs/import_error.py similarity index 100% rename from test-programs/import_error.py rename to v1-v2/test-programs/import_error.py diff --git a/test-programs/infinite_loop.golden b/v1-v2/test-programs/infinite_loop.golden similarity index 100% rename from test-programs/infinite_loop.golden rename to v1-v2/test-programs/infinite_loop.golden diff --git a/test-programs/infinite_loop.py b/v1-v2/test-programs/infinite_loop.py similarity index 100% rename from test-programs/infinite_loop.py rename to v1-v2/test-programs/infinite_loop.py diff --git a/test-programs/infinite_loop_one_liner.golden b/v1-v2/test-programs/infinite_loop_one_liner.golden similarity index 100% rename from test-programs/infinite_loop_one_liner.golden rename to v1-v2/test-programs/infinite_loop_one_liner.golden diff --git a/test-programs/infinite_loop_one_liner.py b/v1-v2/test-programs/infinite_loop_one_liner.py similarity index 100% rename from test-programs/infinite_loop_one_liner.py rename to v1-v2/test-programs/infinite_loop_one_liner.py diff --git a/test-programs/lambda_1.golden b/v1-v2/test-programs/lambda_1.golden similarity index 100% rename from test-programs/lambda_1.golden rename to v1-v2/test-programs/lambda_1.golden diff --git a/test-programs/lambda_1.py b/v1-v2/test-programs/lambda_1.py similarity index 100% rename from test-programs/lambda_1.py rename to v1-v2/test-programs/lambda_1.py diff --git a/test-programs/list_dict_test.golden b/v1-v2/test-programs/list_dict_test.golden similarity index 100% rename from test-programs/list_dict_test.golden rename to v1-v2/test-programs/list_dict_test.golden diff --git a/test-programs/list_dict_test.py b/v1-v2/test-programs/list_dict_test.py similarity index 100% rename from test-programs/list_dict_test.py rename to v1-v2/test-programs/list_dict_test.py diff --git a/test-programs/list_test.golden b/v1-v2/test-programs/list_test.golden similarity index 100% rename from test-programs/list_test.golden rename to v1-v2/test-programs/list_test.golden diff --git a/test-programs/list_test.py b/v1-v2/test-programs/list_test.py similarity index 100% rename from test-programs/list_test.py rename to v1-v2/test-programs/list_test.py diff --git a/test-programs/newstyle_class.golden b/v1-v2/test-programs/newstyle_class.golden similarity index 100% rename from test-programs/newstyle_class.golden rename to v1-v2/test-programs/newstyle_class.golden diff --git a/test-programs/newstyle_class.py b/v1-v2/test-programs/newstyle_class.py similarity index 100% rename from test-programs/newstyle_class.py rename to v1-v2/test-programs/newstyle_class.py diff --git a/test-programs/one_func.golden b/v1-v2/test-programs/one_func.golden similarity index 100% rename from test-programs/one_func.golden rename to v1-v2/test-programs/one_func.golden diff --git a/test-programs/one_func.py b/v1-v2/test-programs/one_func.py similarity index 100% rename from test-programs/one_func.py rename to v1-v2/test-programs/one_func.py diff --git a/test-programs/open_error.golden b/v1-v2/test-programs/open_error.golden similarity index 100% rename from test-programs/open_error.golden rename to v1-v2/test-programs/open_error.golden diff --git a/test-programs/open_error.py b/v1-v2/test-programs/open_error.py similarity index 100% rename from test-programs/open_error.py rename to v1-v2/test-programs/open_error.py diff --git a/test-programs/parse_error.golden b/v1-v2/test-programs/parse_error.golden similarity index 100% rename from test-programs/parse_error.golden rename to v1-v2/test-programs/parse_error.golden diff --git a/test-programs/parse_error.py b/v1-v2/test-programs/parse_error.py similarity index 100% rename from test-programs/parse_error.py rename to v1-v2/test-programs/parse_error.py diff --git a/test-programs/parse_error_2.golden b/v1-v2/test-programs/parse_error_2.golden similarity index 100% rename from test-programs/parse_error_2.golden rename to v1-v2/test-programs/parse_error_2.golden diff --git a/test-programs/parse_error_2.py b/v1-v2/test-programs/parse_error_2.py similarity index 100% rename from test-programs/parse_error_2.py rename to v1-v2/test-programs/parse_error_2.py diff --git a/test-programs/parse_error_3.golden b/v1-v2/test-programs/parse_error_3.golden similarity index 100% rename from test-programs/parse_error_3.golden rename to v1-v2/test-programs/parse_error_3.golden diff --git a/test-programs/parse_error_3.py b/v1-v2/test-programs/parse_error_3.py similarity index 100% rename from test-programs/parse_error_3.py rename to v1-v2/test-programs/parse_error_3.py diff --git a/test-programs/print_builtins_error.golden b/v1-v2/test-programs/print_builtins_error.golden similarity index 100% rename from test-programs/print_builtins_error.golden rename to v1-v2/test-programs/print_builtins_error.golden diff --git a/test-programs/print_builtins_error.py b/v1-v2/test-programs/print_builtins_error.py similarity index 100% rename from test-programs/print_builtins_error.py rename to v1-v2/test-programs/print_builtins_error.py diff --git a/test-programs/runtime_error.golden b/v1-v2/test-programs/runtime_error.golden similarity index 100% rename from test-programs/runtime_error.golden rename to v1-v2/test-programs/runtime_error.golden diff --git a/test-programs/runtime_error.py b/v1-v2/test-programs/runtime_error.py similarity index 100% rename from test-programs/runtime_error.py rename to v1-v2/test-programs/runtime_error.py diff --git a/test-programs/set_test.golden b/v1-v2/test-programs/set_test.golden similarity index 100% rename from test-programs/set_test.golden rename to v1-v2/test-programs/set_test.golden diff --git a/test-programs/set_test.py b/v1-v2/test-programs/set_test.py similarity index 100% rename from test-programs/set_test.py rename to v1-v2/test-programs/set_test.py diff --git a/test-programs/simple.golden b/v1-v2/test-programs/simple.golden similarity index 100% rename from test-programs/simple.golden rename to v1-v2/test-programs/simple.golden diff --git a/test-programs/simple.py b/v1-v2/test-programs/simple.py similarity index 100% rename from test-programs/simple.py rename to v1-v2/test-programs/simple.py diff --git a/test-programs/three_lists.golden b/v1-v2/test-programs/three_lists.golden similarity index 100% rename from test-programs/three_lists.golden rename to v1-v2/test-programs/three_lists.golden diff --git a/test-programs/three_lists.py b/v1-v2/test-programs/three_lists.py similarity index 100% rename from test-programs/three_lists.py rename to v1-v2/test-programs/three_lists.py diff --git a/test-programs/tuple_test.golden b/v1-v2/test-programs/tuple_test.golden similarity index 100% rename from test-programs/tuple_test.golden rename to v1-v2/test-programs/tuple_test.golden diff --git a/test-programs/tuple_test.py b/v1-v2/test-programs/tuple_test.py similarity index 100% rename from test-programs/tuple_test.py rename to v1-v2/test-programs/tuple_test.py diff --git a/test-programs/two_funcs.golden b/v1-v2/test-programs/two_funcs.golden similarity index 100% rename from test-programs/two_funcs.golden rename to v1-v2/test-programs/two_funcs.golden diff --git a/test-programs/two_funcs.py b/v1-v2/test-programs/two_funcs.py similarity index 100% rename from test-programs/two_funcs.py rename to v1-v2/test-programs/two_funcs.py diff --git a/tutor.html b/v1-v2/tutor.html similarity index 76% rename from tutor.html rename to v1-v2/tutor.html index eaa8c4913..6a39233d0 100644 --- a/tutor.html +++ b/v1-v2/tutor.html @@ -4,21 +4,28 @@ @@ -45,8 +52,6 @@ - - @@ -109,7 +114,7 @@

-Then try some programming questions:
+Then try some sample programming questions:
Solve: Two-sum | Reverse list | @@ -190,15 +195,15 @@

This application supports the core Python 2.5 language, with no +href="http://docs.python.org/release/2.6/">Python 2.6 language, with no module imports or file I/O. It's meant to be used as a platform for creating programming tutorials, not for running or debugging production code.

Official Python 3 support is coming soon; -for now, try the Python 3 fork by -Peter Wentworth. +for now, try the Python 3 forks by CS Circles and +Peter Wentworth.

Check out the -Copyright © 2010-2011 Philip Guo. All rights reserved. +Copyright © 2010-2012 Philip Guo. All rights reserved. - diff --git a/tutorials/MIT-6.01/README b/v1-v2/tutorials/MIT-6.01/README similarity index 100% rename from tutorials/MIT-6.01/README rename to v1-v2/tutorials/MIT-6.01/README diff --git a/tutorials/MIT-6.01/map.py b/v1-v2/tutorials/MIT-6.01/map.py similarity index 100% rename from tutorials/MIT-6.01/map.py rename to v1-v2/tutorials/MIT-6.01/map.py diff --git a/tutorials/MIT-6.01/oop_1.py b/v1-v2/tutorials/MIT-6.01/oop_1.py similarity index 100% rename from tutorials/MIT-6.01/oop_1.py rename to v1-v2/tutorials/MIT-6.01/oop_1.py diff --git a/tutorials/MIT-6.01/oop_2.py b/v1-v2/tutorials/MIT-6.01/oop_2.py similarity index 100% rename from tutorials/MIT-6.01/oop_2.py rename to v1-v2/tutorials/MIT-6.01/oop_2.py diff --git a/tutorials/MIT-6.01/oop_3.py b/v1-v2/tutorials/MIT-6.01/oop_3.py similarity index 100% rename from tutorials/MIT-6.01/oop_3.py rename to v1-v2/tutorials/MIT-6.01/oop_3.py diff --git a/tutorials/MIT-6.01/summation.py b/v1-v2/tutorials/MIT-6.01/summation.py similarity index 100% rename from tutorials/MIT-6.01/summation.py rename to v1-v2/tutorials/MIT-6.01/summation.py diff --git a/tutorials/README b/v1-v2/tutorials/README similarity index 100% rename from tutorials/README rename to v1-v2/tutorials/README diff --git a/tutorials/advanced/map.py b/v1-v2/tutorials/advanced/map.py similarity index 100% rename from tutorials/advanced/map.py rename to v1-v2/tutorials/advanced/map.py diff --git a/tutorials/math/newton.py b/v1-v2/tutorials/math/newton.py similarity index 100% rename from tutorials/math/newton.py rename to v1-v2/tutorials/math/newton.py diff --git a/tutorials/oop/oop_demo.py b/v1-v2/tutorials/oop/oop_demo.py similarity index 100% rename from tutorials/oop/oop_demo.py rename to v1-v2/tutorials/oop/oop_demo.py diff --git a/tutorials/personal-finance/compound_interest.py b/v1-v2/tutorials/personal-finance/compound_interest.py similarity index 100% rename from tutorials/personal-finance/compound_interest.py rename to v1-v2/tutorials/personal-finance/compound_interest.py diff --git a/yellow-happy-face.png b/v1-v2/yellow-happy-face.png similarity index 100% rename from yellow-happy-face.png rename to v1-v2/yellow-happy-face.png diff --git a/v3/GChartWrapper/GChart.py b/v3/GChartWrapper/GChart.py new file mode 100644 index 000000000..275fa544d --- /dev/null +++ b/v3/GChartWrapper/GChart.py @@ -0,0 +1,782 @@ +# (modified by Philip Guo to remove utf-8 dependencies and unnecessary imports) + +################################################################################ +# GChartWrapper - v0.8 +# Copyright (C) 2009 Justin Quick +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 3 as published +# by the Free Software Foundation. +# +# Thanks to anyone who does anything for this project. +# If you have even the smallest revision, please email me at above address. +################################################################################ +""" +GChartWrapper - Google Chart API Wrapper + +The wrapper can render the URL of the Google chart based on your parameters. +With the chart you can render an HTML img tag to insert into webpages on the fly, +show it directly in a webbrowser, or save the chart PNG to disk. New versions +can generate PIL PngImage instances. + +Example + + >>> G = GChart('lc',['simpleisbetterthancomplexcomplexisbetterthancomplicated']) + >>> G.title('The Zen of Python','00cc00',36) + >>> G.color('00cc00') + >>> str(G) + 'http://chart.apis.google.com/chart? + chd=e:simpleisbetterthancomplexcomplexisbetterthancomplicated + &chs=300x150 + &cht=lc + &chtt=The+Zen+of+Python' + >>> G.image() # PIL instance + + >>> 1#G.show() # Webbrowser open + True + >>> G.save('tmp.png') # Save to disk + 'tmp.png' + +See tests.py for unit test and other examples +""" +from GChartWrapper.constants import * +from GChartWrapper.encoding import Encoder +from copy import copy + +def lookup_color(color): + """ + Returns the hex color for any valid css color name + + >>> lookup_color('aliceblue') + 'F0F8FF' + """ + if color is None: return + color = color.lower() + if color in COLOR_MAP: + return COLOR_MAP[color] + return color + +def color_args(args, *indexes): + """ + Color a list of arguments on particular indexes + + >>> c = color_args([None,'blue'], 1) + >>> c.next() + None + >>> c.next() + '0000FF' + """ + for i,arg in enumerate(args): + if i in indexes: + yield lookup_color(arg) + else: + yield arg + + +class Axes(dict): + """ + Axes attribute dictionary storage + + Use this class via GChart(...).axes + Methods are taken one at a time, like so: + + >>> G = GChart() + >>> G.axes.type('xy') + {} + >>> G.axes.label(1,'Label1') # X Axis + {} + >>> G.axes.label(2,'Label2') # Y Axis + {} + """ + def __init__(self, parent): + self.parent = parent + self.data = {'ticks':[],'labels':[],'positions':[], + 'ranges':[],'styles':[]} + dict.__init__(self) + + def tick(self, index, length): + """ + Add tick marks in order of axes by width + APIPARAM: chxtc , + """ + assert int(length) <= 25, 'Width cannot be more than 25' + self.data['ticks'].append('%s,%d'%(index,length)) + return self.parent + + def type(self, atype): + """ + Define the type of axes you wish to use + atype must be one of x,t,y,r + APIPARAM: chxt + """ + for char in atype: + assert char in 'xtyr', 'Invalid axes type: %s'%char + if not ',' in atype: + atype = ','.join(atype) + self['chxt'] = atype + return self.parent + __call__ = type + + def label(self, index, *args): + """ + Label each axes one at a time + args are of the form

+ +
Write code in + + + +
+ + + +
+
+ +

+ +

+ + +
+[coming soon!] Java options: pass in command-line arguments and feed user input to stdin +
+ + +
+ + + + + + + +
+ + +

Create test cases

+ +
+ +
+ +
+
+ + + + +
+ + + diff --git a/v3/bintree_module.py b/v3/bintree_module.py new file mode 100644 index 000000000..b72d3422c --- /dev/null +++ b/v3/bintree_module.py @@ -0,0 +1,442 @@ +# TODO: how do you set the BACKGROUND COLOR of a GraphViz node ... fill=? + + +# example code snippet to visualize, which uses '#break' as a breakpoint +# feel free to clean up however you like +''' +from bintree_module import TNode +import html_module + +r = TNode('a', + left=TNode('b0', + left=TNode('c0', + right=TNode('d1')), + right=TNode('c1', + left=TNode('d3'), + right=TNode('d4'))), + right=TNode('b1', + left=TNode('c2'))) + +def highlight_and_display(root): + def f(node): + node.highlight() + html_module.display_img(root.to_graphviz_img()) #break + node.reset_style() + return f + +def preorder(t, visitfn): + if not t: + return + visitfn(t) + preorder(t.left, visitfn) + preorder(t.right, visitfn) + +preorder(r, highlight_and_display(r)) +''' + + +from collections import defaultdict + +import GChartWrapper +import html_module + +import sys +is_python3 = (sys.version_info[0] == 3) + +if is_python3: + import io as cStringIO +else: + import cStringIO + +ID = 0 + +# somewhat inspired by bst.py from MIT 6.006 OCW +# http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/search.htm +class TNode: + def __init__(self, dat, left=None, right=None): + self.data = dat + self.parent = None + self.left = left + self.right = right + + if self.left: + self.left.parent = self + if self.right: + self.right.parent = self + + self.__penwidth = 1 # thickness of node border + + # HTML-like RGB hex values - e.g., "#bb0000" + self.__color = None # border color + self.__fill = None # internal node color + + # assign unique IDs in node creation order + global ID + self.id = 'n' + str(ID) + ID += 1 + + def disconnect(self): + self.left = None + self.right = None + self.parent = None + + def set_border_color(self, col): + self.__color = col + + def set_fill(self, col): + self.__fill = col + + def set_width(self, w): + assert w > 0 + self.__penwidth = w + + def highlight(self): + self.__color = 'red' + self.__penwidth = 2 + + def reset_style(self): + self.__color = None + self.__fill = None + self.__penwidth = 1 + + def is_leaf(self): + return not (self.left or self.right) + + def graphviz_str(self): + ret = '%s[label="%s"' % (self.id, str(self.data)) # convert to str() for display + if self.__penwidth > 1: + ret += ',penwidth=%d' % self.__penwidth + if self.__color: + ret += ',color="%s"' % self.__color + if self.__fill: + ret += ',fill="%s"' % self.__fill + ret += ']' + return ret + + def __str__(self): + return 'TNode(%s)' % repr(self.data) + + + # render a binary tree of TNode objects starting at self in a pretty + # GraphViz format using the balanced tree hack from + # http://www.graphviz.org/content/FaqBalanceTree + def graphviz_render(self, ios, compress=False): + separator = '\n' + if compress: + separator=',' + ios.write('digraph G{') + + if not compress: + ios.write('\n') + + queue = [] # each element is (node, level #) + + # Key: level number + # Value: sorted list of node IDs at that level (including phantom nodes) + nodes_by_level = defaultdict(list) + + + def render_phantom(parent_id, suffix): + phantom_id = parent_id + '_phantom_' + suffix + ios.write('%s [label="",width=.1,style=invis]%s' % (phantom_id, separator)) + ios.write('%s->%s [style=invis]%s' % (parent_id, phantom_id, separator)) + return phantom_id + + def bfs_visit(): + # base case + if not queue: + return + + n, level = queue.pop(0) + + ios.write(n.graphviz_str() + separator) # current node + if n.left or n.right: + if n.left: + ios.write('%s->%s%s' % (n.id, n.left.id, separator)) + queue.append((n.left, level+1)) + nodes_by_level[level+1].append(n.left.id) + else: + # insert phantom to make tree look good + ph_id = render_phantom(n.id, 'L') + nodes_by_level[level+1].append(ph_id) + + # always insert invisible middle phantom + ph_id = render_phantom(n.id, 'M') + nodes_by_level[level+1].append(ph_id) + + if n.right: + ios.write('%s->%s%s' % (n.id, n.right.id, separator)) + queue.append((n.right, level+1)) + nodes_by_level[level+1].append(n.right.id) + else: + # insert phantom to make tree look good + ph_id = render_phantom(n.id, 'R') + nodes_by_level[level+1].append(ph_id) + + bfs_visit() # recurse! + + queue.append((self, 1)) + bfs_visit() + + if not compress: + ios.write('\n') + + # make sure all nodes at the same level are vertically aligned + for level in nodes_by_level: + node_ids = nodes_by_level[level] + if len(node_ids) > 1: + ios.write(('{rank=same %s [style=invis]}' % '->'.join(node_ids)) + separator) + + ios.write('}') # cap it off + + + def to_graphviz_string(self): + s = cStringIO.StringIO() + self.graphviz_render(s, True) + return s.getvalue() + + def to_graphviz_img(self): + return GChartWrapper.GraphViz(self.to_graphviz_string()) + + +# from MIT 6.006 OCW +# http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/search.htm +class BST(object): + """ +Simple binary search tree implementation. +This BST supports insert, find, and delete-min operations. +Each tree contains some (possibly 0) BSTnode objects, representing nodes, +and a pointer to the root. +""" + + def __init__(self): + self.root = None + + def to_graphviz_img(self): + if self.root: + return GChartWrapper.GraphViz(self.root.to_graphviz_string()) + else: + return '' + + def insert(self, t): + """Insert data t into this BST, modifying it in-place.""" + new = TNode(t) + if self.root is None: + self.root = new + else: + node = self.root + while True: + if t < node.data: + # Go left + if node.left is None: + node.left = new + new.parent = node + break + node = node.left + else: + # Go right + if node.right is None: + node.right = new + new.parent = node + break + node = node.right + return new + + def find(self, t): + """Return the node for data t if is in the tree, or None otherwise.""" + node = self.root + while node is not None: + if t == node.data: + return node + elif t < node.data: + node = node.left + else: + node = node.right + return None + + def delete_min(self): + """Delete the minimum data (and return the old node containing it).""" + if self.root is None: + return None, None + else: + # Walk to leftmost node. + node = self.root + while node.left is not None: + node = node.left + # Remove that node and promote its right subtree. + if node.parent is not None: + node.parent.left = node.right + else: # The root was smallest. + self.root = node.right + if node.right is not None: + node.right.parent = node.parent + parent = node.parent + node.disconnect() + return node, parent + + def __str__(self): + if self.root is None: + return 'empty tree' + else: + return 'tree with root: %s' % str(self.root) + +if __name__ == "__main__": + # simple test tree + r = TNode('a', + left=TNode('b0', + left=TNode('c0', + right=TNode('d1')), + right=TNode('c1', + left=TNode('d3'), + right=TNode('d4'))), + right=TNode('b1', + left=TNode('c2', + left=TNode('d2')))) + + f = open('test.dot', 'w') + r.graphviz_render(f) + f.close() + + ''' + t = BST() + import random + nums = range(10) + random.shuffle(nums) + for i in nums: + t.insert(i) + + f = open('test.dot', 'w') + t.root.graphviz_render(f) + f.close() + ''' + + +''' +/* balanced tree hack from http://www.graphviz.org/content/FaqBalanceTree */ + +/* +digraph G { + a -> b0 + xb [label="",width=.1,style=invis] + a -> xb [style=invis] + a -> b1 + + {rank=same b0 -> xb -> b1 [style=invis]} + + b0 -> c0 + xc [label="",width=.1,style=invis] + b0 -> xc [style=invis] + b0 -> c1 + + {rank=same c0 -> xc -> c1 [style=invis]} +} +*/ +''' + +''' +from bintree_module import TNode +import html_module + +r = TNode('a', + left=TNode('b0', + left=TNode('c0', + right=TNode('d1')), + right=TNode('c1', + left=TNode('d3'), + right=TNode('d4'))), + right=TNode('b1', + left=TNode('c2'))) + +def highlight_and_display(root): + def f(node): + node.highlight() + html_module.display_img(root.to_graphviz_img()) #break + node.reset_style() + return f + +def preorder(t, visitfn): + if not t: + return + visitfn(t) + preorder(t.left, visitfn) + preorder(t.right, visitfn) + +preorder(r, highlight_and_display(r)) +''' + +''' +from bintree_module import BST +import html_module +import random + +t = BST() +html_module.display_img(t.to_graphviz_img()) + +nums = range(10) +random.shuffle(nums) +for i in nums: + t.insert(i) + html_module.display_img(t.to_graphviz_img()) +''' + +# insertion into a BST with each step animated +# +# TODO: think of a more elegant way to separate out algorithm from HTML +# rendering code +''' +import html_module, GChartWrapper, random +from bintree_module import TNode + +class BST: + def __init__(self): + self.root = None + + def to_graphviz_img(self): + if self.root: + return GChartWrapper.GraphViz(self.root.to_graphviz_string()) + else: + return '' + + def insert(self, t): + """Insert data t into this BST, modifying it in-place.""" + new = TNode(t) + if self.root is None: + self.root = new + else: + node = self.root + while True: + node.highlight() + html_module.display_img(self.to_graphviz_img()) #break + node.reset_style() + if t < node.data: + # Go left + if node.left is None: + node.left = new + new.parent = node + + new.highlight() + html_module.display_img(self.to_graphviz_img()) #break + new.reset_style() + + break + node = node.left + else: + # Go right + if node.right is None: + node.right = new + new.parent = node + + new.highlight() + html_module.display_img(self.to_graphviz_img()) #break + new.reset_style() + + break + node = node.right + return new + +t = BST() +nums = range(10) +random.shuffle(nums) +for i in nums: + t.insert(i) +''' diff --git a/v3/bottle_server.py b/v3/bottle_server.py new file mode 100644 index 000000000..b50796181 --- /dev/null +++ b/v3/bottle_server.py @@ -0,0 +1,108 @@ +# Lightweight OPT server that works on both Python 2 and 3 + +# to invoke, run 'python bottle_server.py' +# and visit http://localhost:8080/index.html +# +# external dependencies: bottle +# +# easy_install pip +# pip install bottle + +# From an OPT user: A couple notes: to get bottle_server.py running, +# I had to replace cStringIO with io and urllib2 with urllib, for +# compatibility from 2.x to 3.x Ii was running from /v3/). + +from bottle import route, get, request, run, template, static_file +import StringIO # NB: don't use cStringIO since it doesn't support unicode!!! +import json +import pg_logger +import urllib +import urllib2 + + +@route('/') +def index(filepath): + # special-case for testing name_lookup.py ... + if 'name_lookup.py' in filepath: + return json.dumps(dict(name='TEST NAME', email='TEST EMAIL')) + return static_file(filepath, root='.') + +@get('/exec') +def get_exec(): + out_s = StringIO.StringIO() + + def json_finalizer(input_code, output_trace): + ret = dict(code=input_code, trace=output_trace) + json_output = json.dumps(ret, indent=None) + out_s.write(json_output) + + options = json.loads(request.query.options_json) + + pg_logger.exec_script_str_local(request.query.user_script, + request.query.raw_input_json, + options['cumulative_mode'], + options['heap_primitives'], + json_finalizer) + + return out_s.getvalue() + + +@get('/load_matrix_problem.py') +def load_matrix_problem(): + prob_name = request.query.problem_name + assert type(prob_name) in (str, unicode) + + # whitelist + assert prob_name in ('python_comprehension-1',) + + fn = 'matrix-demo/' + prob_name + '.py' + f = open(fn) + cod = f.read() + f.close() + + import doctest + import sys + p = doctest.DocTestParser() + examples = p.get_examples(cod) + if len(examples): + first_ex = examples[0] + #print >> sys.stderr, 'Source:', `first_ex.source` + testCod = 'result = ' + first_ex.source + + return json.dumps(dict(code=cod, test=testCod)) + + +@get('/submit_matrix_problem.py') +def submit_matrix_problem(): + user_code = request.query.submitted_code + prob_name = request.query.problem_name + assert type(prob_name) in (str, unicode) + + # whitelist + assert prob_name in ('python_comprehension-1',) + + test_fn = 'matrix-demo/' + prob_name + '.test.py' + test_cod = open(test_fn).read() + + # concatenate! + script = test_cod + '\n' + user_code + \ +''' +import doctest +(n_fail, n_tests) = doctest.testmod(verbose=False) +if n_fail == 0: + print("All %d tests passed!" % n_tests) +''' + + url = 'http://ec2-107-20-94-197.compute-1.amazonaws.com/cgi-bin/run_code.py' + values = {'user_script' : script} + + data = urllib.urlencode(values) + req = urllib2.Request(url, data) + response = urllib2.urlopen(req) + the_page = response.read() + return the_page + + +if __name__ == "__main__": + #run(host='localhost', port=8080, reloader=True) + run(host='0.0.0.0', port=8003, reloader=True) # make it externally visible - DANGER this is very insecure since there's no sandboxing! diff --git a/v3/callback_module.py b/v3/callback_module.py new file mode 100644 index 000000000..bee9441ca --- /dev/null +++ b/v3/callback_module.py @@ -0,0 +1,5 @@ +# this module contains a simple callback function to test whether +# callback functions get properly displayed in the trace + +def callback_func(func_arg): + func_arg() diff --git a/v3/commentary-bubbles-demo.css b/v3/commentary-bubbles-demo.css new file mode 100644 index 000000000..75ceea3ab --- /dev/null +++ b/v3/commentary-bubbles-demo.css @@ -0,0 +1,168 @@ +body { + background-color: white; + + font-family: verdana, arial, helvetica, sans-serif; + + font-size: 10pt; + + margin-top: 30px; + margin-left: 30px; + + /* center align */ + /* + max-width: 1000px; + margin-left: auto; + margin-right: auto; + */ +} + + +div#lessonHeader { + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px solid #ccc; + width: 800px; +} + +div#lessonTitle { + font-size: 16pt; + margin-bottom: 15pt; +} + +div#lessonDescription { + font-size: 11pt; + line-height: 1.5em; +} + +div#curStepNarration { + font-size: 11pt; + min-height: 60px; + margin-bottom: 12px; + line-height: 1.5em; + width: 800px; +} + + +/* For styling tricks, see: http://css-tricks.com/textarea-tricks/ */ +textarea.bubbleInputText { + border: 1px solid #ccc; + outline: none; + overflow: auto; /* to look pretty on IE */ + + /* make sure textarea doesn't grow and stretch the enclosing bubble */ + resize: none; + width: 225px; + max-width: 225px; + height: 35px; + max-height: 35px; +} + + +.ui-tooltip-pgbootstrap, +textarea.bubbleInputText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 9pt; + line-height: 1.3em; +} + + +/* modified version of Twitter bootstrap style by Philip Guo */ +.ui-tooltip-pgbootstrap{ + color: #333; + background-color: #ffffff; + + max-width: 250px; + min-width: 10px; + + border: 2px solid #4284D3; + + cursor: pointer; + + *border-right-width: 2px; + *border-bottom-width: 2px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + /* way too poofy ... + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + */ + + -webkit-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .ui-tooltip-pgbootstrap .ui-tooltip-titlebar{ + font-size: 18px; + line-height: 22px; + + border-bottom: 1px solid #ccc; + background-color: transparent; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-content{ + padding: 5px /* 5px is minimum or else it might look ugly */ 8px; + } + + + .ui-tooltip-pgbootstrap .ui-tooltip-titlebar .ui-state-default{ + right: 9px; top: 49%; + border-style: none; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon{ + background: white; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon{ + width: auto; + height: auto; + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon:hover{ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-pgbootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + + +.ui-tooltip-pgbootstrap-stub{ + border: 1px solid #999; + + /* + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + */ +} + + .ui-tooltip-pgbootstrap-stub .ui-tooltip-content{ + padding: 6px 9px; + } + diff --git a/v3/commentary-bubbles-demo.html b/v3/commentary-bubbles-demo.html new file mode 100644 index 000000000..dc650cbb8 --- /dev/null +++ b/v3/commentary-bubbles-demo.html @@ -0,0 +1,52 @@ + + + + + Online Python Tutor commentary bubbles demo + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Linked List Recursion Example
+
This code shows a function that sums up + the elements of a linked list using recursion.
+
+ +
At the current step, the program is about to +return from the base case of the recursion, which returns 0 to its +caller. +
+ +

+ + + + +
1def listSum(numbers):
2  if not numbers:
3    return 0
4  else:
5    (f, rest) = numbers
6    return f + listSum(rest)
7
8myList = (1, (2, (3, None)))
9total = listSum(myList)
Step 15 of 18
line that has just executed

next line to execute

Program output:
Frames
Global variables
listSum
 
myList
 
listSum
numbers
 
f1
rest
 
listSum
numbers
 
f2
rest
 
listSum
numbers
 
f3
restNone
listSum
numbersNone
Return
value
0
Objects
function listSum(numbers)
tuple
01
1
 
tuple
01
2
 
tuple
01
3None
+ + + diff --git a/v3/commentary-bubbles-demo.js b/v3/commentary-bubbles-demo.js new file mode 100644 index 000000000..edace49e0 --- /dev/null +++ b/v3/commentary-bubbles-demo.js @@ -0,0 +1,418 @@ +// Run: +// python generate_json_trace.py --create_jsvar=listSumTrace tests/backend-tests/list_sum.txt +// and copy-and-paste the output line into here: +var listSumTrace = {"code": "def listSum(numbers):\n if not numbers:\n return 0\n else:\n (f, rest) = numbers\n return f + listSum(rest)\n\nmyList = (1, (2, (3, None)))\ntotal = listSum(myList)\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 1, "event": "step_line"}, {"ordered_globals": ["listSum"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"__return__": 0, "numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"__return__": 3, "numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"__return__": 5, "numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"__return__": 6, "numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList", "total"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"total": 6, "myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "return"}]}; + + +var qtipShared = { + show: { + ready: true, // show on document.ready instead of on mouseenter + delay: 0, + event: null, + effect: function() {$(this).show();}, // don't do any fancy fading because it screws up with scrolling + }, + hide: { + fixed: true, + event: null, + effect: function() {$(this).hide();}, // don't do any fancy fading because it screws up with scrolling + }, + style: { + classes: 'ui-tooltip-pgbootstrap', // my own customized version of the bootstrap style + }, +}; + + +function createSpeechBubble(domID, my, at, htmlContent, isInput) { + var hashID = '#' + domID; + $(hashID).qtip($.extend({}, qtipShared, { + content: htmlContent, + id: domID, + position: { + my: my, + at: at, + effect: null, // disable all cutesy animations + }, + })); + + + if (isInput) { + + } + else { + $('#ui-tooltip-' + domID + '-content').click(function() { + if (!$(hashID).data('qtip-minimized')) { + $(hashID) + .data('qtip-minimized', true) + .qtip('option', 'content.text', ' '); + } + else { + $(hashID) + .data('qtip-minimized', false) + .qtip('option', 'content.text', htmlContent); + } + }); + } +} + + +// a speech bubble annotation to attach to: +// 'codeline' - a line of code +// 'frame' - a stack frame +// 'variable' - a variable within a stack frame +// 'object' - an object on the heap +// (as determined by the 'type' param) +// +// domID is the ID of the element to attach to (without the leading '#' sign) +function AnnotationBubble(type, domID) { + this.domID = domID; + this.hashID = '#' + domID; + + this.type = type; + + if (type == 'codeline') { + this.my = 'left center'; + this.at = 'right center'; + } + else if (type == 'frame') { + this.my = 'right center'; + this.at = 'left center'; + } + else if (type == 'variable') { + this.my = 'right center'; + this.at = 'left center'; + } + else if (type == 'object') { + this.my = 'bottom left'; + this.at = 'top center'; + } + else { + assert(false); + } + + // possible states: + // 'invisible' + // 'edit' + // 'view' + // 'minimized' + // 'stub' + this.state = 'invisible'; + + this.text = ''; // the actual contents of the annotation bubble + + this.qtipHidden = false; // is there a qtip object present but hidden? (TODO: kinda confusing) +} + +AnnotationBubble.prototype.showStub = function() { + assert(this.state == 'invisible' || this.state == 'edit'); + assert(this.text == ''); + + var myBubble = this; // to avoid name clashes with 'this' in inner scopes + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: ' ', + id: this.domID, + position: { + my: this.my, + at: this.at, + effect: null, // disable all cutesy animations + }, + style: { + classes: 'ui-tooltip-pgbootstrap ui-tooltip-pgbootstrap-stub' + } + })); + + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + myBubble.showEditor(); + }); + + this.state = 'stub'; +} + +AnnotationBubble.prototype.showEditor = function() { + assert(this.state == 'stub' || this.state == 'view' || this.state == 'minimized'); + + var myBubble = this; // to avoid name clashes with 'this' in inner scopes + + var ta = ''; + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: ta, + id: this.domID, + position: { + my: this.my, + at: this.at, + effect: null, // disable all cutesy animations + } + })); + + + $(this.qTipContentID()).find('textarea.bubbleInputText') + // set handler when the textarea loses focus + .blur(function() { + myBubble.text = $(this).val().trim(); // strip all leading and trailing spaces + + if (myBubble.text) { + myBubble.showViewer(); + } + else { + myBubble.showStub(); + } + }) + .focus(); // grab focus so that the user can start typing right away! + + this.state = 'edit'; +} + + +AnnotationBubble.prototype.bindViewerClickHandler = function() { + var myBubble = this; + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + if (globalAnnotationMode == 'edit') { + myBubble.showEditor(); + } + else if (globalAnnotationMode == 'view') { + myBubble.minimizeViewer(); + } + else { + assert(false); + } + }); +} + +AnnotationBubble.prototype.showViewer = function() { + assert(this.state == 'edit'); + assert(this.text); // must be non-empty! + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: this.text, + id: this.domID, + position: { + my: this.my, + at: this.at, + effect: null, // disable all cutesy animations + } + })); + + this.bindViewerClickHandler(); + this.state = 'view'; +} + + +AnnotationBubble.prototype.minimizeViewer = function() { + assert(this.state == 'view'); + + var myBubble = this; + + $(this.hashID).qtip('option', 'content.text', ' '); //hack to "minimize" its size + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + if (globalAnnotationMode == 'edit') { + myBubble.showEditor(); + } + else if (globalAnnotationMode == 'view') { + myBubble.restoreViewer(); + } + else { + assert(false); + } + }); + + this.state = 'minimized'; +} + +AnnotationBubble.prototype.restoreViewer = function() { + assert(this.state == 'minimized'); + $(this.hashID).qtip('option', 'content.text', this.text); + this.bindViewerClickHandler(); + this.state = 'view'; +} + +// NB: actually DESTROYS the QTip object +AnnotationBubble.prototype.makeInvisible = function() { + assert(this.state == 'stub' || this.state == 'edit'); + this.destroyQTip(); + this.state = 'invisible'; +} + + +AnnotationBubble.prototype.destroyQTip = function() { + $(this.hashID).qtip('destroy'); +} + +AnnotationBubble.prototype.qTipContentID = function() { + return '#ui-tooltip-' + this.domID + '-content'; +} + +AnnotationBubble.prototype.qTipID = function() { + return '#ui-tooltip-' + this.domID; +} + + +AnnotationBubble.prototype.enterEditMode = function() { + assert(globalAnnotationMode == 'edit'); + if (this.state == 'invisible') { + this.showStub(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } +} + +AnnotationBubble.prototype.enterViewMode = function() { + assert(globalAnnotationMode == 'view'); + if (this.state == 'stub') { + this.makeInvisible(); + } + else if (this.state == 'edit') { + this.text = $(this.qTipContentID()).find('textarea.bubbleInputText').val().trim(); // strip all leading and trailing spaces + + if (this.text) { + this.showViewer(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } + else { + this.makeInvisible(); + } + } +} + +AnnotationBubble.prototype.redrawCodelineBubble = function() { + assert(this.type == 'codeline'); + + if (isOutputLineVisible(this.domID)) { + if (this.qtipHidden) { + $(this.hashID).qtip('show'); + } + else { + $(this.hashID).qtip('reposition'); + } + + this.qtipHidden = false; + } + else { + $(this.hashID).qtip('hide'); + this.qtipHidden = true; + } +} + + +globalAnnotationMode = 'view'; +allBubbles = []; + + +// returns True iff lineNo is visible in pyCodeOutputDiv +// NB: copied, pasted, and modified from isOutputLineVisible in js/pytutor.js +function isOutputLineVisible(lineDivID) { + var pcod = $('#pyCodeOutputDiv'); + + var lineNoTd = $('#' + lineDivID); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + // add a few pixels of fudge factor on the bottom end due to bottom scrollbar + return (PO <= LO) && (LO < (PO + H - 25)); +} + + +$(document).ready(function() { + /* + var listSumVisualizer = new ExecutionVisualizer('listSumDiv', listSumTrace, + {embeddedMode: false, + editCodeBaseURL: 'http://pythontutor.com/visualize.html'}); + + return; + */ + + // force vertical code scrolling + $('#pyCodeOutputDiv').css('max-height', '120px'); + + allBubbles.push(new AnnotationBubble('frame', 'v1__globals')); + allBubbles.push(new AnnotationBubble('frame', 'v1__stack0')); + allBubbles.push(new AnnotationBubble('frame', 'v1__stack1')); + allBubbles.push(new AnnotationBubble('frame', 'v1__stack2')); + allBubbles.push(new AnnotationBubble('frame', 'v1__stack3')); + + allBubbles.push(new AnnotationBubble('object', 'v1__heap_object_1')); + allBubbles.push(new AnnotationBubble('object', 'v1__heap_object_2')); + allBubbles.push(new AnnotationBubble('object', 'v1__heap_object_3')); + allBubbles.push(new AnnotationBubble('object', 'v1__heap_object_4')); + + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod1')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod2')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod3')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod4')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod5')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod6')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod7')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod8')); + allBubbles.push(new AnnotationBubble('codeline', 'v1__cod9')); + + allBubbles.push(new AnnotationBubble('variable', 'v1__global__listSum_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__global__myList_tr')); + + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f1__numbers_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f1__f_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f1__rest_tr')); + + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f2__numbers_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f2__f_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f2__rest_tr')); + + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f3__numbers_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f3__f_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f3__rest_tr')); + + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f4__numbers_tr')); + allBubbles.push(new AnnotationBubble('variable', 'v1__listSum_f4____return___tr')); + + + $('#pyCodeOutputDiv').scroll(function() { + $.each(allBubbles, function(i, e) { + if (e.type == 'codeline') { + e.redrawCodelineBubble(); + } + }); + }); + + + $('#modeToggleBtn').click(function() { + if (globalAnnotationMode == 'view') { + $('#modeToggleBtn').html('View Annotations'); + globalAnnotationMode = 'edit'; + $.each(allBubbles, function(i, e) { + e.enterEditMode(); + }); + } + else if (globalAnnotationMode == 'edit') { + $('#modeToggleBtn').html('Add/Edit Annotations'); + globalAnnotationMode = 'view'; + $.each(allBubbles, function(i, e) { + e.enterViewMode(); + }); + } + else { + assert(false); + } + }); +}); diff --git a/v3/composingprograms.html b/v3/composingprograms.html new file mode 100644 index 000000000..7425eadfa --- /dev/null +++ b/v3/composingprograms.html @@ -0,0 +1,217 @@ + + + + + + + Online Python Tutor - Composing Programs - Python 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ [Optional] Sign in with either a Berkeley email or Google account +
+ + +
+ + + +
+ + +
+ + + +
+
+ +
+ + +
+ +
Write Python code here:
+ + +
+
+
+ +

+ +

+ +

+Execute code using + +and + +

+ +
+ + +
+
+ + + + + + + + + diff --git a/v3/csc108h.html b/v3/csc108h.html new file mode 100644 index 000000000..49f483dce --- /dev/null +++ b/v3/csc108h.html @@ -0,0 +1,153 @@ + + + + + + + Online Python Tutor - csc108h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+ +
Write Python code here:
+ + +
+
+
+ +

+ +

+ +
+ + +
+
+ + + + + diff --git a/v3/csc108h_shared.html b/v3/csc108h_shared.html new file mode 100644 index 000000000..481208108 --- /dev/null +++ b/v3/csc108h_shared.html @@ -0,0 +1,173 @@ + + + + + + + Online Python Tutor - csc108h with shared sessions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
+
+ +
+ + +
+ +
Write Python code here:
+ + +
+
+
+ +

+ +

+ +
+ + +
+
+ + + + + diff --git a/v3/css/basic.css b/v3/css/basic.css new file mode 100644 index 000000000..611807f58 --- /dev/null +++ b/v3/css/basic.css @@ -0,0 +1,61 @@ +/* + * SimpleModal Basic Modal Dialog + * http://www.ericmmartin.com/projects/simplemodal/ + * http://code.google.com/p/simplemodal/ + * + * Copyright (c) 2010 Eric Martin - http://ericmmartin.com + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Revision: $Id: basic.css 257 2010-07-27 23:06:56Z emartin24 $ + */ + +.basic-modal-content {display:none;} + +/* Overlay */ +#simplemodal-overlay {background-color:#000; cursor:wait;} + +/* Container */ +.simplemodal-container { + height:200px; + width:300px; + color:#bbb; + background-color:#333; + border:4px solid #444; + padding:5px; +} + +.simplemodal-container .simplemodal-data {padding:8px;} + +.simplemodal-container code { + background:#141414; + border-left:3px solid #65B43D; + color:#bbb; + display:block; + font-size:12px; + margin-bottom:12px; + padding:4px 6px 6px; +} + +.simplemodal-container a {color:#ddd;} + +.simplemodal-container a.modalCloseImg { + background:url(x.png) no-repeat; + width:25px; + height:29px; + display:inline; + z-index:3200; + position:absolute; + top:-15px; + right:-16px; + cursor:pointer;} + +.simplemodal-container h3 { + color:#84b8d9; + text-align: center; +} + +.feedbacktext { + color:#84b8d9; +} diff --git a/v3/css/codemirror.css b/v3/css/codemirror.css new file mode 100644 index 000000000..098a317a2 --- /dev/null +++ b/v3/css/codemirror.css @@ -0,0 +1,272 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; +} +.CodeMirror-scroll { + /* Set scrolling behaviour here */ + overflow: auto; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* CURSOR */ + +.CodeMirror div.CodeMirror-cursor { + border-left: 1px solid black; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor { + width: auto; + border: 0; + background: #7e7; +} +/* Can style cursor different in overwrite (non-insert) mode */ +div.CodeMirror-overwrite div.CodeMirror-cursor {} + +.cm-tab { display: inline-block; } + +.CodeMirror-ruler { + border-left: 1px solid #ccc; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + line-height: 1; + position: relative; + overflow: hidden; + background: white; + color: black; +} + +.CodeMirror-scroll { + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actuall scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + padding-bottom: 30px; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + -moz-box-sizing: content-box; + box-sizing: content-box; + padding-bottom: 30px; + margin-bottom: -32px; + display: inline-block; + /* Hack to make IE7 behave */ + *zoom:1; + *display:inline; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} + +.CodeMirror-lines { + cursor: text; +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget {} + +.CodeMirror-wrap .CodeMirror-scroll { + overflow-x: hidden; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} +.CodeMirror-measure pre { position: static; } + +.CodeMirror div.CodeMirror-cursor { + position: absolute; + border-right: none; + width: 0; +} + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 1; +} +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* IE7 hack to prevent it from returning funny offsetTops on the spans */ +.CodeMirror span { *vertical-align: text-bottom; } + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} diff --git a/v3/css/composingprograms.css b/v3/css/composingprograms.css new file mode 100644 index 000000000..2ece81988 --- /dev/null +++ b/v3/css/composingprograms.css @@ -0,0 +1,25 @@ +/* custom CSS for ../composingprograms.html + + always include this file AFTER pytutor.css +*/ + +div.ExecutionVisualizer table#pyCodeOutput { + font-size:11pt; + white-space: nowrap; +} + +div.ExecutionVisualizer div.stackFrame, +div.ExecutionVisualizer div.zombieStackFrame { + white-space: nowrap; +} + +div.ExecutionVisualizer div.zombieStackFrame { + color: #808080; +} + +/* make the left bars thicker and darker */ +div.ExecutionVisualizer div.stackFrame, +div.ExecutionVisualizer div.highlightedStackFrame { + border-left: 2px solid #686f70; +} + diff --git a/v3/css/holistic.css b/v3/css/holistic.css new file mode 100644 index 000000000..6dbf6e786 --- /dev/null +++ b/v3/css/holistic.css @@ -0,0 +1,181 @@ +/* Created by Irene Chen (2013) */ +div.HolisticVisualizer div#debug::-webkit-scrollbar { + width:9px; +} + +div.HolisticVisualizer div#debug::-webkit-scrollbar-track { + -webkit-border-radius:5px; + border-radius:5px; + background:rgba(0,0,0,0.1); +} + +div.HolisticVisualizer div#debug::-webkit-scrollbar-thumb { + -webkit-border-radius:5px; + border-radius:5px; + background:rgba(0,0,0,0.2); +} + +div.HolisticVisualizer div#debug::-webkit-scrollbar-thumb:hover { + background:rgba(0,0,0,0.4); +} + +div.HolisticVisualizer div#debug::-webkit-scrollbar-thumb:window-inactive { + background:rgba(0,0,0,0.05); +} + +div.HolisticVisualizer { + font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + font-size: 16px; +} + +div.HolisticVisualizer pre { + margin: 0; +} + +div.HolisticVisualizer div.control { + border :1px solid black; + border-radius: 5px; + display: block; + height: 100px; + margin-bottom: 10px; + margin-left: 10px; + padding: 5px; + width: 240px; +} + +div.HolisticVisualizer #wrapper { + width: 100%; +} + +div.HolisticVisualizer #left { + float: left; + overflow-x: scroll; + overflow-y: hidden; + width: 500px; +} + +div.HolisticVisualizer #right { + width: 100%; + vertical-align: top; +} + +div.HolisticVisualizer #padder { + padding-left: 502px; +} + +div.HolisticVisualizer table#code { + border-collapse: collapse; + font-family: Courier, monospace; + font-size: 11pt; + margin: 1px auto; + vertical-align: top; +} + +div.HolisticVisualizer #code tr, div.HolisticVisualizer #code td { + border-width: 0px; + text-overflow:ellipsis; + -ms-text-overflow:ellipsis; + padding: 0px; +} + +div.HolisticVisualizer #code td.v-hover { + background-color: #b0e0e6; +} + +div.HolisticVisualizer div#slider { + border: 1px solid gray; + display: inline-block; + height: 100%; + overflow-x: scroll; + vertical-align: top; + width: 100%; +} + +div.HolisticVisualizer div#debugPanel { + display: inline-block; + font-size: 10pt; + height: 400px; + vertical-align: top; + width: 400px; +} + +div.HolisticVisualizer div#debug { + height: 90%; + overflow: -moz-scrollbars-vertical; + overflow-y: scroll; +} + +#altContainer { + display: none; +} + +#altVisual { +} + +#holisticTooltip { + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4); + background-color: white; + border-radius: 10px; + box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.4); + display: none; + height: auto; + padding: 10px; + pointer-events: none; + position: absolute; + width: auto; +} + +#holisticTooltip.hidden { + display: none; +} + +#holisticTooltip p { + margin: 0; + font-family: sans-serif; + font-size: 16px; + line-height: 20px; +} + +div.HolisticVisualizer path { + fill: none; + stroke: steelblue; + stroke-width: 1; +} + +div.HolisticVisualizer .delimiter { + stroke: black; + stroke-opacity: 0.8; + stroke-width: 1px; +} + +div.HolisticVisualizer .h-hover { + fill-opacity: 0; + stroke: black; + stroke-opacity: 0; + stroke-width: 20px; +} + +div.HolisticVisualizer .v-hover { + fill-opacity: 0; +} + +div.HolisticVisualizer .v-guide, div.HolisticVisualizer .h-guide { + stroke: black; + stroke-opacity: 0.4; + stroke-width: 1px; +} + +div.HolisticVisualizer .axis path, +div.HolisticVisualizer .axis line { + fill: none; + stroke: black; + shape-rendering: crispEdges; +} + +div.HolisticVisualizer .axis text { + font-family: sans-serif; + font-size: 11px; +} diff --git a/v3/css/index.css b/v3/css/index.css new file mode 100644 index 000000000..64913aac2 --- /dev/null +++ b/v3/css/index.css @@ -0,0 +1,201 @@ +/* CSS accompanying ../index.html */ + +body { + background-color: white; + + font-family: Georgia, Palatino, Times, serif; + + font-size: 12pt; + + /* use fixed width for simplicity */ + max-width: 900px; + min-width: 900px; + width: 900px; + + margin-left: auto; + margin-right: auto; +} + +/* for prose text only */ +p, li { + line-height: 1.5; +} + +h1 { + font-weight: normal; + margin-top: 0px; + margin-bottom: 8px; + line-height: 1.5; +} + +.smallH1 { + font-size: 14pt; + margin-left: -2px; +} + +#optLink { + font-size: 14pt; + text-decoration: none; + color: #3D58A2; + font-weight: bold; +} + +#optLink:hover { + color: #3D58A2; + text-decoration: underline; +} + +.titlePane { + margin-left: auto; + margin-right: auto; + margin-bottom: 0px; + text-align: center; +} + +.titlePane h1 { + font-size: 22pt; + margin-bottom: 5px; +} + +div.mainBodyPane { + margin-left: auto; + margin-right: auto; +} + +div.activityPane { + /* TOP RIGHT BOTTOM LEFT */ + padding: 15px 0px /* make right padding ZERO and just right-pad 'p' */ 5px 20px; + text-align: left; + border: 3px solid #005583; +} + +div.activityPane p { + padding-right: 30px; +} + +div.activityPane h1 { + font-size: 22pt; + margin-bottom: 20pt; +} + + +ul { + padding-left: 18px; +} + +li { + margin-bottom: 12px; + font-size: 10pt; +} + +a, +a:visited, +a:hover { + color: #3D58A2; +} + +#learnHeading, #embedHeading, #shareHeading { + font-family: verdana, arial, helvetica, sans-serif; + font-weight: bold; + font-size: 24pt; +} + +#learnHeading { + color: #062270; +} + +div#learnPane { + margin-top: 6pt; + margin-bottom: 8pt; + border: 5px solid #062270; +} + +div#learnPane p { + padding-right: 100px; +} + +div#learnPane #startLink { + font-size: 16pt; + font-weight: normal; + margin-top: 20px; + margin-bottom: 25px; + font-family: verdana, arial, helvetica, sans-serif; +} + +div#learnPane #startLink a { + border-bottom-style: solid; + border-bottom-width: 2px; + text-decoration: none; +} + +tt { + /*font-size: 85%;*/ +} + +div#embedPane { + margin-right: 5px; + border: 5px solid #5a7973; +} + + +#embedHeading { + color: #5a7973; +} + +div#sharePane { + margin-left: 5px; + border: 5px solid #4284d3; +} + +#shareHeading { + color: #4284d3; +} + +div#detailsPane { + margin-top: 0px; + margin-left: 5px; + border: 0px; /* NO BORDER! */ +} + +#partnershipDiv { + /*background-color: #d8e1e3;*/ + background-color: #d9cdb6; + width: 60%; + padding: 8px; + margin-left: auto; + margin-right: auto; + text-align: center; + + font-size: 10pt; + font-family: Monaco, arial, sans-serif; +} + +table.layoutTbl { + border: 0px; + max-width: 900px; +} + +table.layoutTbl td#embedPaneTd { + width: 60%; + vertical-align: top; +} + +table.layoutTbl td#sharePaneTd { + width: 40%; + vertical-align: top; +} + + +#footer { + color: #666666; + font-size: 9pt; + border-top: 1px solid #bbbbbb; + padding-top: 0px; + margin-top: 20px; + + /* center align */ + margin-left: auto; + margin-right: auto; + + font-family: verdana, arial, helvetica, sans-serif; +} diff --git a/v3/css/jquery.qtip.css b/v3/css/jquery.qtip.css new file mode 100644 index 000000000..fb7fe24b6 --- /dev/null +++ b/v3/css/jquery.qtip.css @@ -0,0 +1,573 @@ +/*! qTip2 - Pretty powerful tooltips - v2.0.0 - 2012-09-10 +* http://craigsworks.com/projects/qtip2/ +* Copyright (c) 2012 Craig Michael Thompson; Licensed MIT, GPL */ + +/* Fluid class for determining actual width in IE */ +#qtip-rcontainer{ + position: absolute; + left: -28000px; + top: -28000px; + display: block; + visibility: hidden; +} + + /* Fluid class for determining actual width in IE */ + #qtip-rcontainer .ui-tooltip{ + display: block !important; + visibility: hidden !important; + position: static !important; + float: left !important; + } + +/* Core qTip styles */ +.ui-tooltip, .qtip{ + position: absolute; + left: -28000px; + top: -28000px; + display: none; + + max-width: 280px; + min-width: 50px; + + font-size: 10.5px; + line-height: 12px; +} + + .ui-tooltip-content{ + position: relative; + padding: 5px 9px; + overflow: hidden; + + text-align: left; + word-wrap: break-word; + } + + .ui-tooltip-titlebar{ + position: relative; + min-height: 14px; + padding: 5px 35px 5px 10px; + overflow: hidden; + + border-width: 0 0 1px; + font-weight: bold; + } + + .ui-tooltip-titlebar + .ui-tooltip-content{ border-top-width: 0 !important; } + + /* Default close button class */ + .ui-tooltip-titlebar .ui-state-default{ + position: absolute; + right: 4px; + top: 50%; + margin-top: -9px; + + cursor: pointer; + outline: medium none; + + border-width: 1px; + border-style: solid; + } + + * html .ui-tooltip-titlebar .ui-state-default{ top: 16px; } /* IE fix */ + + .ui-tooltip-titlebar .ui-icon, + .ui-tooltip-icon .ui-icon{ + display: block; + text-indent: -1000em; + direction: ltr; + } + + .ui-tooltip-icon, .ui-tooltip-icon .ui-icon{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-decoration: none; + } + + .ui-tooltip-icon .ui-icon{ + width: 18px; + height: 14px; + + text-align: center; + text-indent: 0; + font: normal bold 10px/13px Tahoma,sans-serif; + + color: inherit; + background: transparent none no-repeat -100em -100em; + } + + +/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ +.ui-tooltip-focus{} + +/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ +.ui-tooltip-hover{} + +/* Default tooltip style */ +.ui-tooltip-default{ + border-width: 1px; + border-style: solid; + border-color: #F1D031; + + background-color: #FFFFA3; + color: #555; +} + + .ui-tooltip-default .ui-tooltip-titlebar{ + background-color: #FFEF93; + } + + .ui-tooltip-default .ui-tooltip-icon{ + border-color: #CCC; + background: #F1F1F1; + color: #777; + } + + .ui-tooltip-default .ui-tooltip-titlebar .ui-state-hover{ + border-color: #AAA; + color: #111; + } + + +/*! Light tooltip style */ +.ui-tooltip-light{ + background-color: white; + border-color: #E2E2E2; + color: #454545; +} + + .ui-tooltip-light .ui-tooltip-titlebar{ + background-color: #f1f1f1; + } + + +/*! Dark tooltip style */ +.ui-tooltip-dark{ + background-color: #505050; + border-color: #303030; + color: #f3f3f3; +} + + .ui-tooltip-dark .ui-tooltip-titlebar{ + background-color: #404040; + } + + .ui-tooltip-dark .ui-tooltip-icon{ + border-color: #444; + } + + .ui-tooltip-dark .ui-tooltip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/*! Cream tooltip style */ +.ui-tooltip-cream{ + background-color: #FBF7AA; + border-color: #F9E98E; + color: #A27D35; +} + + .ui-tooltip-cream .ui-tooltip-titlebar{ + background-color: #F0DE7D; + } + + .ui-tooltip-cream .ui-state-default .ui-tooltip-icon{ + background-position: -82px 0; + } + + +/*! Red tooltip style */ +.ui-tooltip-red{ + background-color: #F78B83; + border-color: #D95252; + color: #912323; +} + + .ui-tooltip-red .ui-tooltip-titlebar{ + background-color: #F06D65; + } + + .ui-tooltip-red .ui-state-default .ui-tooltip-icon{ + background-position: -102px 0; + } + + .ui-tooltip-red .ui-tooltip-icon{ + border-color: #D95252; + } + + .ui-tooltip-red .ui-tooltip-titlebar .ui-state-hover{ + border-color: #D95252; + } + + +/*! Green tooltip style */ +.ui-tooltip-green{ + background-color: #CAED9E; + border-color: #90D93F; + color: #3F6219; +} + + .ui-tooltip-green .ui-tooltip-titlebar{ + background-color: #B0DE78; + } + + .ui-tooltip-green .ui-state-default .ui-tooltip-icon{ + background-position: -42px 0; + } + + +/*! Blue tooltip style */ +.ui-tooltip-blue{ + background-color: #E5F6FE; + border-color: #ADD9ED; + color: #5E99BD; +} + + .ui-tooltip-blue .ui-tooltip-titlebar{ + background-color: #D0E9F5; + } + + .ui-tooltip-blue .ui-state-default .ui-tooltip-icon{ + background-position: -2px 0; + } + + +/* Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-shadow{ + -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); +} + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-rounded, +.ui-tooltip-tipsy, +.ui-tooltip-bootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +/* Youtube tooltip style */ +.ui-tooltip-youtube{ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 3px #333; + -moz-box-shadow: 0 0 3px #333; + box-shadow: 0 0 3px #333; + + color: white; + border-width: 0; + + background: #4A4A4A; + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); + background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); +} + + .ui-tooltip-youtube .ui-tooltip-titlebar{ + background-color: #4A4A4A; + background-color: rgba(0,0,0,0); + } + + .ui-tooltip-youtube .ui-tooltip-content{ + padding: .75em; + font: 12px arial,sans-serif; + + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); + -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; + } + + .ui-tooltip-youtube .ui-tooltip-icon{ + border-color: #222; + } + + .ui-tooltip-youtube .ui-tooltip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* jQuery TOOLS Tooltip style */ +.ui-tooltip-jtools{ + background: #232323; + background: rgba(0, 0, 0, 0.7); + background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); + background-image: -moz-linear-gradient(top, #717171, #232323); + background-image: -webkit-linear-gradient(top, #717171, #232323); + background-image: -ms-linear-gradient(top, #717171, #232323); + background-image: -o-linear-gradient(top, #717171, #232323); + + border: 2px solid #ddd; + border: 2px solid rgba(241,241,241,1); + + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 12px #333; + -moz-box-shadow: 0 0 12px #333; + box-shadow: 0 0 12px #333; +} + + /* IE Specific */ + .ui-tooltip-jtools .ui-tooltip-titlebar{ + background-color: transparent; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; + } + .ui-tooltip-jtools .ui-tooltip-content{ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; + } + + .ui-tooltip-jtools .ui-tooltip-titlebar, + .ui-tooltip-jtools .ui-tooltip-content{ + background: transparent; + color: white; + border: 0 dashed transparent; + } + + .ui-tooltip-jtools .ui-tooltip-icon{ + border-color: #555; + } + + .ui-tooltip-jtools .ui-tooltip-titlebar .ui-state-hover{ + border-color: #333; + } + + +/* Cluetip style */ +.ui-tooltip-cluetip{ + -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + + background-color: #D9D9C2; + color: #111; + border: 0 dashed transparent; +} + + .ui-tooltip-cluetip .ui-tooltip-titlebar{ + background-color: #87876A; + color: white; + border: 0 dashed transparent; + } + + .ui-tooltip-cluetip .ui-tooltip-icon{ + border-color: #808064; + } + + .ui-tooltip-cluetip .ui-tooltip-titlebar .ui-state-hover{ + border-color: #696952; + color: #696952; + } + + +/* Tipsy style */ +.ui-tooltip-tipsy{ + background: black; + background: rgba(0, 0, 0, .87); + + color: white; + border: 0 solid transparent; + + font-size: 11px; + font-family: 'Lucida Grande', sans-serif; + font-weight: bold; + line-height: 16px; + text-shadow: 0 1px black; +} + + .ui-tooltip-tipsy .ui-tooltip-titlebar{ + padding: 6px 35px 0 10; + background-color: transparent; + } + + .ui-tooltip-tipsy .ui-tooltip-content{ + padding: 6px 10; + } + + .ui-tooltip-tipsy .ui-tooltip-icon{ + border-color: #222; + text-shadow: none; + } + + .ui-tooltip-tipsy .ui-tooltip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* Tipped style */ +.ui-tooltip-tipped{ + border: 3px solid #959FA9; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + + background-color: #F9F9F9; + color: #454545; + + font-weight: normal; + font-family: serif; +} + + .ui-tooltip-tipped .ui-tooltip-titlebar{ + border-bottom-width: 0; + + color: white; + background: #3A79B8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); + background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); + background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); + background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); + background-image: -o-linear-gradient(top, #3A79B8, #2E629D); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; + } + + .ui-tooltip-tipped .ui-tooltip-icon{ + border: 2px solid #285589; + background: #285589; + } + + .ui-tooltip-tipped .ui-tooltip-icon .ui-icon{ + background-color: #FBFBFB; + color: #555; + } + + +/** + * Twitter Bootstrap style. + * + * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. + * Does not work with IE 7. + */ +.ui-tooltip-bootstrap{ + font-size: 13px; + line-height: 18px; + + color: #333333; + background-color: #ffffff; + + + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + + *border-right-width: 2px; + *border-bottom-width: 2px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .ui-tooltip-bootstrap .ui-tooltip-titlebar{ + font-size: 18px; + line-height: 22px; + + border-bottom: 1px solid #ccc; + background-color: transparent; + } + + .ui-tooltip-bootstrap .ui-tooltip-titlebar .ui-state-default{ + right: 9px; top: 49%; + border-style: none; + } + + .ui-tooltip-bootstrap .ui-tooltip-icon{ + background: white; + } + + .ui-tooltip-bootstrap .ui-tooltip-icon .ui-icon{ + width: auto; + height: auto; + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .ui-tooltip-bootstrap .ui-tooltip-icon .ui-icon:hover{ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* IE9 fix - removes all filters */ +.ui-tooltip:not(.ie9haxors) div.ui-tooltip-content, +.ui-tooltip:not(.ie9haxors) div.ui-tooltip-titlebar{ + filter: none; + -ms-filter: none; +} + + +/* Tips plugin */ +.ui-tooltip .ui-tooltip-tip{ + margin: 0 auto; + overflow: hidden; + z-index: 10; +} + + .ui-tooltip .ui-tooltip-tip, + .ui-tooltip .ui-tooltip-tip .qtip-vml{ + position: absolute; + + line-height: 0.1px !important; + font-size: 0.1px !important; + color: #123456; + + background: transparent; + border: 0 dashed transparent; + } + + .ui-tooltip .ui-tooltip-tip canvas{ top: 0; left: 0; } + + .ui-tooltip .ui-tooltip-tip .qtip-vml{ + behavior: url(#default#VML); + display: inline-block; + visibility: visible; + } +/* Modal plugin */ +#qtip-overlay{ + position: fixed; + left: -10000em; + top: -10000em; +} + + /* Applied to modals with show.modal.blur set to true */ + #qtip-overlay.blurs{ cursor: pointer; } + + /* Change opacity of overlay here */ + #qtip-overlay div{ + position: absolute; + left: 0; top: 0; + width: 100%; height: 100%; + + background-color: black; + + opacity: 0.7; + filter:alpha(opacity=70); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + } + diff --git a/v3/css/jquery.ui.chatbox.css b/v3/css/jquery.ui.chatbox.css new file mode 100644 index 000000000..d0036250c --- /dev/null +++ b/v3/css/jquery.ui.chatbox.css @@ -0,0 +1,63 @@ +/* original from http://reason.cs.illinois.edu/wenpu1/chatbox.html, modified by Philip Guo */ +/* style sheets */ +.ui-chatbox { + position: fixed; + bottom:0; + padding: 2px; + background: #CCCCCC; + font-size: 10pt; +} + +.ui-chatbox-titlebar { + padding: 3px; + height: 20px; + cursor: pointer; +} + +.ui-chatbox-content { + padding: 0px; + margin: 0px; + border: 0px; +} + +.ui-chatbox-log { + padding: 3px; + height: 250px; + overflow-y: auto; + overflow-x: hidden; + background: #FFFFFF !important; +} + +.ui-chatbox-input { + padding: 3px; + border-top: 1px solid grey; + overflow: hidden; +} + +.ui-chatbox-input-box { + margin: 5px; + border: 2px solid lightgrey;/* #6699FF */ + padding: 2px; + height: 50px; + background: #FFFFFF !important; +} + +.ui-chatbox-icon { + float: right; +} + +.ui-chatbox-input-focus { + border-color: #6699FF; +} + +.ui-chatbox-msg { + margin-top: 10px; + float: left; + clear: both; + /* Source: http://snipplr.com/view/10979/css-cross-browser-word-wrap */ + white-space: pre-wrap; /* CSS3 */ + white-space: -moz-pre-wrap; /* Firefox */ + white-space: -pre-wrap; /* Opera <7 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* IE */ +} diff --git a/v3/css/matrixtutor.css b/v3/css/matrixtutor.css new file mode 100644 index 000000000..46e4957a7 --- /dev/null +++ b/v3/css/matrixtutor.css @@ -0,0 +1,21 @@ +/* custom CSS for ../matrixtutor.html + + always include this file AFTER pytutor.css +*/ + +#testInputPane { + margin-top: 5px; + font-size: 12pt; + border: 1px solid #ddd; +} + +#gradingPane { + margin-top: 20px; + margin-bottom: 20px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + diff --git a/v3/css/opt-frontend.css b/v3/css/opt-frontend.css new file mode 100644 index 000000000..20aa7a5e2 --- /dev/null +++ b/v3/css/opt-frontend.css @@ -0,0 +1,228 @@ +/* CSS accompanying ../visualize.html */ + +h1 { + font-weight: normal; + font-size: 20pt; + font-family: georgia, serif; + line-height: 1em; /* enforce single spacing so that Georgia works */ + + margin-top: 0px; + margin-bottom: 8px; +} + +h2 { + font-size: 12pt; + font-weight: normal; + font-family: georgia, serif; + line-height: 1.1em; /* enforce single spacing so that Georgia works */ + + margin-top: 2px; + margin-bottom: 20px; +} + + +body { + background-color: white; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 10pt; +} + +a, +a:visited, +a:hover { + color: #3D58A2; +} + +span { + padding: 0px; +} + +table#pyOutputPane { + padding: 10px; +} + +#pyInputPane, #loadingPane { + margin-top: 10px; + margin-bottom: 20px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +#loadingPane { + margin-bottom: 5px; +} + +#codeInputPane { + margin-top: 5px; + font-size: 12pt; + border: 1px solid #ddd; +} + +#codeInputWarnings { + margin-bottom: 8px; +} + +button.smallBtn { + font-size: 10pt; + padding: 3px; +} + +button.bigBtn { + font-size: 12pt; + padding: 6px; + margin-top: 0px; +} + +button.surveyBtn { + font-size: 8pt; + margin-top: 8px; +} + +#footer { + color: #888888; + font-size: 9pt; + border-top: 1px solid #bbbbbb; + padding-top: 5px; + margin-top: 5px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +#frontendErrorOutput { + color: #e93f34; /* should match brightRed JavaScript variable */ + font-size: 12pt; + line-height: 1.5em; + margin-top: 8px; +} + +.togetherjsBtn { + color: #b80000; + font-size: 9pt; + padding: 4px; + margin-top: 3px; +} + +#syncBtn { + font-size: 8pt; + margin-left: 10px; +} + +#experimentalHeader { +} + +#surveyHeader { + margin-left: 100px; +} + +.surveyQ { + font-size: 9pt; + padding: 2px; +} + +/* necessary for CodeMirror error line highlighting to work! */ +.CodeMirror .errorLine { background: #ffff3f !important; } + + +/* from http://rog.ie/blog/css-star-rater */ +.star-rating { + font-size: 0; + white-space: nowrap; + display: inline-block; + /* pgbovine - scale this appropriately with a 5:1 ratio */ + width: 100px; + height: 20px; + overflow: hidden; + position: relative; + background: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIwIDIwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjREREREREIiBwb2ludHM9IjEwLDAgMTMuMDksNi41ODMgMjAsNy42MzkgMTUsMTIuNzY0IDE2LjE4LDIwIDEwLDE2LjU4MyAzLjgyLDIwIDUsMTIuNzY0IDAsNy42MzkgNi45MSw2LjU4MyAiLz48L3N2Zz4='); + background-size: contain; +} +.star-rating i { + opacity: 0; + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 20%; + z-index: 1; + background: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIwIDIwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjRkZERjg4IiBwb2ludHM9IjEwLDAgMTMuMDksNi41ODMgMjAsNy42MzkgMTUsMTIuNzY0IDE2LjE4LDIwIDEwLDE2LjU4MyAzLjgyLDIwIDUsMTIuNzY0IDAsNy42MzkgNi45MSw2LjU4MyAiLz48L3N2Zz4='); + background-size: contain; +} +.star-rating input { + -moz-appearance: none; + -webkit-appearance: none; + opacity: 0; + display: inline-block; + width: 20%; + height: 100%; + margin: 0; + padding: 0; + z-index: 2; + position: relative; +} +.star-rating input:hover + i, +.star-rating input:checked + i { + opacity: 1; +} +.star-rating i ~ i { + width: 40%; +} +.star-rating i ~ i ~ i { + width: 60%; +} +.star-rating i ~ i ~ i ~ i { + width: 80%; +} +.star-rating i ~ i ~ i ~ i ~ i { + width: 100%; +} + + +#syntaxErrBubbleContents { + font-size: 9pt; + cursor: default; +} + +#syntaxErrHeader { + margin-bottom: 3pt; +} + +#syntaxErrCodeDisplay { + border: 1px solid #ddd; +} + +#syntaxErrMsg { + color: #e93f34; /* should match brightRed JavaScript variable */ + font-size: 10pt; + margin-top: 3pt; + margin-bottom: 2pt; +} + +#syntaxErrQuestion { + margin-top: 12px; +} + +#syntaxErrTxtInput { + margin-top: 3px; + margin-bottom: 6px; + padding: 2px; +} + +#syntaxErrSubmitBtn, #syntaxErrCloseBtn { + margin-right: 8px; +} + +#syntaxErrHideAllLink { + font-size: 8pt; +} + +#testCasesPane { + margin-top: 5px; + padding-bottom: 10px; + border-bottom: 1px solid #ccc; +} diff --git a/v3/css/opt-lessons.css b/v3/css/opt-lessons.css new file mode 100644 index 000000000..02c07e950 --- /dev/null +++ b/v3/css/opt-lessons.css @@ -0,0 +1,85 @@ +/* CSS accompanying ../lesson.html */ + +body { + background-color: white; + + font-family: verdana, arial, helvetica, sans-serif; + + font-size: 10pt; + + max-width: 900px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +div#lessonHeader { + margin-bottom: 15pt; + width: 800px; +} + +div#lessonTitle { + font-size: 16pt; + margin-bottom: 15pt; +} + +div#lessonDescription { + font-size: 11pt; + line-height: 1.5em; +} + +div#lessonNarration { + font-size: 11pt; + min-height: 25px; + margin-bottom: 12px; + line-height: 1.5em; + width: 800px; +} + + +a, +a:visited, +a:hover { + color: #3D58A2; +} + +span { + padding: 0px; +} + +table#pyOutputPane { + padding: 10px; +} + +#pyInputPane { + margin-top: 20px; + margin-bottom: 20px; + + max-width: 700px; + /* center align */ + margin-left: auto; + margin-right: auto; +} + +#codeInputPane { + margin-top: 5px; + font-size: 12pt; +} + +button.smallBtn { + font-size: 10pt; + padding: 3px; +} + +button.bigBtn { + font-size: 12pt; + padding: 5px; +} + +#footer { + color: #666; + font-size: 9pt; + border-top: 1px solid #bbb; + padding-top: 12px; + margin-top: 5px; +} diff --git a/v3/css/opt-testcases.css b/v3/css/opt-testcases.css new file mode 100644 index 000000000..56abd54ba --- /dev/null +++ b/v3/css/opt-testcases.css @@ -0,0 +1,25 @@ +.testCaseEditor { + width: 300px; + height: 90px; /* VERY IMPORTANT so that it works on I.E., ugh! */ + border: 1px solid #ddd; +} + +#testCasesTable thead td { + padding-bottom: 5px; + border-bottom: 1px solid #bbb; + text-align: center; +} + +#testCasesTable td { + padding-top: 10px; + padding-right: 5px; + vertical-align: top; +} + +#testCasesTable td.outputTd { + text-align: center; +} + +#testCasesTable { + margin-bottom: 5px; +} diff --git a/v3/css/pytutor.css b/v3/css/pytutor.css new file mode 100644 index 000000000..6d0b836c6 --- /dev/null +++ b/v3/css/pytutor.css @@ -0,0 +1,855 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/* Most recent color scheme redesign on 2012-08-19 */ + +/* To prevent CSS namespace clashes, prefix all rules with: + div.ExecutionVisualizer +*/ + + +/* reset some styles to nullify effects of existing stylesheets + e.g., http://meyerweb.com/eric/tools/css/reset/ +*/ +div.ExecutionVisualizer { + /* none for now */ +} + +div.ExecutionVisualizer table.visualizer { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 10pt; + margin-bottom: 10px; +} + +div.ExecutionVisualizer table.visualizer td.vizLayoutTd { + vertical-align: top; +} + +div.ExecutionVisualizer td#stack_td, +div.ExecutionVisualizer td#heap_td { + vertical-align:top; + font-size: 10pt; /* don't make fonts in the heap so big! */ +} + +div.ExecutionVisualizer #dataViz { + margin-left: 25px; +} + +div.ExecutionVisualizer div#codeDisplayDiv { + /* set this as default unless user specifies a custom size */ + width: 550px; +} + +div.ExecutionVisualizer div#pyCodeOutputDiv { + /*max-width: 550px;*/ + max-height: 460px; + /*max-height: 620px;*/ + overflow: auto; + /*margin-bottom: 4px;*/ + + margin-left: auto; + margin-right: auto; +} + +div.ExecutionVisualizer table#pyCodeOutput { + font-family: Andale mono, monospace; + /*font-size:12pt;*/ + font-size:11pt; + line-height:1.1em; + + border-collapse: separate; /* some crazy CSS voodoo that needs to be + there so that SVG arrows to the left + of the code line up vertically in Chrome */ + border-spacing: 0px; + border-top: 1px solid #bbb; + padding-top: 3px; + border-bottom: 1px solid #bbb; + /*margin-top: 6px;*/ + margin: 6px auto; /* Center code in its pane */ +} + +/* don't wrap lines within code output ... FORCE scrollbars to appear */ +div.ExecutionVisualizer table#pyCodeOutput td { + white-space: nowrap; + vertical-align: middle; /* explicitly force, to override external CSS conflicts */ +} + +div.ExecutionVisualizer #leftCodeGutterSVG { + width: 18px; + min-width: 18px; /* make sure it doesn't squash too thin */ + height: 0px; /* programmatically set this later ... IE needs this to + be 0 or it defaults to something arbitrary and gross */ +} + +div.ExecutionVisualizer #prevLegendArrowSVG, +div.ExecutionVisualizer #curLegendArrowSVG { + width: 18px; + height: 10px; +} + +div.ExecutionVisualizer .arrow { + font-size: 16pt; +} + +div.ExecutionVisualizer table#pyCodeOutput .lineNo { + color: #aaa; + padding: 0.2em; + padding-left: 0.3em; + padding-right: 0.5em; + text-align: right; +} + +div.ExecutionVisualizer table#pyCodeOutput .cod { + /*font-weight: bold;*/ + margin-left: 3px; + padding-left: 7px; + text-align: left; /* necessary or else doesn't work properly in IE */ +} + +div.ExecutionVisualizer div#progOutputs { + margin-top: 8px; +} + +div.ExecutionVisualizer div#legendDiv { + margin-top: 10px; + padding: 0px; + text-align: left; + color: #666; + font-size: 9pt; +} + +div.ExecutionVisualizer div#editCodeLinkDiv { + text-align: center; + /* + margin-top: 12px; + margin-bottom: 4px; + */ + margin: 8px auto; + font-size: 11pt; +} + +div.ExecutionVisualizer div#annotateLinkDiv { + /*text-align: left;*/ + margin-top: 0px; + margin-bottom: 12px; + /* + margin-left: auto; + margin-right: auto; + */ +} + +div.ExecutionVisualizer div#stepAnnotationDiv { + margin-bottom: 12px; +} + +div.ExecutionVisualizer textarea#stepAnnotationEditor, +div.ExecutionVisualizer textarea#vizTitleEditor, +div.ExecutionVisualizer textarea#vizDescriptionEditor { + border: 1px solid #999999; + padding: 4px; + + overflow: auto; /* to look pretty on IE */ + /* make sure textarea doesn't grow and stretch */ + resize: none; +} + + +div.ExecutionVisualizer #errorOutput { + color: #e93f34; /* should match brightRed JavaScript variable */ + font-size: 12pt; + padding: 2px; + line-height: 1.5em; + margin-bottom: 4px; +} + +/* VCR control buttons for stepping through execution */ + +div.ExecutionVisualizer #vcrControls { + margin: 15px auto; + /*width: 100%;*/ + text-align: center; +} + +div.ExecutionVisualizer #vcrControls button { + margin-left: 2px; + margin-right: 2px; +} + +div.ExecutionVisualizer #vcrControls #curInstr { + margin-left: 4px; + margin-right: 4px; +} + +div.ExecutionVisualizer #pyStdout { + border: 1px solid #999999; + font-size: 12pt; + padding: 4px; + font-family: Andale mono, monospace; + + overflow: auto; /* to look pretty on IE */ + /* make sure textarea doesn't grow and stretch */ + resize: none; +} + + +div.ExecutionVisualizer .vizFrame { + margin-bottom: 20px; + padding-left: 8px; + border-left: 2px solid #cccccc; +} + + +/* Rendering of primitive types */ + +div.ExecutionVisualizer .nullObj { +// font-size: 8pt; +} + +div.ExecutionVisualizer .stringObj, +div.ExecutionVisualizer .customObj, +div.ExecutionVisualizer .funcObj { + font-family: Andale mono, monospace; + white-space: nowrap; +} + +div.ExecutionVisualizer .funcCode { + font-size: 8pt; +} + +div.ExecutionVisualizer .retval { + font-size: 9pt; +} + +div.ExecutionVisualizer .stackFrame .retval { + color: #e93f34; /* highlight non-zombie stack frame return values - + should match brightRed JavaScript variable */ +} + +/* Rendering of basic compound types */ + +div.ExecutionVisualizer table.listTbl, +div.ExecutionVisualizer table.tupleTbl, +div.ExecutionVisualizer table.setTbl { + background-color: #ffffc6; +} + + +div.ExecutionVisualizer table.listTbl { + border: 0px solid black; + border-spacing: 0px; +} + +div.ExecutionVisualizer table.listTbl td.listHeader, +div.ExecutionVisualizer table.tupleTbl td.tupleHeader { + padding-left: 4px; + padding-top: 2px; + padding-bottom: 3px; + font-size: 8pt; + color: #777; + text-align: left; + border-left: 1px solid #555555; +} + +div.ExecutionVisualizer table.tupleTbl { + border-spacing: 0px; + color: black; + + border-bottom: 1px solid #555555; /* must match td.tupleHeader border */ + border-top: 1px solid #555555; /* must match td.tupleHeader border */ + border-right: 1px solid #555555; /* must match td.tupleHeader border */ +} + + +div.ExecutionVisualizer table.listTbl td.listElt { + border-bottom: 1px solid #555555; /* must match td.listHeader border */ + border-left: 1px solid #555555; /* must match td.listHeader border */ +} + +div.ExecutionVisualizer table.tupleTbl td.tupleElt { + border-left: 1px solid #555555; /* must match td.tupleHeader border */ +} + +div.ExecutionVisualizer table.customObjTbl { + background-color: white; + color: black; + border: 1px solid black; +} + +div.ExecutionVisualizer table.customObjTbl td.customObjElt { + padding: 5px; +} + +div.ExecutionVisualizer table.listTbl td.listElt, +div.ExecutionVisualizer table.tupleTbl td.tupleElt { + padding-top: 0px; + padding-bottom: 8px; + padding-left: 10px; + padding-right: 10px; + vertical-align: bottom; +} + +div.ExecutionVisualizer table.setTbl { + border: 1px solid #555555; + border-spacing: 0px; + text-align: center; +} + +div.ExecutionVisualizer table.setTbl td.setElt { + padding: 8px; +} + + +div.ExecutionVisualizer table.dictTbl, +div.ExecutionVisualizer table.instTbl, +div.ExecutionVisualizer table.classTbl { + border-spacing: 1px; +} + +div.ExecutionVisualizer table.dictTbl td.dictKey, +div.ExecutionVisualizer table.instTbl td.instKey, +div.ExecutionVisualizer table.classTbl td.classKey { + background-color: #faebbf; +} + +div.ExecutionVisualizer table.dictTbl td.dictVal, +div.ExecutionVisualizer table.instTbl td.instVal, +div.ExecutionVisualizer table.classTbl td.classVal, +div.ExecutionVisualizer td.funcCod { + background-color: #ffffc6; +} + + +div.ExecutionVisualizer table.dictTbl td.dictKey, +div.ExecutionVisualizer table.instTbl td.instKey, +div.ExecutionVisualizer table.classTbl td.classKey { + padding-top: 6px /*15px*/; + padding-bottom: 6px; + padding-left: 10px; + padding-right: 4px; + + text-align: right; +} + +div.ExecutionVisualizer table.dictTbl td.dictVal, +div.ExecutionVisualizer table.instTbl td.instVal, +div.ExecutionVisualizer table.classTbl td.classVal { + padding-top: 6px; /*15px*/; + padding-bottom: 6px; + padding-right: 10px; + padding-left: 4px; +} + +div.ExecutionVisualizer td.funcCod { + padding-left: 4px; +} + +div.ExecutionVisualizer table.classTbl td, +div.ExecutionVisualizer table.instTbl td { + border-bottom: 1px #888 solid; +} + +div.ExecutionVisualizer table.classTbl td.classVal, +div.ExecutionVisualizer table.instTbl td.instVal { + border-left: 1px #888 solid; +} + +div.ExecutionVisualizer table.classTbl, +div.ExecutionVisualizer table.funcTbl { + border-collapse: collapse; + border: 1px #888 solid; +} + +/* only add a border to dicts if they're embedded within another object */ +div.ExecutionVisualizer td.listElt table.dictTbl, +div.ExecutionVisualizer td.tupleElt table.dictTbl, +div.ExecutionVisualizer td.dictVal table.dictTbl, +div.ExecutionVisualizer td.instVal table.dictTbl, +div.ExecutionVisualizer td.classVal table.dictTbl { + border: 1px #888 solid; +} + +div.ExecutionVisualizer .objectIdLabel { + font-size: 8pt; + color: #444; + margin-bottom: 2px; +} + +div.ExecutionVisualizer .typeLabel { + font-size: 8pt; + color: #555; + margin-bottom: 2px; +} + +div.ExecutionVisualizer div#stack, +div.ExecutionVisualizer div#globals_area { + padding-left: 10px; + padding-right: 30px; + + /* no longer necessary ... */ + /*float: left;*/ + /* border-right: 1px dashed #bbbbbb; */ +} + +div.ExecutionVisualizer div.stackFrame, +div.ExecutionVisualizer div.zombieStackFrame { + background-color: #ffffff; + margin-bottom: 15px; + padding: 2px; + padding-left: 6px; + padding-right: 6px; + padding-bottom: 4px; + font-size: 10pt; +} + +div.ExecutionVisualizer div.zombieStackFrame { + border-left: 1px dotted #aaa; + /*color: #c0c0c0;*/ + color: #a0a0a0; +} + +div.ExecutionVisualizer div.highlightedStackFrame { + background-color: #e2ebf6; + /*background-color: #d7e7fb;*/ + + /*background-color: #c0daf8;*/ + /*background-color: #9eeaff #c5dfea;*/ +} + +div.ExecutionVisualizer div.stackFrame, +div.ExecutionVisualizer div.highlightedStackFrame { + border-left: 1px solid #a6b3b6; +} + + +div.ExecutionVisualizer div.stackFrameHeader { + font-family: Andale mono, monospace; + font-size: 10pt; + margin-top: 4px; + margin-bottom: 3px; + white-space: nowrap; +} + +div.ExecutionVisualizer td.stackFrameVar { + text-align: right; + padding-right: 8px; + padding-top: 3px; + padding-bottom: 3px; +} + +div.ExecutionVisualizer td.stackFrameValue { + text-align: left; + border-bottom: 1px solid #aaaaaa; + border-left: 1px solid #aaaaaa; + + vertical-align: middle; + + padding-top: 3px; + padding-left: 3px; + padding-bottom: 3px; +} + +div.ExecutionVisualizer .stackFrameVarTable tr { + +} + +div.ExecutionVisualizer .stackFrameVarTable { + text-align: right; + padding-top: 3px; + + /* right-align the table */ + margin-left: auto; + margin-right: 0px; + + /* hack to counteract possible nasty CSS reset styles from parent divs */ + border-collapse: separate; + border-spacing: 2px; +} + +div.ExecutionVisualizer div#heap { + float: left; + padding-left: 30px; +} + +div.ExecutionVisualizer td.toplevelHeapObject { + /* needed for d3 to do transitions */ + padding-left: 8px; + padding-right: 8px; + padding-top: 4px; + padding-bottom: 4px; + /* + border: 2px dotted white; + border-color: white; + */ +} + +div.ExecutionVisualizer table.heapRow { + margin-bottom: 10px; +} + +div.ExecutionVisualizer div.heapObject { + padding-left: 2px; /* leave a TINY amount of room for connector endpoints */ +} + +div.ExecutionVisualizer div.heapPrimitive { + padding-left: 4px; /* leave some more room for connector endpoints */ +} + +div.ExecutionVisualizer div#stackHeader { + margin-bottom: 15px; + text-align: right; +} + +div.ExecutionVisualizer div#heapHeader { + /*margin-top: 2px; + margin-bottom: 13px;*/ + margin-bottom: 15px; +} + +div.ExecutionVisualizer div#langDisplayDiv { + text-align: center; + margin-top: 2pt; + margin-bottom: 3pt; +} + +div.ExecutionVisualizer div#langDisplayDiv, +div.ExecutionVisualizer div#stackHeader, +div.ExecutionVisualizer div#heapHeader { + color: #333333; + font-size: 10pt; +} + +div.ExecutionVisualizer #executionSlider { + /* if you set 'width', then it looks ugly when you dynamically resize */ + margin-top: 15px; + margin-bottom: 5px; + + margin-left: auto; + margin-right: auto; + + width: 95%; +} + +div.ExecutionVisualizer #executionSliderCaption { + font-size: 8pt; + color: #666666; + margin-top: 15px; +} + +div.ExecutionVisualizer #executionSliderFooter { + margin-top: -7px; /* make it butt up against #executionSlider */ +} + + +/* darken slider handle a bit */ +div.ExecutionVisualizer .ui-slider .ui-slider-handle { + border: 1px solid #999; +} + + +/* for annotation bubbles */ + +/* For styling tricks, see: http://css-tricks.com/textarea-tricks/ */ +textarea.bubbleInputText { + border: 1px solid #ccc; + outline: none; + overflow: auto; /* to look pretty on IE */ + + /* make sure textarea doesn't grow and stretch the enclosing bubble */ + resize: none; + width: 225px; + max-width: 225px; + height: 35px; + max-height: 35px; +} + + +.ui-tooltip-pgbootstrap, +textarea.bubbleInputText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 9pt; + line-height: 1.3em; +} + + +/* modified version of Twitter bootstrap style by Philip Guo */ +.ui-tooltip-pgbootstrap{ + color: #333; + background-color: #ffffff; + + max-width: 250px; + min-width: 10px; + + border: 2px solid #4284D3; + + cursor: pointer; + + *border-right-width: 2px; + *border-bottom-width: 2px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + /* way too poofy ... + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + */ + + -webkit-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.2); + + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + + .ui-tooltip-pgbootstrap .ui-tooltip-titlebar{ + font-size: 18px; + line-height: 22px; + + border-bottom: 1px solid #ccc; + background-color: transparent; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-content{ + padding: 5px /* 5px is minimum or else it might look ugly */ 8px; + } + + + .ui-tooltip-pgbootstrap .ui-tooltip-titlebar .ui-state-default{ + right: 9px; top: 49%; + border-style: none; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon{ + background: white; + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon{ + width: auto; + height: auto; + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .ui-tooltip-pgbootstrap .ui-tooltip-icon .ui-icon:hover{ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.ui-tooltip-pgbootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + + +.ui-tooltip-pgbootstrap-stub{ + border: 1px solid #999; + + /* + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + */ +} + +.ui-tooltip-pgbootstrap-RED { + border: 1px solid #e93f34; /* should match brightRed JavaScript variable */ + +} + + .ui-tooltip-pgbootstrap-stub .ui-tooltip-content{ + padding: 6px 9px; + } + + +div.ExecutionVisualizer .annotationText, +div.ExecutionVisualizer .vizDescriptionText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 11pt; + line-height: 1.5em; +} + +div.ExecutionVisualizer .vizTitleText { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 16pt; + margin-bottom: 12pt; +} + +div.ExecutionVisualizer div#vizHeader { + margin-bottom: 10px; + width: 700px; + max-width: 700px; +} + +/* prev then curr, so curr gets precedence when both apply */ +div.ExecutionVisualizer .highlight-prev { + background-color: #F0F0EA; +} + +div.ExecutionVisualizer .highlight-cur { + background-color: #FFFF66; +} + +div.ExecutionVisualizer .highlight-legend { + padding: 2px; +} + +/* resizing sliders from David Pritchard */ +.ui-resizable-e { + background-color: #dddddd; + width: 1px; + border: 3px solid white; +} + +.ui-resizable-e:hover { + border-color: #dddddd; +} + +div.ExecutionVisualizer div#rawUserInputDiv { + padding: 5px; + width: 95%; + margin: 5px auto; + text-align: center; + border: 1px #e93f34 solid; +} + +/* for pyCrazyMode */ + +/* prev then curr, so curr gets precedence when both apply */ +div.ExecutionVisualizer .pycrazy-highlight-prev { + background-color: #eeeeee; /*#F0F0EA;*/ + /* + text-decoration: none; + border-bottom: 1px solid #dddddd; + */ +} + +div.ExecutionVisualizer .pycrazy-highlight-cur { + background-color: #FFFF66; + /* aligned slightly higher than border-bottom */ + /* + text-decoration: none; + border-bottom: 1px solid #e93f34; + */ +} + +div.ExecutionVisualizer .pycrazy-highlight-prev-and-cur { + background-color: #FFFF66; + + text-decoration: none; + border-bottom: 1px solid #999999; +} + + +#optTabularView thead.stepTableThead { + background-color: #bbb; +} + +#optTabularView tbody.stepTableTbody { +} + +#optTabularView td.stepTableTd { + padding: 3px 10px; +} + + +/* BEGIN Java frontend by David Pritchard and Will Gwozdz */ + +/* stack and queue css by Will Gwozdz */ +div.ExecutionVisualizer table.queueTbl, +div.ExecutionVisualizer table.stackTbl { + background-color: #ffffc6; +} + +div.ExecutionVisualizer table.queueTbl, +div.ExecutionVisualizer table.stackTbl { + border: 0px solid black; + border-spacing: 0px; +} + +div.ExecutionVisualizer table.stackTbl td.stackElt, +div.ExecutionVisualizer table.queueTbl td.queueElt { + padding-left: 8px; + padding-right: 8px; + padding-top: 2px; + padding-bottom: 3px; + border-top: 1px solid #555555; + border-bottom: 1px solid #555555; + border-left: 1px dashed #555555; +} + +div.ExecutionVisualizer table.stackTbl td.stackFElt, +div.ExecutionVisualizer table.queueTbl td.queueFElt { + background-color: white; + border-top: 1px solid #555555; + border-bottom: 1px solid #555555; +} + +div.ExecutionVisualizer table.stackTbl td.stackLElt { + background-color: white; + border-left: 1px solid #555555; +} + +div.ExecutionVisualizer table.queueTbl td.queueLElt { + background-color: white; + border-top: 1px solid#555555; + border-bottom: 1px solid #555555; + border-left: 1px dashed #555555; +} + +/* This ensures a border is drawn around a dict + if its nested in another object. */ +div.ExecutionVisualizer td.stackElt table.dictTbl, +div.ExecutionVisualizer td.stackLElt table.dictTbl, +div.ExecutionVisualizer td.stackFElt table.dictTbl, +div.ExecutionVisualizer td.queueElt table.dictTbl, +div.ExecutionVisualizer td.queueLElt table.dictTbl, +div.ExecutionVisualizer td.queueFElt table.dictTbl { + border: 1px #888 solid; +} + +.symbolic { + font-size: 18pt; +} + +/* END Java frontend by David Pritchard and Will Gwozdz */ diff --git a/v3/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/v3/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 000000000..954e22dbd Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/v3/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 000000000..64ece5707 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/v3/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 000000000..abdc01082 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/v3/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 000000000..9b383f4d2 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/v3/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 000000000..a23baad25 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/v3/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 000000000..42ccba269 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/v3/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 000000000..39d5824d6 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/v3/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 000000000..f1273672d Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ diff --git a/v3/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/v3/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 000000000..359397acf Binary files /dev/null and b/v3/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ diff --git a/v3/css/ui-lightness/images/ui-icons_222222_256x240.png b/v3/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 000000000..b273ff111 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-icons_222222_256x240.png differ diff --git a/v3/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/v3/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 000000000..a641a371a Binary files /dev/null and b/v3/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ diff --git a/v3/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/v3/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 000000000..85e63e9f6 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ diff --git a/v3/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/v3/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 000000000..e117effa3 Binary files /dev/null and b/v3/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ diff --git a/v3/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/v3/css/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 000000000..42f8f992c Binary files /dev/null and b/v3/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ diff --git a/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css b/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css new file mode 100644 index 000000000..1bc08fb33 --- /dev/null +++ b/v3/css/ui-lightness/jquery-ui-1.8.21.custom.css @@ -0,0 +1,316 @@ +/*! + * jQuery UI CSS Framework 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/*! + * jQuery UI CSS Framework 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +/* pgbovine - switch border from #dddddd to #ccc */ +.ui-widget-content { border: 1px solid #ccc; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } + +/* pgbovine - eliminate hover colors */ +/* +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +*/ + +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*! + * jQuery UI Slider 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } diff --git a/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css b/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css new file mode 100644 index 000000000..f3988bcea --- /dev/null +++ b/v3/css/ui-lightness/jquery-ui-1.8.24.custom.css @@ -0,0 +1,335 @@ +/*! + * jQuery UI CSS Framework 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/*! + * jQuery UI CSS Framework 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +/* pgbovine - switch border from #dddddd to #ccc */ +.ui-widget-content { border: 1px solid #ccc; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } + +/* pgbovine - eliminate hover colors */ +/* +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +*/ + +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*! + * jQuery UI Resizable 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*! + * jQuery UI Slider 1.8.24 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } diff --git a/v3/css/x.png b/v3/css/x.png new file mode 100644 index 000000000..c11f7af69 Binary files /dev/null and b/v3/css/x.png differ diff --git a/v3/demo.html b/v3/demo.html new file mode 100644 index 000000000..d716ab7d5 --- /dev/null +++ b/v3/demo.html @@ -0,0 +1,48 @@ + + + + + + + Online Python Tutor embedding demo + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/v3/docs/chris-meyers.md b/v3/docs/chris-meyers.md new file mode 100644 index 000000000..d92ccbec7 --- /dev/null +++ b/v3/docs/chris-meyers.md @@ -0,0 +1,27 @@ +Starting in Summer 2013, Chris has been adding support for +[custom HTML rendering modules](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/html-rendering.md) +in Online Python Tutor. His first two modules were: + +- [htmlFrame.py](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/htmlFrame.py) +- [matrix.py](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/matrix.py) + + +### Chris Meyers short bio (Sep 2013) ### + +I have been a software engineer for most of my working life, primarily in the newspaper industry. I've recently retired and now live in both Eugene Oregon and Bremen Germany. + +I received a BA in Physics from the University of Oregon and later a Masters degree in Computer Science. + +I've been using Python since 1995 and it has been by far my favorite programming language +since then. At the newspaper where I worked (The Register Guard) we used it whenever we could, +and especially with tools such as Django. + +I have been part of the open source community. I was a co-author for the book ["How to Think like a Computer Scientist (Python)"](http://www.openbookproject.net/thinkcs/python/english2e/) +along with Allen Downey and Jeff Elkner in 2002. +I also have a web page [Python for Fun][p4f] aimed at intermediate programmers and students. + +[p4f]: http://www.openbookproject.net/py4fun + +This latest project with Philip has been fun and challenging. +Online Python Tutor has been a great success in helping people visualize code running and we hope this addition will help with the visualization of whole algorithms running as well. + diff --git a/v3/docs/developer-overview.md b/v3/docs/developer-overview.md new file mode 100644 index 000000000..5005d717d --- /dev/null +++ b/v3/docs/developer-overview.md @@ -0,0 +1,248 @@ +# Overview for Developers + +This document is a starting point for anyone who wants to hack on +Online Python Tutor (thereafter abbreviated as OPT). View it online at: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/developer-overview.md + +Look at the Git history to see when this document was last updated; the more time +elapsed since that date, the more likely things are out-of-date. + +I'm assuming that you're competent in Python, JavaScript, command-line-fu, and Google-fu, +and general [command-line BS](http://www.pgbovine.net/command-line-bullshittery.htm), +so I won't do much hand-holding in these directions. + +This guide isn't meant to be comprehensive; rather, it's just a starting point for learning about the code +and development workflow. You will undoubtedly still be confused about details after reading it, so +feel free to email philip@pgbovine.net if you have questions. + + +## Getting Started: Running OPT locally on your machine using Bottle: + +First install the [bottle](http://bottlepy.org/) micro web framework: + + easy_install pip + pip install bottle + +And then run: + + cd OnlinePythonTutor/v3/ + python bottle_server.py + +(Use `python3` if you want to test the Python 3 backend. Note that when you run bottle, you will **always trigger the backend for the version of Python used to invoke it**, so the Python 2/3 toggle selector on the frontend is meaningless. You will also not be able to test other language backends locally.) + + +If all goes well, when you visit this URL, you should see the Python Tutor visualizer: + + http://localhost:8003/visualize.html + +Note that you can run bottle with both Python 2 and 3. + +However, **only** run this app locally for testing, not in production, since all security checks are disabled. + + +## Overall system architecture + +OPT consists of a pure-Python backend and an HTML/CSS/JavaScript frontend. +Here is a typical user interaction sequence: + +1. The user visits [visualize.html](http://pythontutor.com/visualize.html) and types in Python code in the web-based text editor. +2. The user hits the "Visualize execution" button. +3. The OPT frontend sends the user's Python code as a string to the backend by making an Ajax GET request. +4. The backend executes the Python code under the supervision of the Python [bdb](http://docs.python.org/library/bdb.html) debugger, produces an execution trace, and sends that trace back to the frontend in JSON format. +5. The frontend switches to a visualization display, parses the execution trace, and renders the appropriate stack frames, heap objects, and pointers. +6. When the user interacts with the frontend by stepping through execution points, the frontend renders the proper data structures **without** making another subsequent call to the backend. + +All relevant files are located in `OnlinePythonTutor/v3/`, since v3 is the currently-active version. + +The frontend consists of: +``` +visualize.html +css/opt-frontend.css +js/opt-frontend.js +css/pytutor.css +js/pytutor.js + +``` + +`pytutor.[js|css]` contain the bulk of the OPT frontend code. In theory, you should be able to **embed** an +OPT visualization into any webpage with one line of JavaScript that looks like: + +```javascript +var v = new ExecutionVisualizer(domRoot, traceFromBackend, optionalParams); +``` + +Thus, the design of `pytutor.[js|css]` is meant to be as modular as possible, which means abstracting +everything in an `ExecutionVisualizer` class. This way, you can create multiple visualizer objects +to embed on the same webpage without them interfering with one another. + +`opt-frontend.[js|css]` contain code that is specific to the `visualize.html` page and doesn't make sense for, say, +embedding OPT visualizations into other webpages. + +The backend consists of: +``` +pg_logger.py - the main entry point to the OPT backend +pg_encoder.py - encodes the trace format into JSON to send to frontend +generate_json_trace.py - script to test the backend independent of the frontend +app.yaml, pythontutor.py - files for deploying on Google App Engine +web_exec.py - example CGI script for deploying backend on CGI-enabled webservers +``` + +The backend works with both Python 2 and 3. (Other language backends are located in [v4-cokapi/](https://github.com/pgbovine/OnlinePythonTutor/tree/master/v4-cokapi), not in v3/) + + +## Hacking the backend + +To modify the Python backend, you will mainly need to understand `pg_logger.py` and `pg_encoder.py`. + + +### Two quick tips for starters + +Since the backend's details might change, rather than documenting every last detail, I'd rather equip you with +the knowledge needed to experiment with the code yourself, since that knowledge is less likely to get outdated. + +First, run `generate_json_trace.py` to see the trace that the backend generates for a given input Python program. +This is the main way to do an "end-to-end" test on your backend modifications. For example, if you want the backend +to process a Python program stored in `example.py`, then run: + +``` +python generate_json_trace.py example.py +``` + +Doing so will print a JSON-formatted execution trace to stdout. +This data is exactly what the backend sends to the frontend. +(Actually not quite: The sent trace is actually compressed to eliminate all extraneous spaces and newlines. +But for testing purposes, I've made the trace more human-readable.) + +Second, when you're "print debugging" in the backend, you can't simply print to stdout, since `pg_logger.py` +*redirects* stdout to a buffer. Instead, you need to write all of your print statements as: + +```python +print >> sys.stderr, +``` + +so that the output goes to stderr. + +The easiest way to debug or investigate how some part of the code works is to **insert in print statements (to stderr) +and then run `generate_json_trace.py` on small code examples**. Trust me -- being able to do this is way more +effective than memorizing detailed documentation (which could be outdated by the time you read it). + + +### Backend control flow + +Let's now trace through a typical backend run to get a sense of how it works. + +The main entry point is this function in `pg_logger.py`: + +```python +def exec_script_str(script_str, cumulative_mode, finalizer_func): +``` + +`script_str` contains the entire string contents of the Python program for the backend to execute. +Ignore `cumulative_mode` for now (just set it to `False`). `finalizer_func` is the function to call +after the backend is done generating a trace. + +Let's look at how `generate_json_trace.py` calls `exec_script_str` (using a simplified version of its code): + +```python +# simplified version of generate_json_trace.py +import pg_logger, json + +def json_finalizer(input_code, output_trace): + ret = dict(code=input_code, trace=output_trace) + json_output = json.dumps(ret, indent=2) + print(json_output) + +pg_logger.exec_script_str(open("example.py").read(), False, json_finalizer) +``` + +In this simplified example, the script opens `example.py`, reads its contents into a string, and passes that string +into `exec_script_str`. The finalizer function is `json_finalizer`, which takes two parameters -- +the original code from `example.py` (`input_code`) and the execution trace that it produced (`output_trace`) -- +inserts both into a dict, encodes that dict as a JSON object, and then prints that JSON object to stdout. +That's why when you run `generate_json_trace.py`, its output is a JSON object printed to stdout. + +Note that if you pass in another finalizer function, then you can do other actions like postprocessing +the output trace or saving it to a file rather than printing to stdout. + +Now that you know what's passed into `exec_script_str` and what comes out of it, let's dive into its guts +to see how that all-important execution trace (`output_trace`) is produced. +Here is the code for `exec_script_str` in `pg_logger.py`: + +```python +def exec_script_str(script_str, cumulative_mode, finalizer_func): + logger = PGLogger(cumulative_mode, finalizer_func) + try: + logger._runscript(script_str) + except bdb.BdbQuit: + pass + finally: + logger.finalize() +``` + +This code creates a `PGLogger` object then calls its `_runscript` method to run the user's program (from `example.py`), +which is passed in as `script_str`. +After execution finishes (possibly due to a bdb-related exception), the `finalize` method is run. This method +does some postprocessing of the trace (`self.trace`) and then finally calls the user-supplied `finalizer_func`. + +`PGLogger` is a subclass of [bdb.Bdb](http://docs.python.org/library/bdb.html#bdb.Bdb), +which is the Python standard debugger module. It stores lots of fields to record what +is going on as it executes the program that the user passed in as `script_str`. Its `_runscript` method +is where the action starts. This method first sets up a sandboxed environment containing a restricted +set of builtins (`user_builtins`) and redirection for stdout (`user_stdout`), and then executes this code: + +```python +try: + self.run(script_str, user_globals, user_globals) +except SystemExit: + raise bdb.BdbQuit +``` + +The `self.run` method is actually [inherited from bdb.Bdb](http://docs.python.org/library/bdb.html#bdb.Bdb.run). +It executes the contents of `script_str` in a modified global environment (`user_globals`). + +Ok, the debugger has just started executing the program that the user passed in (from `example.py` in our example). +What happens now? Here's where the magic happens. Look at the methods called +`user_call`, `user_return`, `user_exception`, and `user_line`. Again, those are all +[inherited from bdb.Bdb](http://docs.python.org/library/bdb.html#bdb.Bdb); +take a minute to read up on what they're supposed to do. + +As the user's program is running, bdb +will pause execution at every function call, return, exception, and single-line step (most common). +It then transfers control over to the respective handler method. +Since `PGLogger` overrides those handler methods, it can hijack control at +crucial points during program execution to do what it needs to do. + +Since `PGLogger` does similar things regardless of why execution was paused (function call, return, exception, or single-line step), +all handlers dispatch to a giant method called `interaction`. + +During a call to `interaction`, the backend collects the state of the stack and all run-time data and then creates a +trace entry (`trace_entry` dict). Then it appends `trace_entry` onto `self.trace`: + +```python +self.trace.append(trace_entry) +``` + +Every time bdb pauses the user's program's execution and dispatches to `interaction` in `PGLogger`, one new trace +entry is created. At the end of execution, `self.trace` contains as many trace entries as there were "steps" +in the user's program execution. Each step more-or-less corresponds to one line being executed. +(To guard against infinite loops, `PGLogger` terminates execution when `MAX_EXECUTED_LINES` steps have been executed.) + +### Execution Trace Format + +A lot of complicated stuff happens within `interaction` to grab a snapshot of the execution state and encode +it into an execution trace entry. Insert a bunch of print statements (remember, to stderr) to get a sense of what's going on. + +In addition, I've written up a separate document describing the exact format of an execution trace: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/opt-trace-format.md + + +### Backend regression tests + +To run the Python backend tests, cd into `v3/tests/` and run `run-all-tests.sh` -- you will need the exact Python versions mentioned in the script itself. Run `python golden_test.py` to see individual test case options. Note that there might be minor diffs that show up on your machine, so the test suite isn't completely deterministic. + + +## Hacking the frontend + +(TODO: write me sometime!) diff --git a/v3/docs/embedding-HOWTO.md b/v3/docs/embedding-HOWTO.md new file mode 100644 index 000000000..7927cbe27 --- /dev/null +++ b/v3/docs/embedding-HOWTO.md @@ -0,0 +1,86 @@ +# Embedding Online Python Tutor visualizations + +This document is a starting point for anyone who wants to embed +Online Python Tutor (OPT) visualizations in their webpage. View it online at: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/embedding-HOWTO.md + +Look at the Git history to see when this document was last updated; the more time +elapsed since that date, the more likely things are out-of-date. + +I'm assuming that you're competent in Python, JavaScript, command-line-fu, and Google-fu, +and general [command-line BS](http://www.pgbovine.net/command-line-bullshittery.htm), +so I won't do much hand-holding in these directions. + +This guide isn't meant to be comprehensive; you will undoubtedly still +be confused about details after reading it, so feel free to email +philip@pgbovine.net if you have questions. + + +## iframe embedding + +An easy (although somewhat limited) way to embed an OPT visualization on your website is to enclose it within an [iframe](http://www.w3schools.com/tags/tag_iframe.asp). + +If you generate a visualization (e.g., click here) +and then click the "Generate embed code" button at the bottom of the page, the following code will be generated: + +```html + +``` + +If you copy-and-paste the above code into your HTML webpage, then it will embed the given visualization as an iframe. + +See `v3/iframe-embed-demo.html` for a working demo showing several embedded iframes ([online here](http://pythontutor.com/iframe-embed-demo.html)). + + +### iframe embedding parameters + +You can customize the iframe's size by adjusting the `width` and `height` parameters. All other parameters are passed +after the hash mark (`#` character) in the `src=` URL string. Note that OPT uses the hash mark rather than the usual +question mark `?` query string. Here are the currently-supported parameters: + +- `code` - The Python code to visualize (mandatory: URL-encoded string) +- `py` - Python interpreter version (mandatory: `2` for Python 2.7 or `3` for Python 3.2) +- `verticalStack` - Set to `true` if you want the code and visualization to stack atop one another (optional) +- `curInstr` - A (zero-indexed) integer of the execution point to directly jump to in the visualization (optional) +- `cumulative` - Set to `true` if you want exited functions to be displayed (optional) + + + +## Direct embedding + +The iframe-based approach has some limitations (e.g., hard to dynamically resize the enclosing iframe, +cannot run while offline, limited parameter choices). +Here are instructions for a more powerful but harder-to-use alternative -- directly embedding visualizations. + + +### High-Level Overview + +To directly embed a visualization, you: + +1. Run the target Python program offline to generate an execution trace, which is one (really, really long) +string representing a JavaScript (JSON) object. +2. Copy that long string into a JavaScript .js file. +3. Include some other stuff in your .js file and then embed it within your HTML webpage. + +Note that the embedded visualization is **read-only** -- that is, the user can interact with the visualization +by stepping forward and backward, but they cannot edit the code. +If the user wants to click the 'Edit code' button to edit the code, then they are +brought to the [code editor page](http://pythontutor.com/visualize.html). + +Also, note that the visualization is run client-side; thus, after the user loads the webpage (from the Internet +or, say, a USB drive), they can play with the visualization without an Internet connection. + +Finally, multiple visualizations can be embedded in a single HTML webpage, although you need to be careful +to redraw the SVG arrows when page elements are resized or moved. + +### The Nitty-Gritty + +Let's attempt to go [literate programming](http://en.wikipedia.org/wiki/Literate_programming) style now ... load up +[embedding-demo.html](http://pythontutor.com/embedding-demo.html) in +your browser to see a demo. And then view its [source code](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/embedding-demo.html) and follow the instructions there, +which should then lead you to [`v3/embedding-demo.js`](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/embedding-demo.js). + +Everything you need to know should be in the demo code! diff --git a/v3/docs/embedding-HOWTO.txt b/v3/docs/embedding-HOWTO.txt new file mode 100644 index 000000000..49944948d --- /dev/null +++ b/v3/docs/embedding-HOWTO.txt @@ -0,0 +1,4 @@ +This document has been moved to embedding-HOWTO.md + +View it online at: +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/embedding-HOWTO.md diff --git a/v3/docs/html-rendering.md b/v3/docs/html-rendering.md new file mode 100644 index 000000000..f115a2240 --- /dev/null +++ b/v3/docs/html-rendering.md @@ -0,0 +1,74 @@ +# HTML rendering in Online Python Tutor + +As of May 2013, Online Python Tutor contains an experimental magic +`setHTML` function that lets your scripts render HTML to the canvas (and +accompanying `setJS` and `setCSS` functions for JavaScript and CSS, +respectively). + +Here is a +simple example +of `setHTML` at work. + +Let's step through the code: + + + # display a bunch of big red numbers + setCSS('.bigText {font-size: 80pt; color: red;}') + + for i in range(5): + setHTML('
%d
' % i) + + # now display an image from my website + setHTML('') + + +The first call to `setCSS` defines a `bigText` CSS class with a giant font and red color. +Then the code iterates through a loop five times and calls `setHTML` to set the HTML canvas +to contain a single `div` of class `bigText` with the loop index as its contents. Finally, +the code makes one final `setHTML` call to set the canvas to an image from my personal website. + + +## Creating external modules + +It's really tedious to write out all of the HTML rendering code in the OPT input text box. +Thus, the best way to take advantage of HTML rendering is to define a custom +module to encapsulate all of the rendering code. Here is an example module: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/htmlexample_module.py + +This example module defines a `ColorTable` class that represents a table whose cells +can be filled in with colors. Each time the `render_HTML` method is called, OPT +renders the contents of the table as an HTML table whose cells are filled in with +the respective colors. + +Here is +an example +of this module in action: + + from htmlexample_module import ColorTable + + t = ColorTable(3, 4) + + t.set_color(0, 0, 'red') + t.render_HTML() + + t.set_color(1, 1, 'green') + t.render_HTML() + + t.set_color(2, 2, 'blue') + t.render_HTML() + + for i in range(3): + for j in range(4): + t.set_color(i, j, 'gray') + t.render_HTML() + +If you step through the code in OPT, you'll see an HTML table appearing below the code +and getting gradually filled in with colors. + +To get this module working with OPT, you need to first add its filename +(e.g., 'htmlexample_module') to the CUSTOM_MODULE_IMPORTS variable in pg_logger.py, approximately here: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/pg_logger.py#L119 + +To create your own custom modules, simply follow the conventions I've laid out with `htmlexample_module.py`! diff --git a/v3/docs/make_visualizations.md b/v3/docs/make_visualizations.md new file mode 100644 index 000000000..55aeba6ca --- /dev/null +++ b/v3/docs/make_visualizations.md @@ -0,0 +1,98 @@ +[This document was written by Peter Robinson (pjr@itee.uq.edu.au), the creator of make_visualizations.py] + +# Using make_visualizations.py to build visualization embeddings + +The program `make_visualizations.py` can be used to simplify the task of building visualization embeddings. The user can describe the required details as a `.json` file (a 'Makefile') and `make_visualizations.py` is a 'make' program that will build all the required visualizations and supporting bookkeeping. + +For an example of how to use this program and to embed visualizations we will assume that the current working directory contains the `.html` files that will have visualizations embedded in them, that the sub-directory `examples` contains all the python files that are to be visualized and that the sub-directories `js` and `css` have been created. Further assume `$OPT` is the directory containing the OPT release. + +The first step is to copy across some `.js` files and `.css` files. + + cp -r $OPT/js/* js + cp -r $OPT/css/* css + +The next step is to create the Makefile - say `make_viz.json` and to add the required information to the file. An example of such a file is given below. The required visualizations can be built as follows. + + python $OPT/make_visualizations.py make_viz.json + +Calling this again will rebuild everything. Alternatively, the program can be used to build visualizations for particular `.html` files listed in `make_viz.json` by listing them at the end of the command. For example + + python $OPT/make_visualizations.py make_viz.json file1.html file3.html + +For the example we assume the `.html` files are `file1.html`, `file2.html` and `file3.html` and that `file1.html` will have visualizations for `prog1_1.py` and `prog1_2.py`; `file2.html` will have a visualization for `prog2_1.py`; and `file3.html` will have a visualization for `prog3_1.py`. Further we assume that a local OPT server has been set up at the URL http://my.local.server/visualize.html. + +The following is a possible example for `make_viz.json` + + { + "visualizer_url": + "http://my.local.server/visualize.html", + + "default_viz_config": + { + "embeddedMode": true, + "codeDivWidth": 500 + }, + + "file1.html": + [ + "js/file1.js", + { + "examples/prog1_1.py":{}, + "examples/prog1_2.py":{"codeDivWidth": 400} + } + ], + + # hash to end of line is a comment + + "file2.html": + [ + "js/file2.js", + { + "examples/prog2_1.py":{} + } + ], + + "file3.html": + [ + "js/file3.js", + { + "examples/prog3_1.py":{"codeDivWidth": ""} + } + ] + } + +The first entry specifies the location of the server. If this is not present, the default is http://pythontutor.com/visualize.html. + +The second entry is the default configuration for the visualization paramenter used for the given html files. If this is not present the visualization parameters are set to the system defaults. + +All other top-level entries are for the `.html` files. The information for a given `.html` file consists of a `.js` file in which to put the trace and other bookkeeping information and a dictionary containing information for each program. The key is the file and the value is for visualization parameters. Any parameters given here override the corresponding value for the parameter in `default_viz_config`. The special value of the empty string removes that parameter from `default_viz_config`. In this example, when visualizing `prog1_2.py`, the code textbox width will be reduced to 400 pixels and for `prog3_1.py`, the code textbox width will be set to the system-wide default. + +If you already have a visualization set up and you would like to use this approach you will need to remove the OPT dependencies before `` in the `.html` file. When you then run the 'make' program it will re-introduce the dependencies in such a way that subseqent makes will replace this information with the updated information. + +At the end of the dependencies information injected into the `.html` file is a comment containing div entries that you can cut-and-paste into the position within the `.html` file where you would like the visualization to appear. The Makefile does not know where this is to be added and so this step needs to be done manually. Re-making this file will not remove this infomation from the body of the file. So, for example, in the header of `file3.html` you should find +the following. + + + + +For reference, we list the possible visualization parameters (with system-wide defaults - based on comments in `pytutor.js`) below. + +- heightChangeCallback: the function to call whenever the height of the visualization changes. If using the make program this is hard-wired in and can't be changed. +- updateOutputCallback: the function to call before rendering output. Disabled for the make program. +- executeCodeWithRawInputFunc: function to call when you want to re-execute the given program with some new user input. Disabled for the make program. +- embeddedMode: if true, it is a shorthand for hideOutput = true, allowEditAnnotations = false (default : false) +- startingInstruction: the trace entry to start execution at (0-indexed) (default : 0). +- verticalStack: if true then place code display above visualization, else place side-by-side (default: false) +- jumpToEnd: if true jump to the end of execution - the same as setting startingInstruction to the last trace entry (default:false). +- codeDivWidth: the width of the code text window in pixels (default : 350). +- codeDivHeight: the height of the code text window in pixels (default : 400). +- hideOutput: hide "Program output" display (default : false). +- editCodeBaseURL: the URL to visit when the user clicks 'Edit code'. +- allowEditAnnotations: allow user to edit per-step annotations (default: false). +- disableHeapNesting: if true, then render all heap objects at the top level (i.e., no nested objects) (default : true). +- drawParentPointer: if true, then draw environment diagram parent pointers for all frames (default : true). +- textualMemoryLabels: render references using textual memory labels rather than as jsPlumb arrows (default : true). +- showOnlyOutputs: show only program outputs and NOT internal data structures (default : true). diff --git a/v3/docs/opt-graphterm.md b/v3/docs/opt-graphterm.md new file mode 100644 index 000000000..e201f593b --- /dev/null +++ b/v3/docs/opt-graphterm.md @@ -0,0 +1,35 @@ +R. Saravanan from Texas A&M has integrated Online +Python Tutor with his [GraphTerm](http://code.mindmeldr.com/graphterm/) +project! + +Here is a brief message from him on how to set it up: + +------ + +I teach python to undergrads and my students have enjoyed using +PythonTutor to trace programs. I have modified PythonTutor slightly to +work within GraphTerm, which is a graphical terminal for unix computers +(written in python, of course!). So if you use the command line, you can +now trace your programs visually within the terminal. + +To install it and run it, use the following three commands on a Mac or Linux system: + + sudo easy_install graphterm + sudo gterm_setup # To setup the toolchain + gtermserver --terminal + +This will run the GraphTerm server and open up a browser terminal +window. In that window, you can `cd` to the directory containing the +program you want to trace (say `example.py`), and then type: + + gtutor example.py | gframe -f + +The first command outputs the HTML created by PythonTutor and the second +command renders it within the terminal (in an iframe). Click on the X on +the top right to end tracing. You can find more information in the +[GraphTerm project +page](http://code.mindmeldr.com/graphterm/start.html#code-tracing-using-python-tutor) + +You can see a live demo of Inline PythonTutor in this [older YouTube +video](http://youtu.be/jmrmjC1VYsc) (about 1:20 after the start) + diff --git a/v3/docs/opt-tabular-view.jpg b/v3/docs/opt-tabular-view.jpg new file mode 100644 index 000000000..fdb00a5c4 Binary files /dev/null and b/v3/docs/opt-tabular-view.jpg differ diff --git a/v3/docs/opt-trace-format.md b/v3/docs/opt-trace-format.md new file mode 100644 index 000000000..c1d733214 --- /dev/null +++ b/v3/docs/opt-trace-format.md @@ -0,0 +1,814 @@ +# Execution Trace Format + +This document describes the execution trace format that serves as the +interface between the frontend and backend of Online Python Tutor +(thereafter abbreviated as OPT). + +It is a starting point for anyone who wants to create a different +backend (e.g., for another programming language) or a different frontend +(e.g., for visually-impaired students). View it online at: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/opt-trace-format.md + +Look at the Git history to see when this document was last updated; the +more time elapsed since that date, the more likely things are +out-of-date. + +I'm assuming that you're competent in Python, JavaScript, command-line-fu, and Google-fu, +and general [command-line BS](http://www.pgbovine.net/command-line-bullshittery.htm), +so I won't do much hand-holding in these directions. + + +## Trace Overview + +Before reading this file, I suggest for you to first read the Overview for Developers doc: +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/developer-overview.md + +Pay particular attention to what `generate_json_trace.py` is and how to run it: +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/developer-overview.md#two-quick-tips-for-starters + +Let's start with a simple example. Create an `example.py` file with the following contents: +```python +x = 5 +y = 10 +z = x + y +``` + +Now run: +``` +python generate_json_trace.py example.py +``` + +and you should see the following output: +```javascript +{ + "code": "x = 5\ny = 10\nz = x + y\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "z": 15 + }, + "heap": {}, + "line": 3, + "event": "return" + } + ] +} +``` + +Recall that when OPT is deployed on a webserver, the backend generates this trace and sends it to the frontend, +where it will be turned into a visualization. + +[Click here](http://pythontutor.com/visualize.html#code=x+%3D+5%0Ay+%3D+10%0Az+%3D+x+%2B+y&mode=display&cumulative=false&py=2&curInstr=0) +to see the visualization of this trace (open it in a new window if possible). +Note that the trace object contains *all* of the information required to create this visualization. + +The trace is a JSON object with two fields: `code` is the string contents of the code +to be visualized, and `trace` is the actual execution trace, which consists of a list of execution points. + +In the above example, `trace` is a list of four elements since there are four execution points. +If you step through the visualization, you'll notice that there are exactly four steps, one for each +element of the `trace` list. +(Sometimes the frontend will filter out some redundant entries in `trace`, but a simplifying assumption +is that `trace.length` is the number of execution steps that the frontend renders.) + +Ok, still with me? Let's now dig into what an individual element in `trace` looks like. + +## Interlude: Viewing a trace in the OPT frontend + +To view any trace locally on your computer without setting up a Webserver, load up [`v3/demo.html`](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/demo.html) in your browser. +Now create a trace file called `v3/test-trace.js` containing a single trace variable set to the value of your desired trace object: + +```javascript +var trace = { ... your trace object ... }; +``` + +[Here is the example test-trace.js in the repo.](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/test-trace.js) + +Now reload `v3/demo.html`, and if everything works out, it will create a new visualization using the trace in the `trace` +variable from `v3/test-trace.js`. I use this technique as a quick way of testing out what different traces look like +without setting up a server. + +**If you open up your browser console, you will see the current trace entry being printed out as you step through the +visualization, which can help you debug.** + +P.S. to create a trace file in the appropriate format using the default OPT Python backend, run `generate_json_trace.py` using the `--create_jsvar` option: + +```python +python generate_json_trace.py --create_jsvar=trace example.py > test-trace.js +``` + + +## Execution Point Objects + +The central type of object in a trace is an "execution point", which represents the state of the computer's (abstract) +memory at a certain point in execution. Recall that a trace is an ordered list of execution points. + +The key concept to understand is that the frontend renders an execution point by simply looking at +the contents of the corresponding execution point object, **without consulting any of its neighbors**. + +Ok, let's now look at the **four** execution points in our above example in order. The first point +is what the frontend visualizes when it says "Step 1 of 3": + +```javascript + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + } +``` + +This is pretty much what an "empty" execution point object looks like. `line` shows the line number of the +line that is *about to execute*, which is line 1 in this case. And `event` is `step_line`, which indicates +that an ordinary single-line step event is about to occur. `func_name` is the function that's currently +executing: In this case, `` is the faux name for top-level code that's not in any function. +All of the other fields are empty, and if you look at the visualization, nothing is rendered in the "Frames" +or "Objects" panes. + +Ok now let's look at the second point, which corresponds to the frontend visualization when it says +"Step 2 of 3": + +```javascript + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + } +``` + +Ok note that `line` is now 2, which means that line 2 is *about* to execute (yes, this convention is a bit confusing, +but it's what the bdb debugger gives us). `globals` is now populated with one key-value pair: the global variable +`x` has a value of `5`. That makes sense since we just executed line 1 (from the previous execution point), +which was the code `x = 5`. If you look at the +[visualization at this step](http://pythontutor.com/visualize.html#code=x+%3D+5%0Ay+%3D+10%0Az+%3D+x+%2B+y&mode=display&cumulative=false&py=2&curInstr=1), +you'll see that `x` has been assigned to `5`. + +Ok let's keep marching to the next execution point, which is the one that corresponds to "Step 3 of 3" +in the frontend: + +```javascript + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5 + }, + "heap": {}, + "line": 3, + "event": "step_line" + } +``` + +Now `line` is 3, because we're about to execute line 3 (we just executed lines 1 and 2). Notice that there is a +new key-value pair in`globals` showing that `y` has been assigned to `10`. No surprises here, since we just +executed the line `y = 10`. + +Ok now this is where I want to talk about `ordered_globals`, which is a list of global variables (i.e., +keys in `globals`) in the order that the frontend should visualize them. The backend appends variable +names in their order of appearance throughout execution. Why is this list necessary? Because `globals` +is an object whose keys are unsorted, so if you don't also keep an `ordered_globals` sorted list, +then the visualization might end up being jarring. For instance, at one execution point, it might +render `x` and then `y`, and at the next execution point, it might render `y` and then `x`, thereby +causing the visualization to "jitter" unnecessarily. And I've found that it looks aesthetically pleasing +when variables are sorted in their order of appearance as you step forwards through execution. + +Still with me? Ok, let's get to the final execution point, which corresponds to the frontend displaying +"Program terminated" ([click here](http://pythontutor.com/visualize.html#code=x+%3D+5%0Ay+%3D+10%0Az+%3D+x+%2B+y&mode=display&cumulative=false&py=2&curInstr=3) +to jump directly there). + +```javascript + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "z": 15 + }, + "heap": {}, + "line": 3, + "event": "return" + } +``` + +This time, the event is a `return`, which signifies "returning" from the top-level module code (meaning the program +has terminated). Note that now there is another new variable `z`, which is bound to `15` since `z = x + y` just executed. +Note that, again, `ordered_globals` shows all three variables in their order of appearance. + +Ok, that's it for the basic tour. Next let's talk about what happens when the `heap` field isn't empty. + + +## Heap Objects + +The previous example contained only primitive values that JSON could encode directly within the `globals` object. +JSON natively supports numbers, strings, and boolean values (which map well to Python's "primitive" data types). +But what happens when the user's program contains compound +Python data types such as lists, tuples, dicts, sets, etc.? + +Create an `example.py` file with the following contents: +```python +x = [1, 2, 3] +y = ('Alice', 'Bob', 'Cindy') +z = {'carrot': 'vegetable', 'mouse': 'animal', 'rock': 'mineral'} +``` + +You should know how to generate a trace by now. The trace again contains **four** elements since there are +four execution steps (one for the very beginning of execution plus three executed lines). + +"Step 1 of 3" is boring since nothing is displayed. Let's jump to "Step 2 of 3" +(click here) + +The visualization now shows `x` pointing to a list containing `[1, 2, 3]`. This is the corresponding execution +point object: + +```javascript + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + } +``` + +Note that in `globals`, `x` now refers to a `["REF", 1]` object, which means a *reference* (pointer) to a heap +object with an ID of 1. + +Let's now look at `heap`, which is a mapping of heap object IDs to their contents. The current heap has one +object with an ID of 1. That object is a list of [1, 2, 3], which is encoded in JSON as: + +```javascript +["LIST", 1, 2, 3] +``` + +Let's skip forward to the end of execution ("Program terminated"): +click here + +Now there are three variables -- `x` points to a list, `y` points to a tuple, and `z` points to a dict. +This execution point object is getting kinda big: + +```javascript + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "TUPLE", + "Alice", + "Bob", + "Cindy" + ], + "3": [ + "DICT", + [ + "carrot", + "vegetable" + ], + [ + "mouse", + "animal" + ], + [ + "rock", + "mineral" + ] + ] + }, + "line": 3, + "event": "return" + } +``` + +Note that in `globals`, `x` refers to heap object 1, `y` to heap object 2, and `z` to 3. If you then look at `heap`, +you'll see that objects 1, 2, and 3 map to the corresponding list, tuple, and dict, respectively. + +Look at the comments at the top of `pg_encoder.py` to learn the JSON encoding formats for various Python data types: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/pg_encoder.py + +The basic idea behind the encoding format is that each compound object is encoded as a JSON list +where the first element is a string "tag" identifying its type (e.g., "LIST", "TUPLE", "DICT"). + +## Heap-to-Heap References + +In the above example, the heap objects contained only primitives (numbers and strings), which can be directly +encoded within those objects' representations in `heap`. + +But heap objects can themselves point to other heap objects. Let's look at the following example: + +```python +c = (1, (2, None)) +d = (1, c) +``` + +Jump to the end of execution and notice that: + +- `c` points to a tuple +- the second element of that tuple points to another tuple +- `d` points to a tuple whose second element points to what `c` points to + +Let's look at the execution point object that corresponds to this visualization: + +```javascript + { + "ordered_globals": [ + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "c": [ + "REF", + 1 + ], + "d": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + null + ], + "3": [ + "TUPLE", + 1, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "return" + } +``` + +What's going on here? Let's start with `globals` again. `c` points to heap object 1 (`["REF", 1]`), and `d` points +to heap object 3 (`["REF", 3]`). + +Let's now look at `heap`. Heap object 1 is: + +```javascript +["TUPLE", 1, ["REF", 2]] +``` + +What does this mean? It means that it represents a tuple whose first element is the number `1` and whose +second element is a reference (pointer) to heap object 2. + +Ok let's look at heap object 2: + +```javascript +["TUPLE", 2, null] +``` + +which corresponds to the Python tuple object `(2, None)`. + +Finally, heap object 3 (which `d` points to) is: + +```javascript +["TUPLE", 1, ["REF", 1]] +``` + +which corresponds to the Python object `(1, c)`. + +The ability to put "REF" objects inside of heap objects enables an arbitrary object graph to be +represented in the execution trace. + + +## Capturing `stdout` Output + +The `stdout` field in an execution point object represents the sum total of all output sent to stdout +so far during execution. For example, given this program: + +```python +print 1 +print "two" +print (3, 4, 5) +``` + +The complete trace object is: + +```javascript +{ + "code": "print 1\nprint \"two\"\nprint (3, 4, 5)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "1\ntwo\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "1\ntwo\n(3, 4, 5)\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "return" + } + ] +} +``` + +By now you should be getting pretty good at reading these objects :) + +Let's just focus on the `stdout` field at each execution point. Note that its contents start as an empty string +at the beginning of execution and then grow incrementally as more stuff is printed to stdout at each +subsequent execution point. If we grep for `stdout` in the trace, we see the following progression: + +```javascript + "stdout": "", + "stdout": "1\n", + "stdout": "1\ntwo\n", + "stdout": "1\ntwo\n(3, 4, 5)\n", +``` + +This isn't rocket science; but just be aware that `stdout` contains the cumulative contents of the stdout +buffer up to that execution point, not only what's been printed by the most recently executed line. + + +## Function Stack Frames + +So far our example programs contained no function calls. Let's now kick it up a notch and see an example +with function calls: + +```python +def foo(x, y, z): + return bar(x, y) + +def bar(a, b): + return baz(a) + +def baz(c): + return c + +result = foo(1, 2, 3) +``` + +Let's jump straight to Step 11 of 13, +when the program is about to return from the call to `baz`. + +Study the visualization for a bit. Note that there are four frames currently on the stack: globals, `foo`, `bar`, and `baz`. +Each frame consists of a name and a mapping between constituent variable names and values. There is a special +variable called `Return value` (stored in the trace as `__return__`), +which represents the value that `baz` is about to return to its caller. + +Let's now look at the execution point object corresponding to this visualization: + +```javascript + { + "ordered_globals": [ + "foo", + "bar", + "baz" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x", + "y", + "z" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "b": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a", + "b" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "c": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "c", + "__return__" + ] + } + ], + "globals": { + "bar": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ], + "baz": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "bar(a, b)", + null + ], + "3": [ + "FUNCTION", + "baz(c)", + null + ] + }, + "line": 8, + "event": "return" + }, +``` + +First things first: This is a `return` event occurring on line 8 (the `return c` line in `baz`). The currently-active +function is `baz`. There are three global variables: `foo`, `bar`, and `baz`, which all point to function objects +on the heap. + +The only new kind of field is `stack_to_render`, which is (unsurprisingly) a list of stack frames to render. +In this case, `stack_to_render` contains three elements -- the frames for `foo`, `bar`, and `baz`, in that exact order. +The frontend simply walks down `stack_to_render` and renders each frame in a similar way that it renders global variables. + +Let's now zoom in on one particular frame in `stack_to_render`. Here is the frame for `bar`: + +```javascript + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "b": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a", + "b" + ] + }, +``` + +For starters, `func_name` is the name of the function, and `is_highlighted` is true only if the current +frame is the "top-most" one (telling the frontend to highlight it in a brighter color). + +`encoded_locals` is a mapping from local variable names to their values, similar to how `globals` +provides a mapping from global variable names to their values. + +`ordered_varnames` is an ordered list of keys from `encoded_locals`, usually sorted by order of appearance +during execution. The global analogue for this field is `ordered_globals`. (I suppose this field should be named +`ordered_locals`, but I haven't gotten around to renaming yet.) + +`frame_id` is an integer that *uniquely* identifies this frame; the first function call (of *any* function) gets +a frame ID of 1, and then subsequent calls get successively increasing frame IDs. + +`unique_hash` is a unique string that identifies this frame. For now, a simple way +to construct `unique_hash` is by concatenating the frame's function name with `frame_id`. +Note that `unique_hash` seems redundant with `frame_id`, since the latter is already unique. +However, you'll see in the "Closures and Zombie Frames" section why `unique_hash` is required. + +Finally, ignore `is_parent`, `is_zombie`, and `parent_frame_id_list` for now. We'll cover those in the more advanced +"Closures and Zombie Frames" section below. + +## Event types + +The `event` field can either be: + +- `step_line` - ordinary single step. most trace entries will be of this type. +- `call` - first line during an executed function call; very important to match with corresponding `return` for visualization to work properly ... every frame should have matching `call` and `return` entries. +- `return` - about to return from a function, usually the `__return__` value is set at this point in the proper stack frame entry. +- `exception` and `uncaught_exception` - when an exception happens - the `exception_msg` field should be set to a reasonable error message. use `uncaught_exception` at the top-level of the tracer to indicate what happens when the user's program itself didn't catch the exception, and a regular `exception` when the user's program throws an exception (which might be caught in another part of their program). If the trace has exactly 1 entry and it's an `uncaught_exception`, then the OPT frontend doesn't switch to the visualization at all ... instead it displays a "syntax error"-like thingy in the code editor. It will highlight the faulting line, indicated by the `line` field and display `exception_msg` there. So if you want to indicate a syntax error, then create a trace with exactly ONE entry that's an `uncaught_exception`. (If there's more than one trace entry and the last one happens to be `uncaught_exception`, then right now OPT *still* won't switch to the visualization and instead issue an error message. TODO: figure out what's a more desirable behavior here.) +- `instruction_limit_reached` - if you want to cap execution at a certain limit (e.g., 300 executed steps), issue this special event at the end. fill in the `exception_msg` field to say something like "(stopped after N steps to prevent possible infinite loop)" + + +## Closures and Zombie Frames (advanced) + +As soon as a function becomes the parent of another function (i.e., a nested function is defined inside of it), set the `is_parent` field of its stack entry to `true`. Also change its `unique_hash` by appending `_p` to it. The reason why we want to change `unique_hash` is that we want the frontend to *refresh* its display, and d3 might not refresh if it sees that the hash is identical to the prior frame. Conceptually, we want `unique_hash` to be different for a function before and after it turns into the parent of another function since we want to display it differently. + +For example, when function `foo` is executing, its frame will have `is_parent=false` and `unique_hash = foo_f1` (or something similar) when its first two lines are running to define `x` and `y`, respectively. Then when its third line executes, that defines `bar` as a nested function within itself, so at that step, `foo` should have `is_parent=true` and `unique_hash = foo_f1_p` (or something similar). + +```python +def foo(y): + x = 10 + y = 20 + def bar(x): + return x + y + +foo(1) +``` + +[TODO: talk about `parent_frame_id_list`] + +[TODO: talk about appending `_z` onto `unique_hash` when the frame becomes a zombie.] + +[TODO: IMPROVE ME!] + + +# Notes: Potential optimizations + +The default trace format is completely unoptimized. It's designed so as to be "memoryless" -- i.e., a frontend can render an execution state by simply reading that entry and not any of its neighbors. + +However, the `stdout` field can often take up A LOT OF SPACE since it's "cumulative" -- i.e., at each step, `stdout` represents the entire contents of the `stdout` buffer, not simply what's been printed out in the current step. Thus, it suffers from N^2 space explosions. Even a simple program like this one prints out an ENORMOUS amount to stdout: + +```python +choices = ['pizza', 'pasta', 'salad', 'nachos'] +for i in enumerate(choices): + print choices # if you comment this out, the trace is much smaller + choices.append(i) +``` + +Thus, this is one target for optimization if deemed necessary down the line. However, I'm hesitant to optimize the trace since it makes trace-handling code in the frontend and backend more complicated :/ diff --git a/v3/docs/project-ideas.md b/v3/docs/project-ideas.md new file mode 100644 index 000000000..bc723adec --- /dev/null +++ b/v3/docs/project-ideas.md @@ -0,0 +1,428 @@ +# Project Ideas + +This (messy!) document provides an overview of some project ideas for extending +Online Python Tutor (thereafter abbreviated as OPT). View it online at: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/project-ideas.md + +Look at the Git history to see when this document was last updated; the more time +elapsed since that date, the more likely things are out-of-date. + +Email philip@pgbovine.net if you're interested in working on anything +here, or if you have other project ideas. + + +## Stylistic + +### Beautiful print-outs of OPT visualizations + +A lot of instructors want to print out their OPT visualizations to make handouts or lecture notes +for students. +However, the default CSS is optimized for on-screen viewing and not for printing, +so when you try to print the diagrams, they look ugly and unreadable. + +The project involves creating a custom CSS optimized for printing, especially on black-and-white printers. +Here is an example how-to guide to get started creating a CSS print style sheet ... +http://coding.smashingmagazine.com/2011/11/24/how-to-set-up-a-print-style-sheet/ + +Another idea is to get OPT to output SVG, PDF, or another +printer-friendly format. + + +### Responsive web design for OPT UI + +This is a good project for someone interested in visual and web design. + +Implement the principles of [responsive web design](http://en.wikipedia.org/wiki/Responsive_Web_Design) +so that OPT visualizations (and the surrounding user interface) look good on displays of many different sizes +ranging from smartphones to tablets to laptops to giant desktop monitors. + + +## Frontend + +### IPython (Jupyter) Notebook integration + +It would be awesome to integrate OPT with the [IPython Notebook](http://ipython.org/notebook.html) so that visualizations +can be displayed inline within a notebook using, say, a `%visualize` magic keyword. + +In late 2012, I started messing around with a prototype but didn't get too far. + +Sep 2013: I've created a first prototype integrating the [IPython shell with OPT](https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/opt-ipy.py) but not the notebook yet. + + +### Rich user input widgets + +Right now Online Python Tutor takes only code as input. However, it would be great to create widgets that allow +the user to input data into their code. That way, they can visualize the same code executing on different data +without changing the code. Currently, the only way to do this is to +"hard-code" the input data as global constants, which is cumbersome. + +Here are some examples of input widgets: + +- Text input widget to simulate stdin. This could be used with raw_input()/input() + +- Interactive widget to draw mathematical graphs (e.g., nodes and edges); useful for visualizing graph/tree manipulation algorithms +- A 2-D canvas where the user can draw points and lines in a coordinate system; useful for visualizing simple computational geometry algorithms +- A 2-D matrix of numbers or colored blocks for, say, a PacMan world +- Drag and drop an image; useful for visualizing image manipulation algorithms +- A text box that represents a file on the filesystem. Imagine a web-based I/O simulator where there would be a text box simulating a file object, and then I/O calls such as open, readline, etc. would be intercepted and visualized as iterating (pointing) to the file object one line at a time, reading each line into a string, etc. Writing into a file can also be visualized in this way too. And seeking, overwriting, appending, etc. + + +### Custom data structure visualizations + +Right now Online Python Tutor can render only basic Python data structures. + +While this is sufficient for teaching introductory CS courses, intermediate and advanced CS students must learn +algorithms involving more sophisticated data structures such as binary trees and graphs. +The goal of this project is to create a set of effective custom renderers for data structures +such as: + +- trees (maybe see [twyg library](http://www.johnnovak.net/twyg/quickstart/) for inspiration? or GraphViz, or even d3?) +- graphs +- numerical matrices +- simple 2D graphical worlds (e.g., for Pac-Man or Conway’s Game of Life) +- rendering lists of numbers as bar/line graphs, charts, and other quantitative data visualizations (e.g., using Google Charts API) +- file objects +- DSL components such as logic gates for a logic simulator written in Python, or proof trees for formal logic courses +- compiler data structures such as parser states, parse tables, AST construction, code generators, etc. +- relational algebra diagrams for database courses +- embedded image files (e.g., inline PNG images) to visualize Guzdial et al.'s [Media Computation](http://coweb.cc.gatech.edu/mediaComp-teach) algorithms online + +These renderers will make Online Python Tutor useful in a far larger variety of CS courses and online textbooks +beyond CS0/CS1 sorts of intro classes. + +One ultimate goal is to make OPT capable of visualizing classic AI, algorithm, and compiler textbook algorithms +that otherwise would need to be tediously built as one-off special-case visualizations. + +From an email excerpt in May 2013: { +I recently added a feature to Online Python Tutor (OPT) that enables user programs to output HTML/CSS/JS, in addition to printing to stdout. Thus, if a program calls html_output(" ... "), when OPT steps over that line, it will render the HTML string in a div. This makes it possible to generate a wide array of visualizations in pure Python (by simply constructing strings that represent legal HTML/CSS/JS). + +For the file I/O example, I can imagine creating a special File class that implements "file-like" stream I/O methods. Then the user program might look like: + + import VisualFile + f = VisualFile() + for line in open(f): + + + +The class definition of VisualFile includes the proper HTML-generation code to render a pretty HTML representation of the file's contents. And when methods iterate over the file, it can render an HTML representation with certain lines or characters highlighted to represent, say, the current file pointer position, etc. +} + + +There are (at least) two main ways to implement this feature: + +- Add custom data types to the trace and have the frontend render them + specially using JS visualization libraries such as d3. + +- Take advantage of OPT's (still-undocumented) ability to print + arbitrary HTML/CSS/JS to the canvas (just like how it can print stdout + output to a text box). This enables us to create custom data structure classes + with printHTML() methods that print their graphical representation to + the web page canvas. The dream here is to be able to write pure-Python modules for + each custom data type, which can "pretty-print" as HTML/CSS/JS. + +### Holistic tabular view + +Right now OPT displays one state at a time. For simple algorithms, students often find it helpful +to have the entire state displayed in a table, and will manually insert in `print` statements like so: + + i = 0 + numbers = [] + while i < 6: + print 'At the top i is %d' % i + numbers.append(i) + i = i + 1 + print 'Numbers now: ', numbers + print 'At the bottom i is %d' % i + + +Question: Can we augment OPT to automatically display this sort of "cumulative tabular view"? +All of the data is right there in the trace; it's just a matter of visualizing it sensibly. + +For instance (this output is faked, so it's not accurate): + + i numbers code executed + ------------------------------------------- + 0 [0] while i < 6: + 1 [0, 1] i = i + 1 + 2 [0, 1, 2] while i < 6: + 3 [0, 1, 2, 3] i = i + 1 + 4 [0, 1, 2, 3, 4] + +In this case, the execution step slider under the code now highlights rows in the table as the +user scrubs through the slider; cool! + +The obvious challenge here is scalabiilty, and what happens when there are multiple frames. + +Some ideas include: +- having the user manually annotate (in, say, a docstring) which variables to print in the table +- only printing the table for one frame at a time +- or maybe displaying nesting frames + +2014-04-18: brainstorming on whiteboard + +![tabular view](opt-tabular-view.jpg) + +One interesting visual element is to bold or color values when they change, to draw the viewer's eye +to changes. In this way, it turns the OPT trace into more of a data visualization to focus on how data +changes over time. + + +### Custom rendering API and plugin system + +Right now Online Python Tutor renders Python data structures in a single, fixed way. +However, different instructors have different preferences for how they want certain objects to render +on-screen (and argue passionately for their specific tastes). +There is currently no way for them to specify these custom rendering schemes without mucking around with +intricate JavaScript code in the frontend. + +The goal of this project is to create a clean API and plugin architecture so that JavaScript-savvy instructors +can easily create custom renderers. + +The ultimate goal here is to completely replace one-off custom algorithm visualizations, whiteboard doodles, +and ad-hoc PowerPoint slide deck animations of CS concepts. + + +### Annotations for simplifying visualizations + +Right now OPT visualizes "everything" about program execution. However, that can easily lead to visual overload. +Let's think about implementing annotations to selectively show/hide different parts of execution, so that instructors +and students can hone in on what they find interesting. Examples: + +- annotate functions to trace/skip +- annotate data structures (or parts) to show/hide +- selectively expand or collapse data structure visualizations, which is useful for giant structures +- line-based breakpoints (currently implemented as a hack by puttin `# break` at the end of a line) +- conditional breakpoints + +Implementing annotations as ordinary code comments (rather than using a specialized UI) is elegant +because the instructor's code examples are self-contained in plain text and easily archivable outside of OPT. + +As a concrete use case, think about how to "clean up" the display of object-oriented programs. +Right now OPT naively visualizes all the steps that the Python interpreter takes when executing an +object-oriented program, which leads to all sorts of extraneous variables, frames, and pointers +lying around. + +Click here for an example. + +Think about how annotations can "clean up" such a big and hairy visualization. + + +### Semantic zooming and other visual customizations + +Right now OPT has only a limited number of ways to display visualizations, mostly set at the time +the "Visualize Execution" button is pressed. + +First, push some of the relevant options back to the visualizer UI itself, so they can be toggled +on a live visualization. + +Next, think about "semantic zooming" -- i.e., displaying different levels of granularity and focus +targeted toward different user audiences. For instance, fully expanding all the data structures +up-front might overwhelm beginners, so maybe start with them collapsed and then allow the user +to zoom in to expand them. Or maybe even "zooming out" to the point where data structures are +just rendered as plain-text (e.g., a list as `[1, 2, ..., 100]`, to take the focus off the heap details). + +Semantic zooming will help improve the "visual scalability" of the visualizations. + + +### Web-based authoring environment + +With a proper Web-based authoring environment, teachers and students can use +Online Python Tutor visualizations as the basis for annotated examples, +programming exercises, and quizzes. + +As a start, I've implemented a prototype of "annotation bubbles" for fine-grained annotation of visualization elements: + +![annotation bubbles](../opt-annotations.png) + +[Try a mock-up here!](http://pythontutor.com/commentary-bubbles-demo.html) + + +**Annotated code visualizations**: + +- Teachers could use it as a place to put their code examples and mini-lessons (so that they’re persistent, rather than sending out a bunch of gross URLs) + - Lesson text can be fine-grained -- e.g., specific text to accompany each execution point, or annotations atop individual objects. + - see the above screenshot for "annotation bubbles" prototype to label individual visualization elements + - Think about what asides or remarks would a teacher/mentor SAY OUT LOUD when stepping through code with a student/mentee. Those are probably the kinds of commentary that you'd want to put inside of visualizations. +- Students could use it as a Stackoverflow-like forum for asking questions + - Potentially powerful use case in MOOCs where students can directly annotate visualizations while debugging and then fire off a question to a discussion forum (with all required context). Again, OPT will be embedded within a larger MOOC courseware environment and be a segue into discussion forums. + - With a lightweight authoring environment, OPT can be used for embedding read-write visualizations. When a student is viewing code visualizations embedded within a textbook or lesson, they can mark annotations for parts they don’t understand and then send off the link to the course staff or discussion forum. So in essence, they’re interacting with the visualization rather than just passively consuming it. + + +**Exercises/quizzes**: Since we have rich visualizations and interactivity at our disposal, +we can come up with new forms of exercises that are more engaging than simply +"write a function that does X and then passes these 10 unit tests." +For example, one could imagine putting in blank slots as the user steps through the visualization, +and the user would need to fill in those slots with the appropriate values. (There is already a +not-yet-documented prototype of these sorts of pop-up questions, done by Brad Miller.) + + +### Visualizing orders of growth + +Think about how to convey orders of growth of algorithms across data sets of varying sizes. + +Notes from Peter N.: { +Peter suggested augmenting special data structure classes with callback hooks to the visualizer (like __str__ on steroids). This allows the visualizer to gracefully skip steps of the yucky internals of a data structure while just stepping through the significant parts. You can imagine instrumenting an Array class and visualizing compares, swaps, etc. for sorting algorithms. + +"Third, it would also be great to have a plot API, to plot the runtimes (or some other stat) as a function of input size N." + +"Fourth, while I have seen other algorithm systems where they annotate the code (by putting in annotations that say @step or something), I think we can get away without it. For example, if the problem is sorting a list of integers, don't annotate the algorithm: just pass it an input that consists not of a list of ints, but rather an annotaed list of annotated ints. An annotated lists increments a counter for every __getitem__ and __setitem__, and an annotated int increments a counter for every __lt__ and the like. It won't survive malicious attacks, but it will work for all but the actively uncooperative users." + +We also talked about visualizing orders of growth of code, such as loops, nested loops, etc. by visualizing how many times things execute and then how that changes as your input size changes. +} + + +## Backend + +### Shared visualization sessions + +My main high-level vision for where to take the shared editing is the following: + +1. The instructor tells students to join a shared session. +2. The instructor starts "driving" and typing code in the shared session. students watch along. +3. At any time, a student can click a "detach" button and detach his/her session from the teacher. Then the session acts just like regular Online Python Tutor. +4. At any time, a student can "reattach" to the shared session and follow the instructor again. + +The basic idea here is that students can follow along with an instructor but then "detach" at anytime to try out their own variations and experiments without interfering with other people's sessions. + +A related point/question is: what happens if two people try to simultaneously edit? i assume that they clobber each other's changes, right? in that case, it might be good to designate only ONE person who can edit, and everyone else just watches. or else a mischievous student can just delete everyone's code. of course, you can also have another "free-for-all" mode where everyone can edit. + + +Another take on this idea: +Adding real-time concurrent editing to these visualizations enables students to work together and tutor +one another while physically separated. A shared workspace can also be useful during both physical and +virtual lectures: As the instructor is lecturing using code visualizations, students can follow along by +viewing those same running examples on their laptops. At any point when curious or confused, students can +instantly diverge from the live example and try out their own variants +on-the-fly in private; they can then sync back to the "live feed" at any time. Students can also text +chat with one another about the lecture, all within the context of the live lecture materials. If students +opt-in to allowing the instructor to access such interaction data, then that could "close the loop" and +help the instructor improve future lectures. For instance, if 80% of students are silently diverging from +the live example at a certain point in lecture, then perhaps that part requires further clarification. + + +Watch this [YouTube video demo](http://www.youtube.com/watch?v=y3sVN7uaxDM) for an example of shared sessions. + + +### Visualizing different programming languages + +This project is great for someone who likes to hack on language implementations and runtimes. + +The OPT frontend can visualize programs written in any language, not just Python. +This project involves creating a backend for another language. +All the backend needs to do is to generate an execution trace in the following format: + +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/opt-trace-format.md + +And the OPT frontend should be able to visualize it! + + +### Skulpt (Python-in-JavaScript) backend + +[This idea is good as a proof-of-concept, but probably not practical for deployment; I strongly belive in running the real language runtimes on the server rather than a JS emulation. One exception is if we can get the real runtimes compiled to JS using Emscripten or something, so that they run in the browser. But for now, that's not really practical due to libraries and other external dependencies.] + +This project is appropriate for someone with advanced knowledge of hacking a Python interpreter +who is willing to make a substantive time commitment. + +Right now the OPT backend runs Python code on the server, but it would be super-cool to create a "backend" +that runs entirely in the browser. Modifying Skulpt -- http://www.skulpt.org/ -- is the leading contender here, +since I am in touch with its main developers. + +The basic idea is to use Skulpt to generate a JavaScript trace object (all within the web browser without +a server call) and then construct a new ExecutionVisualizer with that trace object as a parameter. +Read "Direct embedding" and the associated code for more detailed info: +https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/embedding-HOWTO.md#direct-embedding + + +Main Advantages: + - Enables fine-grained tracing of expression and sub-expression evaluation, which has clear pedagogical benefits; right now OPT can only single-step over one line at a time since it relies on the Python bdb debugger. + - Enables an interactive REPL that incrementally takes in user inputs rather than just executing batch programs; this can lead to better interactivity and responsiveness. + - Supports on-demand evaluation and in-memory storage of (relatively) large data structures such as a 100,000-element dictionary for a spell checker program; right now OPT must send that giant dictionary in a trace (encoded in an inefficient format). + - Works in "offline mode" for students in regions without reliable Internet access + - Enables on-the-fly editing of data by clicking on and editing the visualized objects (since they're just JavaScript objects) ... Smalltalk style :) + - Might enable [Bret-Victor-esque](http://vimeo.com/36579366) "live coding" where the display updates nearly instantaneously as you are coding + +From an OPT user: +"The second idea came about when teaching about return values, but it applies to any "compound" expression that is more than a single function call or assignment of a literal to a variable. I often find myself showing how Python processes a statement like "x = len(s) + 1" by showing how individual pieces are computed sequentially. Right now, OPT treats that as a single, atomic line, so students don't see clearly how it first calls len(s), "replaces" that with its return value, performs the addition, and then stores the result of that into x. I draw things like this on the board with underlining and arrows (e.g., "len(s)" is underlined, with an arrow pointing down to its return value) to show where data goes and how everything is evaluated. I expect that could be automated and displayed in something like OPT. I'm not sure I'm being clear, but I hope that makes some sense. I recognize that this doesn't fit that well into the current model, which is focused on one step being one line of code, so it may be a bit of a pipe-dream." + +Tips & Tricks: + - From Brad Miller: http://blog.bonelakesoftware.com/2011/03/adding-module-to-skulpt.html and http://blog.bonelakesoftware.com/2011/02/python-in-your-browser-in-javascript.html + - From Scott Graham, when I asked him whether Skulpt implements Python 2 or 3: “Mostly 2-ish. Some object hierarchy things take after 3's simplified semantics.” + +Dec 2012: Brython -- http://www.brython.info/index_en.html -- might also be a contender here, since it supports lots of Python 3 (except for OOP, lambdas, exceptions, and generators, afaik). + +May 2013: In the experience of Python veterans, the main caveat with targeting one of these alternative Python implementations is that they don't support the full ("official") Python language. +Thus, users might be frustrated that code they type into this tutor doesn't run exactly like code they type into the official Python interpreter. +That said, though, a Skulpt implementation would still be useful, as long as users understand its limitations and caveats, and that it doesn't support the full Python language in all of its glory (or its weird edge-case behaviors). + +Nov 2013: Currently, the only way to get the official CPython in JS is to use https://github.com/replit/empythoned, +which is used by the more general https://github.com/replit/jsrepl and https://github.com/replit/repl.it projects. +However, handling `stdin` is really kludgy and works well only on Chrome/Safari ... kinda works in Firefox, and not at all in IE: https://github.com/replit/jsrepl#standard-input-hacks +And it's unclear how to get the CPython code to communicate with the custom JS viz code ... so this is still not a shoo-in yet :/ The technology is still not there, ugh! + + +### Hack CPython to enable sub-expression-level tracing + +Right now OPT uses [bdb](http://docs.python.org/2/library/bdb.html) to trace at line-level granularity. +However, lots of users want sub-expression-level granularity, such as this user: + +"The second idea came about when teaching about return values, but it applies to any "compound" expression that is more than a single function call or assignment of a literal to a variable. I often find myself showing how Python processes a statement like "x = len(s) + 1" by showing how individual pieces are computed sequentially. Right now, OPT treats that as a single, atomic line, so students don't see clearly how it first calls len(s), "replaces" that with its return value, performs the addition, and then stores the result of that into x. I draw things like this on the board with underlining and arrows (e.g., "len(s)" is underlined, with an arrow pointing down to its return value) to show where data goes and how everything is evaluated. I expect that could be automated and displayed in something like OPT. I'm not sure I'm being clear, but I hope that makes some sense. I recognize that this doesn't fit that well into the current model, which is focused on one step being one line of code, so it may be a bit of a pipe-dream." + +One way to get finer-grained tracing is to use Skulpt (see above), but the problem with Skulpt is that it's not +"real" Python (i.e., CPython), so that code typed into OPT won't run exactly the same as code run by CPython. + +The goal of this project is to hack CPython all the way from the compiler frontend to the bytecode generator +and debugger hooks to add **fine-grained** information into the bytecode to enable sub-expression-level tracing. +I envision the result as being a custom CPython interpreter that I can compile and run on the OPT server, which +will run real CPython code, albeit with bytecode that's enhanced with extra metadata. The resulting interpreter +should be compatible with pure-Python modules, and hopefully compatible with C modules as well, as long as `PyObject` +and other internal guts aren't altered too much. But I don't care a ton about C module compatibility since OPT +doesn't really use C modules. (Update in July 2013 -- it seems like hacks to CPython core data structures are +intrusive enough to preclude C module object compatibility. But that's not a big deal.) + + +#### Early Prototype (July 2013) - now deprecated + +In early July 2013, I made some initial steps toward this goal as a proof-of-concept and am +encouraged by my findings so far. See the underlying [Py2crazy](https://github.com/pgbovine/Py2crazy/) project for more details. + +In short, I think that with enough elbow grease to hack on CPython innards, +you can get pretty good line/column number information into bytecodes; +then Online Python Tutor can do much finer-grained stepping within expressions. + +Line-level stepping is too coarse, and bytecode-level might be too fine-grained; +so I imagine that with some good filtering heuristics, we can hit a sweet spot of +stepping at a level that instructors like. In particular, lots of bytecodes are executed for +loading constants when initializing, say, a list; those can probably be skipped since +they're un-interesting. + + +### Offline mode for use as a production debugger + +From a reader comment: "As a teaching tool it is invaluable, not only for teaching python, but for programming in general (what is going on in memory...). +I've actively used it to debug / trace short pieces of code. Any chance of having it offline (and without the limitations of an online tool like the inability to load all modules)? That would make a perfect pdb visualization tool." + +You could imagine running a webserver on localhost and using OPT as a graphical frontend for pdb; interesting idea! + +Notes from an email I sent on 2012-10-24: { + +One possible offline application is to use OPT as a visual debugger for pdb (http://docs.python.org/library/pdb.html). The use case here would be: + +1.) The user launches a special version of pdb augmented with OPT. +2.) The user types in some Python command to visualize. +3.) pdb starts a local webserver and pops up a web browser window. +4.) The visualization appears in the web browser window, and the user can interact with it. + +Actually, now that I think about it, you can start even simpler without pdb. Here is an even simpler starting point: + +1.) The user writes some code to visualize in a file on his/her computer. +2.) The user runs a special Python script that runs OPT on that file, launches a local webserver, and pops open a web browser window. +3.) The visualization appears in the web browser window. + +Ok, that seems simpler as a starting point, and it will still teach you about local webservers and interfacing between the OPT backend and frontend. + +Then comes the question of why this offline mode might be useful (beyond being a good learning exercise). After all, just by following the directions in the developer overview docs, you've essentially set up OPT to run offline without an Internet connection. So my plan above doesn't give you any extra functionality. However, I think the potential lies in integrating with a real debugger such as pdb, so that you can run large Python programs, pause execution, and then visualize selected data structures (rather than all data structures in the program, which can get overwhelming). + +} + +Ha, I guess you can call this **"Offline Python Tutor"**! diff --git a/v3/docs/user-FAQ.md b/v3/docs/user-FAQ.md new file mode 100644 index 000000000..d4839b5ad --- /dev/null +++ b/v3/docs/user-FAQ.md @@ -0,0 +1,37 @@ +# Frequently Asked Questions from users of Online Python Tutor + +Email philip@pgbovine.net if you have a question that isn't addressed here. + + +#### I thought all objects in Python are (conceptually) on the heap; why does Online Python Tutor render primitive values (e.g., numbers, strings) inside of stack frames? + +This was a design decision made to keep the display less cluttered; +if we were truly faithful to Python's semantics, that would result in far too many arrows (pointers) being drawn. +However, note that since primitives are **immutable** and thus behave identically regardless of aliasing, +it doesn't matter whether they're rendered in the stack or heap. + +Update on 2013-01-06: I've just added a drop-down menu option with two choices: +"inline primitives and nested objects" versus "render all objects on the heap". +If you want to render all objects on the heap, select the latter option. +To avoid too many arrows being drawn, also toggle the "draw references using arrows" option +to "use text labels for references". + + +#### I don't like your default toggle options. Can I set different defaults? + +Of course! Toggle options are customizable via the query string. Here are the default settings: + +http://pythontutor.com/visualize.html#cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2 + +For example, if you want to default to Python 3, visit: +http://pythontutor.com/visualize.html#&py=3 + +Or if you want to render all objects on the heap and use text label references, visit: +http://pythontutor.com/visualize.html#heapPrimitives=true&textReferences=true + +The possibilities are endless! (or 2^6 or something.) + + +#### Did you know that stepping through code with generators looks weird when "display frames of exited functions" is selected? + +Yep, this is a known bug, but sadly the fix isn't straightforward at the moment. diff --git a/v3/embedding-demo.html b/v3/embedding-demo.html new file mode 100644 index 000000000..eca7b0fee --- /dev/null +++ b/v3/embedding-demo.html @@ -0,0 +1,41 @@ + + + + + Online Python Tutor embedding demo + + + + + + + + + + + + + + + + + + + + + + + +

Recursive list sum (from pythontutor.com home page):

+
+ +

Towers of Hanoi:

+
+ +

Happy Birthday:

+
+ + diff --git a/v3/embedding-demo.js b/v3/embedding-demo.js new file mode 100644 index 000000000..9e8908bd6 --- /dev/null +++ b/v3/embedding-demo.js @@ -0,0 +1,95 @@ +// To embed Online Python Tutor visualizations into embedding-demo.html ... + +// 1. Run generate_json_trace.py to generate execution traces as JavaScript variables. +// (WARNING: The following lines are VERY LONG.) + +// Run: +// python generate_json_trace.py --create_jsvar=listSumTrace tests/backend-tests/list_sum.txt +// and copy-and-paste the output line into here: +var listSumTrace = {"code": "def listSum(numbers):\n if not numbers:\n return 0\n else:\n (f, rest) = numbers\n return f + listSum(rest)\n\nmyList = (1, (2, (3, None)))\ntotal = listSum(myList)\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 1, "event": "step_line"}, {"ordered_globals": ["listSum"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"__return__": 0, "numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"__return__": 3, "numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"__return__": 5, "numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"__return__": 6, "numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList", "total"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"total": 6, "myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "return"}]}; + +// Do the same for +// python generate_json_trace.py --create_jsvar=hanoiTrace example-code/towers_of_hanoi.txt +var hanoiTrace = {"code": "# move a stack of n disks from stack a to stack b,\n# using tmp as a temporary stack\ndef TowerOfHanoi(n, a, b, tmp):\n if n == 1:\n b.append(a.pop())\n else:\n TowerOfHanoi(n-1, a, tmp, b)\n b.append(a.pop())\n TowerOfHanoi(n-1, tmp, b, a)\n \nstack1 = [4,3,2,1]\nstack2 = []\nstack3 = []\n \n# transfer stack1 to stack3 using Tower of Hanoi rules\nTowerOfHanoi(len(stack1), stack1, stack3, stack2)\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 3, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"TowerOfHanoi": ["REF", 1]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null]}, "line": 11, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1]}, "line": 12, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"]}, "line": 13, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 16, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 4, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f4", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 4, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f4", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 4, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f4", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2, 1], "3": ["LIST"], "4": ["LIST"]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 4, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "__return__": null, "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f4", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2], "3": ["LIST", 1], "4": ["LIST"]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3, 2], "3": ["LIST", 1], "4": ["LIST"]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST", 1], "4": ["LIST", 2]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 5, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f5", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST", 1], "4": ["LIST", 2]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 5, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f5", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST", 1], "4": ["LIST", 2]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 5, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f5", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST", 1], "4": ["LIST", 2]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 5, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "__return__": null, "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f5", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST"], "4": ["LIST", 2, 1]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 3, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "__return__": null, "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f3", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST"], "4": ["LIST", 2, 1]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 3], "3": ["LIST"], "4": ["LIST", 2, 1]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 7, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f7", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 7, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f7", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 7, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f7", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3], "4": ["LIST", 2, 1]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 7, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "__return__": null, "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f7", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 1], "3": ["LIST", 3], "4": ["LIST", 2]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 1], "3": ["LIST", 3], "4": ["LIST", 2]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 1], "3": ["LIST", 3, 2], "4": ["LIST"]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 8, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f8", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 1], "3": ["LIST", 3, 2], "4": ["LIST"]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 8, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f8", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 1], "3": ["LIST", 3, 2], "4": ["LIST"]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 8, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f8", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4, 1], "3": ["LIST", 3, 2], "4": ["LIST"]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "b": ["REF", 3], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 8, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "__return__": null, "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f8", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3, 2, 1], "4": ["LIST"]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 6, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 4], "__return__": null, "b": ["REF", 3], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f6", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3, 2, 1], "4": ["LIST"]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 2, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "__return__": null, "b": ["REF", 3], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f2", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3, 2, 1], "4": ["LIST"]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 4], "3": ["LIST", 3, 2, 1], "4": ["LIST"]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 11, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f11", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 11, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f11", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 11, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f11", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2, 1], "4": ["LIST", 4]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 11, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "__return__": null, "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f11", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2], "4": ["LIST", 4, 1]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 3, 2], "4": ["LIST", 4, 1]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2], "3": ["LIST", 3], "4": ["LIST", 4, 1]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 12, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f12", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2], "3": ["LIST", 3], "4": ["LIST", 4, 1]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 12, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f12", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2], "3": ["LIST", 3], "4": ["LIST", 4, 1]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 12, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f12", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2], "3": ["LIST", 3], "4": ["LIST", 4, 1]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "b": ["REF", 2], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 12, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 4], "__return__": null, "b": ["REF", 2], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f12", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST", 3], "4": ["LIST", 4]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 10, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 3], "__return__": null, "b": ["REF", 2], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f10", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST", 3], "4": ["LIST", 4]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST", 3], "4": ["LIST", 4]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 14, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f14", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 14, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f14", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 14, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f14", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2, 1], "3": ["LIST"], "4": ["LIST", 4, 3]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 14, "encoded_locals": {"tmp": ["REF", 4], "a": ["REF", 2], "__return__": null, "b": ["REF", 3], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f14", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2], "3": ["LIST", 1], "4": ["LIST", 4, 3]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST", 2], "3": ["LIST", 1], "4": ["LIST", 4, 3]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 1], "4": ["LIST", 4, 3, 2]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 15, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f15", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 1], "4": ["LIST", 4, 3, 2]}, "line": 3, "event": "call"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 15, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f15", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 1], "4": ["LIST", 4, 3, 2]}, "line": 4, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 15, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f15", "ordered_varnames": ["n", "a", "b", "tmp"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST", 1], "4": ["LIST", 4, 3, 2]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 2}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 15, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "__return__": null, "b": ["REF", 4], "n": 1}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_jhash": "TowerOfHanoi_f15", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST"], "4": ["LIST", 4, 3, 2, 1]}, "line": 5, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "b": ["REF", 4], "n": 3}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 13, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "__return__": null, "b": ["REF", 4], "n": 2}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f13", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST"], "4": ["LIST", 4, 3, 2, 1]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "b": ["REF", 4], "n": 4}, "is_highlighted": false, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp"]}, {"frame_id": 9, "encoded_locals": {"tmp": ["REF", 2], "a": ["REF", 3], "__return__": null, "b": ["REF", 4], "n": 3}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f9", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST"], "4": ["LIST", 4, 3, 2, 1]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "TowerOfHanoi", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"tmp": ["REF", 3], "a": ["REF", 2], "__return__": null, "b": ["REF", 4], "n": 4}, "is_highlighted": true, "is_parent": false, "func_name": "TowerOfHanoi", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "TowerOfHanoi_f1", "ordered_varnames": ["n", "a", "b", "tmp", "__return__"]}], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST"], "4": ["LIST", 4, 3, 2, 1]}, "line": 9, "event": "return"}, {"ordered_globals": ["TowerOfHanoi", "stack1", "stack2", "stack3"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"stack3": ["REF", 4], "stack2": ["REF", 3], "TowerOfHanoi": ["REF", 1], "stack1": ["REF", 2]}, "heap": {"1": ["FUNCTION", "TowerOfHanoi(n, a, b, tmp)", null], "2": ["LIST"], "3": ["LIST"], "4": ["LIST", 4, 3, 2, 1]}, "line": 16, "event": "return"}]}; + +// And finally, let's generate one last trace and copy it in here: +// python generate_json_trace.py --create_jsvar=happyTrace example-code/happy.txt +var happyTrace = {"code": "# From \"Teaching with Python\" by John Zelle\ndef happy():\n print(\"Happy Birthday to you!\")\n\ndef sing(P):\n happy()\n happy()\n print(\"Happy Birthday dear \" + P + \"!\")\n happy()\n\n# main\nsing(\"Fred\")\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 2, "event": "step_line"}, {"ordered_globals": ["happy"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 12, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "", "func_name": "sing", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": true, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 5, "event": "call"}, {"ordered_globals": ["happy", "sing"], "stdout": "", "func_name": "sing", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": true, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 2, "encoded_locals": {}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f2", "ordered_varnames": []}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 2, "event": "call"}, {"ordered_globals": ["happy", "sing"], "stdout": "", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 2, "encoded_locals": {}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f2", "ordered_varnames": []}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 2, "encoded_locals": {"__return__": null}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f2", "ordered_varnames": ["__return__"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 3, "event": "return"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\n", "func_name": "sing", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": true, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 7, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 3, "encoded_locals": {}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f3", "ordered_varnames": []}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 2, "event": "call"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 3, "encoded_locals": {}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f3", "ordered_varnames": []}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 3, "encoded_locals": {"__return__": null}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f3", "ordered_varnames": ["__return__"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 3, "event": "return"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\n", "func_name": "sing", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": true, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", "func_name": "sing", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": true, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 4, "encoded_locals": {}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f4", "ordered_varnames": []}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 2, "event": "call"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 4, "encoded_locals": {}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f4", "ordered_varnames": []}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", "func_name": "happy", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"P": "Fred"}, "is_highlighted": false, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P"]}, {"frame_id": 4, "encoded_locals": {"__return__": null}, "is_highlighted": true, "is_parent": false, "func_name": "happy", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "happy_f4", "ordered_varnames": ["__return__"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 3, "event": "return"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", "func_name": "sing", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"__return__": null, "P": "Fred"}, "is_highlighted": true, "is_parent": false, "func_name": "sing", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "sing_f1", "ordered_varnames": ["P", "__return__"]}], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 9, "event": "return"}, {"ordered_globals": ["happy", "sing"], "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", "func_name": "", "stack_to_render": [], "globals": {"sing": ["REF", 2], "happy": ["REF", 1]}, "heap": {"1": ["FUNCTION", "happy()", null], "2": ["FUNCTION", "sing(P)", null]}, "line": 12, "event": "return"}]}; + + +// 2. When the HTML document finishes loading, populate the three divs +// (listSumDiv, hanoiDiv, happyDiv) with the visualizations +// corresponding to the respective traces. +$(document).ready(function() { + + // 3. Create a new ExecutionVisualizer object for each visualization. + // (See js/pytutor.js for the full specs of ExecutionVisualizer.) + // + // The basic idea is that the parent div name is passed as the first argument, + // and the trace object is passed as the second argument. + // + // The third argument contains optional parameters. + + // Note that "embeddedMode: true" makes the visualizer appear more compact on-screen. + // editCodeBaseURL is the base URL to prepend onto the 'Edit code' link. + + + // A more subtle point is that when some div in your HTML webpage + // (such as a visualizer div) expands in height, it will "push down" + // all divs below it, but the SVG arrows rendered by jsPlumb + // WILL NOT MOVE. Thus, they will be in the incorrect location + // unless you call redrawAllConnectors(). + // + // We use the "heightChangeCallback" optional parameter to force redraw + // of all SVG arrows of ALL visualizers, whenever the height of one changes. + // + // Alternatively, here is one jQuery plugin that you can use to detect div height changes: + // http://benalman.com/projects/jquery-resize-plugin/ + // + // A related trick you can implement is to make a div never shrink in height once it's grown; + // that way, you can avoid lots of jarring jumps and (inefficient) redraws. + + // Render listSumTrace inside of listSumDiv + var listSumVisualizer = new ExecutionVisualizer('listSumDiv', listSumTrace, + {embeddedMode: true, + heightChangeCallback: redrawAllVisualizerArrows, + editCodeBaseURL: 'http://pythontutor.com/visualize.html'}); + + // The "startingInstruction: 15" optional parameter means to jump to step 15 + // in the visualization when it loads. (The HTML webpage will actually display + // "Step 16 of 64" since indices are zero-indexed.) + // + // verticalStack means to stack the code and visualizations vertically atop one another + // (rather than side-by-side) + var hanoiVisualizer = new ExecutionVisualizer('hanoiDiv', hanoiTrace, + {embeddedMode: true, + startingInstruction: 15, + verticalStack: true, + heightChangeCallback: redrawAllVisualizerArrows, + editCodeBaseURL: 'http://pythontutor.com/visualize.html'}); + + // "embeddedMode: false" displays the full visualizer widget with the "Program Output" pane + // "jumpToEnd: true" means to jump to the end of execution upon loading. + var happyVisualizer = new ExecutionVisualizer('happyDiv', happyTrace, + {embeddedMode: false, + jumpToEnd: true, + codeDivWidth: 450, + codeDivHeight: 150, + // no need for heightChangeCallback since + // this is the "bottom-most" visualizer, + // so no arrows appear below it + editCodeBaseURL: 'http://pythontutor.com/visualize.html'}); + + function redrawAllVisualizerArrows() { + if (listSumVisualizer) listSumVisualizer.redrawConnectors(); + if (hanoiVisualizer) hanoiVisualizer.redrawConnectors(); + if (happyVisualizer) happyVisualizer.redrawConnectors(); + } + + + // Call redrawConnectors() on all visualizers whenever the window is resized, + // since HTML elements might have moved during a resize. The SVG arrows rendered + // by jsPlumb don't automatically get re-drawn in their new positions unless + // redrawConnectors() is called. + $(window).resize(redrawAllVisualizerArrows); +}); diff --git a/v3/example-code/aliasing.golden b/v3/example-code/aliasing.golden new file mode 100644 index 000000000..d0f3f9997 --- /dev/null +++ b/v3/example-code/aliasing.golden @@ -0,0 +1,2067 @@ +{ + "code": "x = [1, 2, 3]\ny = [4, 5, 6]\nz = y\ny = x\nx = z\n\nx = [1, 2, 3] # a different [1, 2, 3] list!\ny = x\nx.append(4)\ny.append(5)\nz = [1, 2, 3, 4, 5] # a different list!\nx.append(6)\ny.append(7)\ny = \"hello\"\n\n\ndef foo(lst):\n lst.append(\"hello\")\n bar(lst)\n\ndef bar(myLst):\n print(myLst)\n\nfoo(x)\nfoo(z)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 2 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 17, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 25, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 17, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "myLst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "myLst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ], + "bar": [ + "REF", + 6 + ], + "foo": [ + "REF", + 5 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 25, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing.golden_py3 b/v3/example-code/aliasing.golden_py3 new file mode 100644 index 000000000..f56be9792 --- /dev/null +++ b/v3/example-code/aliasing.golden_py3 @@ -0,0 +1,2067 @@ +{ + "code": "x = [1, 2, 3]\ny = [4, 5, 6]\nz = y\ny = x\nx = z\n\nx = [1, 2, 3] # a different [1, 2, 3] list!\ny = x\nx.append(4)\ny.append(5)\nz = [1, 2, 3, 4, 5] # a different list!\nx.append(6)\ny.append(7)\ny = \"hello\"\n\n\ndef foo(lst):\n lst.append(\"hello\")\n bar(lst)\n\ndef bar(myLst):\n print(myLst)\n\nfoo(x)\nfoo(z)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 2 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ], + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 17, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 25, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 17, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "myLst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "myLst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 22, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ], + "bar": [ + "REF", + 5 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 25, + "event": "return" + } + ] +} diff --git a/example-code/aliasing.txt b/v3/example-code/aliasing.txt similarity index 54% rename from example-code/aliasing.txt rename to v3/example-code/aliasing.txt index e866323d5..459b370db 100644 --- a/example-code/aliasing.txt +++ b/v3/example-code/aliasing.txt @@ -1,19 +1,25 @@ -# Example of aliasing x = [1, 2, 3] +y = [4, 5, 6] +z = y +y = x +x = z + +x = [1, 2, 3] # a different [1, 2, 3] list! y = x x.append(4) y.append(5) -z = [1, 2, 3, 4, 5] +z = [1, 2, 3, 4, 5] # a different list! x.append(6) y.append(7) y = "hello" + def foo(lst): lst.append("hello") bar(lst) def bar(myLst): - print myLst + print(myLst) foo(x) foo(z) diff --git a/v3/example-code/aliasing/aliasing1.golden b/v3/example-code/aliasing/aliasing1.golden new file mode 100644 index 000000000..00383dd48 --- /dev/null +++ b/v3/example-code/aliasing/aliasing1.golden @@ -0,0 +1,98 @@ +{ + "code": "a = (1, (2, (3, None)))\nb = a[1]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "b": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing1.golden_py3 b/v3/example-code/aliasing/aliasing1.golden_py3 new file mode 100644 index 000000000..00383dd48 --- /dev/null +++ b/v3/example-code/aliasing/aliasing1.golden_py3 @@ -0,0 +1,98 @@ +{ + "code": "a = (1, (2, (3, None)))\nb = a[1]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "b": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing1.txt b/v3/example-code/aliasing/aliasing1.txt new file mode 100644 index 000000000..f6d9efea8 --- /dev/null +++ b/v3/example-code/aliasing/aliasing1.txt @@ -0,0 +1,2 @@ +a = (1, (2, (3, None))) +b = a[1] diff --git a/v3/example-code/aliasing/aliasing2.golden b/v3/example-code/aliasing/aliasing2.golden new file mode 100644 index 000000000..ab6c203f4 --- /dev/null +++ b/v3/example-code/aliasing/aliasing2.golden @@ -0,0 +1,90 @@ +{ + "code": "c = (1, (2, None))\nd = (1, c)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "c": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "c": [ + "REF", + 1 + ], + "d": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + null + ], + "3": [ + "TUPLE", + 1, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing2.golden_py3 b/v3/example-code/aliasing/aliasing2.golden_py3 new file mode 100644 index 000000000..ab6c203f4 --- /dev/null +++ b/v3/example-code/aliasing/aliasing2.golden_py3 @@ -0,0 +1,90 @@ +{ + "code": "c = (1, (2, None))\nd = (1, c)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "c": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "c": [ + "REF", + 1 + ], + "d": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + null + ], + "3": [ + "TUPLE", + 1, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing2.txt b/v3/example-code/aliasing/aliasing2.txt new file mode 100644 index 000000000..57984f2ff --- /dev/null +++ b/v3/example-code/aliasing/aliasing2.txt @@ -0,0 +1,2 @@ +c = (1, (2, None)) +d = (1, c) diff --git a/v3/example-code/aliasing/aliasing3.golden b/v3/example-code/aliasing/aliasing3.golden new file mode 100644 index 000000000..a0bded930 --- /dev/null +++ b/v3/example-code/aliasing/aliasing3.golden @@ -0,0 +1,335 @@ +{ + "code": "l1, l2, l3, l4 = 1, 2, 3, 4\n\nt1 = (l1, l2)\nt2 = (l3, l4)\nt = (t1, t2)\nu = ((1, 2), (3, 4))\nv = u[0]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "l4": 4, + "t1": [ + "REF", + 1 + ], + "l2": 2, + "l3": 3, + "l1": 1 + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1 + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2", + "t" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1, + "t": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1, + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "5": [ + "TUPLE", + 1, + 2 + ], + "6": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2", + "t", + "u", + "v" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "v": [ + "REF", + 5 + ], + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1, + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "5": [ + "TUPLE", + 1, + 2 + ], + "6": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing3.golden_py3 b/v3/example-code/aliasing/aliasing3.golden_py3 new file mode 100644 index 000000000..a0bded930 --- /dev/null +++ b/v3/example-code/aliasing/aliasing3.golden_py3 @@ -0,0 +1,335 @@ +{ + "code": "l1, l2, l3, l4 = 1, 2, 3, 4\n\nt1 = (l1, l2)\nt2 = (l3, l4)\nt = (t1, t2)\nu = ((1, 2), (3, 4))\nv = u[0]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "l4": 4, + "t1": [ + "REF", + 1 + ], + "l2": 2, + "l3": 3, + "l1": 1 + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1 + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2", + "t" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1, + "t": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1, + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "5": [ + "TUPLE", + 1, + 2 + ], + "6": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "l4", + "l2", + "l3", + "l1", + "t1", + "t2", + "t", + "u", + "v" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "v": [ + "REF", + 5 + ], + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ], + "l4": 4, + "l2": 2, + "l3": 3, + "l1": 1, + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "5": [ + "TUPLE", + 1, + 2 + ], + "6": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing3.txt b/v3/example-code/aliasing/aliasing3.txt new file mode 100644 index 000000000..fcb9e9c63 --- /dev/null +++ b/v3/example-code/aliasing/aliasing3.txt @@ -0,0 +1,7 @@ +l1, l2, l3, l4 = 1, 2, 3, 4 + +t1 = (l1, l2) +t2 = (l3, l4) +t = (t1, t2) +u = ((1, 2), (3, 4)) +v = u[0] diff --git a/v3/example-code/aliasing/aliasing4.golden b/v3/example-code/aliasing/aliasing4.golden new file mode 100644 index 000000000..0d440f81a --- /dev/null +++ b/v3/example-code/aliasing/aliasing4.golden @@ -0,0 +1,67 @@ +{ + "code": "x = [1, 2, 3]\nx.append(x)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing4.golden_py3 b/v3/example-code/aliasing/aliasing4.golden_py3 new file mode 100644 index 000000000..0d440f81a --- /dev/null +++ b/v3/example-code/aliasing/aliasing4.golden_py3 @@ -0,0 +1,67 @@ +{ + "code": "x = [1, 2, 3]\nx.append(x)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing4.txt b/v3/example-code/aliasing/aliasing4.txt new file mode 100644 index 000000000..7ca952d22 --- /dev/null +++ b/v3/example-code/aliasing/aliasing4.txt @@ -0,0 +1,2 @@ +x = [1, 2, 3] +x.append(x) diff --git a/v3/example-code/aliasing/aliasing5.golden b/v3/example-code/aliasing/aliasing5.golden new file mode 100644 index 000000000..af82d0118 --- /dev/null +++ b/v3/example-code/aliasing/aliasing5.golden @@ -0,0 +1,455 @@ +{ + "code": "x = None\nfor i in range(5, 0, -1):\n x = (i, x)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": null + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": null + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "5": [ + "TUPLE", + 1, + [ + "REF", + 4 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "5": [ + "TUPLE", + 1, + [ + "REF", + 4 + ] + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing5.golden_py3 b/v3/example-code/aliasing/aliasing5.golden_py3 new file mode 100644 index 000000000..af82d0118 --- /dev/null +++ b/v3/example-code/aliasing/aliasing5.golden_py3 @@ -0,0 +1,455 @@ +{ + "code": "x = None\nfor i in range(5, 0, -1):\n x = (i, x)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": null + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": null + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "5": [ + "TUPLE", + 1, + [ + "REF", + 4 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "TUPLE", + 5, + null + ], + "2": [ + "TUPLE", + 4, + [ + "REF", + 1 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "4": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "5": [ + "TUPLE", + 1, + [ + "REF", + 4 + ] + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing5.txt b/v3/example-code/aliasing/aliasing5.txt new file mode 100644 index 000000000..232486f7c --- /dev/null +++ b/v3/example-code/aliasing/aliasing5.txt @@ -0,0 +1,3 @@ +x = None +for i in range(5, 0, -1): + x = (i, x) diff --git a/v3/example-code/aliasing/aliasing6.golden b/v3/example-code/aliasing/aliasing6.golden new file mode 100644 index 000000000..71b2ac9b6 --- /dev/null +++ b/v3/example-code/aliasing/aliasing6.golden @@ -0,0 +1,327 @@ +{ + "code": "# wow, this looks gross :)\nt1 = (1, 2)\nt2 = (3, 4)\nt = [t1, t2]\nu = [t, t, t]\nu[1] = u\nt[0] = u\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + [ + "REF", + 3 + ], + [ + "REF", + 3 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 4 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing6.golden_py3 b/v3/example-code/aliasing/aliasing6.golden_py3 new file mode 100644 index 000000000..71b2ac9b6 --- /dev/null +++ b/v3/example-code/aliasing/aliasing6.golden_py3 @@ -0,0 +1,327 @@ +{ + "code": "# wow, this looks gross :)\nt1 = (1, 2)\nt2 = (3, 4)\nt = [t1, t2]\nu = [t, t, t]\nu[1] = u\nt[0] = u\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + [ + "REF", + 3 + ], + [ + "REF", + 3 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "t1", + "t2", + "t", + "u" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "t2": [ + "REF", + 2 + ], + "u": [ + "REF", + 4 + ], + "t": [ + "REF", + 3 + ], + "t1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2 + ], + "2": [ + "TUPLE", + 3, + 4 + ], + "3": [ + "LIST", + [ + "REF", + 4 + ], + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing6.txt b/v3/example-code/aliasing/aliasing6.txt new file mode 100644 index 000000000..5f9c1e8b5 --- /dev/null +++ b/v3/example-code/aliasing/aliasing6.txt @@ -0,0 +1,7 @@ +# wow, this looks gross :) +t1 = (1, 2) +t2 = (3, 4) +t = [t1, t2] +u = [t, t, t] +u[1] = u +t[0] = u diff --git a/v3/example-code/aliasing/aliasing7.golden b/v3/example-code/aliasing/aliasing7.golden new file mode 100644 index 000000000..fc49379b4 --- /dev/null +++ b/v3/example-code/aliasing/aliasing7.golden @@ -0,0 +1,248 @@ +{ + "code": "x = (3, {'joe': 'M', 'jane': 'F'})\ny = (2, x)\nz = (1, y)\nw = (x, y, z)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 1 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 1 + ] + ], + "4": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "w" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 4 + ], + "w": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 1 + ] + ], + "4": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "5": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ] + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing7.golden_py3 b/v3/example-code/aliasing/aliasing7.golden_py3 new file mode 100644 index 000000000..fc49379b4 --- /dev/null +++ b/v3/example-code/aliasing/aliasing7.golden_py3 @@ -0,0 +1,248 @@ +{ + "code": "x = (3, {'joe': 'M', 'jane': 'F'})\ny = (2, x)\nz = (1, y)\nw = (x, y, z)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 1 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 1 + ] + ], + "4": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "w" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 4 + ], + "w": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "TUPLE", + 3, + [ + "REF", + 2 + ] + ], + "2": [ + "DICT", + [ + "jane", + "F" + ], + [ + "joe", + "M" + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 1 + ] + ], + "4": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "5": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ] + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing7.txt b/v3/example-code/aliasing/aliasing7.txt new file mode 100644 index 000000000..6e709dafc --- /dev/null +++ b/v3/example-code/aliasing/aliasing7.txt @@ -0,0 +1,5 @@ +x = (3, {'joe': 'M', 'jane': 'F'}) +y = (2, x) +z = (1, y) +w = (x, y, z) + diff --git a/v3/example-code/aliasing/aliasing8.golden b/v3/example-code/aliasing/aliasing8.golden new file mode 100644 index 000000000..20ddeb5fb --- /dev/null +++ b/v3/example-code/aliasing/aliasing8.golden @@ -0,0 +1,229 @@ +{ + "code": "# test whether heap objects \"jiggle\" between steps\nx = [1, [2, [3, None]]]\ny = [4, [5, [6, None]]]\n\nx[1][1] = y[1] # hopefully no jiggle!\n\nx = set(['apple', 'banana', 'carrot'])\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "LIST", + 3, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 4 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "LIST", + 3, + null + ], + "4": [ + "LIST", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "LIST", + 5, + [ + "REF", + 6 + ] + ], + "6": [ + "LIST", + 6, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 4 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 2, + [ + "REF", + 5 + ] + ], + "4": [ + "LIST", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "LIST", + 5, + [ + "REF", + 6 + ] + ], + "6": [ + "LIST", + 6, + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 4 + ], + "x": [ + "REF", + 7 + ] + }, + "heap": { + "4": [ + "LIST", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "LIST", + 5, + [ + "REF", + 6 + ] + ], + "6": [ + "LIST", + 6, + null + ], + "7": [ + "SET", + "carrot", + "apple", + "banana" + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing8.golden_py3 b/v3/example-code/aliasing/aliasing8.golden_py3 new file mode 100644 index 000000000..20ddeb5fb --- /dev/null +++ b/v3/example-code/aliasing/aliasing8.golden_py3 @@ -0,0 +1,229 @@ +{ + "code": "# test whether heap objects \"jiggle\" between steps\nx = [1, [2, [3, None]]]\ny = [4, [5, [6, None]]]\n\nx[1][1] = y[1] # hopefully no jiggle!\n\nx = set(['apple', 'banana', 'carrot'])\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "LIST", + 3, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 4 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "LIST", + 3, + null + ], + "4": [ + "LIST", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "LIST", + 5, + [ + "REF", + 6 + ] + ], + "6": [ + "LIST", + 6, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 4 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 2, + [ + "REF", + 5 + ] + ], + "4": [ + "LIST", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "LIST", + 5, + [ + "REF", + 6 + ] + ], + "6": [ + "LIST", + 6, + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 4 + ], + "x": [ + "REF", + 7 + ] + }, + "heap": { + "4": [ + "LIST", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "LIST", + 5, + [ + "REF", + 6 + ] + ], + "6": [ + "LIST", + 6, + null + ], + "7": [ + "SET", + "carrot", + "apple", + "banana" + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/aliasing/aliasing8.txt b/v3/example-code/aliasing/aliasing8.txt new file mode 100644 index 000000000..707d5196f --- /dev/null +++ b/v3/example-code/aliasing/aliasing8.txt @@ -0,0 +1,8 @@ +# test whether heap objects "jiggle" between steps +x = [1, [2, [3, None]]] +y = [4, [5, [6, None]]] + +x[1][1] = y[1] # hopefully no jiggle! + +x = set(['apple', 'banana', 'carrot']) + diff --git a/v3/example-code/chris-meyers/optFib.golden b/v3/example-code/chris-meyers/optFib.golden new file mode 100644 index 000000000..f3ea1e124 --- /dev/null +++ b/v3/example-code/chris-meyers/optFib.golden @@ -0,0 +1,51160 @@ +{ + "code": "# o p t F i b . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Animated Fibonacci Sequence\"\nBOLD = \"color:red;font-weight:bold;\"\n\nfibs = Matrix(1,20)\nfibs.tableAttr = 'cellspacing=\"0\" cellpadding=\"10\"'\nfibs[0,0] = 1\nfibs[0,1] = 1\n\nfor i in range(2,100) :\n fibs.style[0,i-1] = BOLD\n fibs.style[0,i-2] = BOLD\n fibs[0,i] = fibs[0,i-1]+fibs[0,i-2]\n fibs.title = \"Last 2 elements add for new one\"\n htmlPage.item1 = fibs.renderHtml(wrap=10)\n htmlPage.makeFrame() #break\n fibs.style[0,i-2] = \"\" # uncolor behind\n\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 2, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 2, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 3, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 3, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 4, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 4, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 5, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 5, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 6, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 6, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 7, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123581321
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123581321
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 7, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123581321
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123581321
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 8, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358132134
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358132134
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 8, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358132134
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358132134
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 9, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 9, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 10, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 10, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 11, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 11, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 12, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 12, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 13, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 13, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 14, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 14, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 15, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 15, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 16, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 16, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 17, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 17, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 18, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 18, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 19, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 19, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 20, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x21" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 20, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x21" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 21, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x22" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 21, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x22" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 22, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x23" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 22, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x23" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 23, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x24" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 23, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x24" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 24, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x25" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 24, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x25" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 25, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x26" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 25, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x26" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 26, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x27" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 26, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x27" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 27, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x28" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 27, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x28" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 28, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x29" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 28, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x29" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 29, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x30" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 29, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x30" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 30, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x31" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 30, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x31" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 31, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x32" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 31, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x32" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 32, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x33" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 32, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x33" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 33, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x34" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 33, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x34" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 34, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x35" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 34, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x35" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 35, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x36" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 35, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x36" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 36, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x37" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 36, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x37" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 37, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x38" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 37, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x38" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 38, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x39" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 38, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x39" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 39, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x40" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 39, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x40" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 40, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x41" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 40, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x41" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 41, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x42" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 41, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x42" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 42, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x43" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 42, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x43" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 43, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x44" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 43, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x44" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 44, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x45" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 44, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x45" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 45, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x46" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 45, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x46" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 46, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x47" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 46, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x47" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 47, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x48" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 47, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x48" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 48, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x49" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 48, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x49" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 49, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x50" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 49, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x50" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 50, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x51" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 50, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x51" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 51, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x52" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 51, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x52" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 52, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x53" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 52, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x53" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 53, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x54" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 53, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x54" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 54, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x55" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 54, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x55" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 55, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x56" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 55, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x56" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 56, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x57" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 56, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x57" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 57, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x58" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 57, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x58" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 58, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x59" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 58, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x59" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 59, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x60" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 59, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x60" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 60, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x61" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 60, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x61" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 61, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x62" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 61, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x62" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 62, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x63" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 62, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x63" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 63, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x64" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 63, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x64" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 64, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x65" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 64, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x65" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 65, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x66" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 65, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x66" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 66, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x67" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 66, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x67" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 67, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x68" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 67, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x68" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 68, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x69" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 68, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x69" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 69, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x70" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 69, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x70" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 70, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x71" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 70, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x71" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 71, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x72" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 71, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x72" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 72, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x73" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 72, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x73" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 73, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x74" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 73, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x74" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 74, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x75" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 74, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x75" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 75, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x76" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 75, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x76" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 76, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x77" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 76, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x77" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 77, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x78" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 77, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x78" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 78, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x79" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 78, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x79" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 79, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x80" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 79, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x80" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 80, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x81" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 80, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x81" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 81, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x82" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 81, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x82" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 82, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x83" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 82, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x83" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 83, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x84" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 83, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x84" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 84, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x85" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 84, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x85" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 85, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x86" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 85, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x86" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 86, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x87" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 86, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x87" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 87, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x88" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 87, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x88" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 88, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x89" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 88, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x89" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 89, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x90" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 89, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x90" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 90, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x91" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 90, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x91" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 91, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x92" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 91, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x92" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 92, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x93" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 92, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x93" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 93, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x94" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 93, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x94" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 94, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x95" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 94, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x95" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 95, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x96" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 95, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x96" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 96, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x97" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 96, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x97" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 97, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x98" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 97, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x98" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 98, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x99" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 98, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x99" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 99, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026354224848179261915075
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x100" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026354224848179261915075
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 99, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026354224848179261915075
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x100" + ] + }, + "line": 24, + "event": "step_line" + } + ] +} diff --git a/v3/example-code/chris-meyers/optFib.golden_py3 b/v3/example-code/chris-meyers/optFib.golden_py3 new file mode 100644 index 000000000..f3ea1e124 --- /dev/null +++ b/v3/example-code/chris-meyers/optFib.golden_py3 @@ -0,0 +1,51160 @@ +{ + "code": "# o p t F i b . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Animated Fibonacci Sequence\"\nBOLD = \"color:red;font-weight:bold;\"\n\nfibs = Matrix(1,20)\nfibs.tableAttr = 'cellspacing=\"0\" cellpadding=\"10\"'\nfibs[0,0] = 1\nfibs[0,1] = 1\n\nfor i in range(2,100) :\n fibs.style[0,i-1] = BOLD\n fibs.style[0,i-2] = BOLD\n fibs[0,i] = fibs[0,i-1]+fibs[0,i-2]\n fibs.title = \"Last 2 elements add for new one\"\n htmlPage.item1 = fibs.renderHtml(wrap=10)\n htmlPage.makeFrame() #break\n fibs.style[0,i-2] = \"\" # uncolor behind\n\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 2, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 2, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 3, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 3, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 4, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 4, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 5, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 5, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 6, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 6, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 7, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123581321
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123581321
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 7, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
1123581321
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
1123581321
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 8, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358132134
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358132134
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 8, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
112358132134
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
112358132134
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 9, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 9, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 10, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 10, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 11, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 11, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 12, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 12, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 13, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 13, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 14, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 14, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 15, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 15, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 16, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 16, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 17, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 17, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
8914423337761098715972584
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 18, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 18, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
89144233377610987159725844181
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 19, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 19, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 20, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x21" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 20, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x21" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 21, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x22" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 21, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x22" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 22, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x23" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 22, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x23" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
109461771128657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 23, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x24" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 23, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x24" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
10946177112865746368
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 24, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x25" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 24, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x25" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 25, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x26" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 25, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x26" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 26, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x27" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 26, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x27" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 27, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x28" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 27, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x28" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 28, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x29" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 28, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x29" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 29, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x30" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 29, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x30" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 30, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x31" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 30, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x31" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 31, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x32" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 31, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x32" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 32, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x33" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 32, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x33" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 33, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x34" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 33, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x34" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 34, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x35" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 34, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x35" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 35, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x36" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 35, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x36" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 36, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x37" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 36, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x37" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
134626921783093524578570288792274651493035224157817
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 37, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x38" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 37, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x38" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
13462692178309352457857028879227465149303522415781739088169
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 38, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x39" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 38, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x39" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 39, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x40" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 39, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x40" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 40, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x41" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 40, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x41" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 41, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x42" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 41, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x42" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 42, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x43" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 42, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x43" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 43, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x44" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 43, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x44" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 44, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x45" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 44, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x45" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 45, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x46" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 45, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x46" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 46, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x47" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 46, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x47" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
165580141267914296433494437701408733113490317018363119032971215073
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 47, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x48" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 47, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x48" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 48, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x49" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 48, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x49" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
16558014126791429643349443770140873311349031701836311903297121507348075269767778742049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 49, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x50" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 49, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x50" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 50, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x51" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 50, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x51" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 51, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x52" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 51, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x52" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
2036501107432951280099
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 52, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x53" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 52, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x53" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 53, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x54" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 53, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x54" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 54, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x55" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 54, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x55" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 55, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x56" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 55, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x56" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 56, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x57" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 56, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x57" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 57, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x58" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 57, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x58" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 58, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x59" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 58, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x59" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
20365011074329512800995331629117386267571272139583862445225851433717365435296162591286729879956722026041
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 59, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x60" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 59, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x60" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 60, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x61" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 60, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x61" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 61, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x62" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 61, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x62" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 62, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x63" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 62, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x63" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 63, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x64" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 63, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x64" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 64, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x65" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 64, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x65" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 65, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x66" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 65, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x66" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
250473078196140527395378816557470319842106102098577231716768017756527777890035288
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 66, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x67" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 66, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x67" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
25047307819614052739537881655747031984210610209857723171676801775652777789003528844945570212853
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 67, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x68" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 67, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x68" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 68, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x69" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 68, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x69" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 69, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x70" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 69, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x70" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 70, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x71" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 70, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x71" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 71, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x72" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 71, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x72" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 72, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x73" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 72, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x73" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 73, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x74" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 73, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x74" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 74, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x75" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 74, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x75" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 75, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x76" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 75, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x76" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 76, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x77" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 76, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x77" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 77, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x78" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 77, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x78" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
30806152117012949845401187926480651553304939313049695449286572111485077978050341645462290670755279397008847578944394323791464
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 78, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x79" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 78, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x79" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
3080615211701294984540118792648065155330493931304969544928657211148507797805034164546229067075527939700884757894439432379146414472334024676221
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 79, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x80" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 79, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x80" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 80, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x81" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 80, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x81" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 81, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x82" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 81, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x82" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 82, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x83" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 82, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x83" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 83, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x84" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 83, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x84" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 84, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x85" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 84, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x85" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 85, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x86" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 85, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x86" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 86, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x87" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 86, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x87" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 87, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x88" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 87, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x88" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
3788906237314390661305790721611591991948530947554971605006438163670882596954969111225854201961407274896736798916376386122581100087778366101931
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 88, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x89" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 88, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x89" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
37889062373143906613057907216115919919485309475549716050064381636708825969549691112258542019614072748967367989163763861225811000877783661019311779979416004714189
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 89, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x90" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 89, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x90" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 90, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x91" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 90, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x91" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 91, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x92" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 91, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x92" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 92, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x93" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 92, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x93" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 93, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x94" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 93, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x94" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 94, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x95" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 94, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x95" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
46600466103755303097540113804746346429122001604151218767381974027421986822316731940434634990099905
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 95, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x96" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 95, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x96" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
4660046610375530309754011380474634642912200160415121876738197402742198682231673194043463499009990551680708854858323072
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 96, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x97" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 96, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x97" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 97, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x98" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 97, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x98" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 98, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x99" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 98, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x99" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 99, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026354224848179261915075
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x100" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "fibs", + "i" + ], + "html_output": "\n\n

Animated Fibonacci Sequence

\n
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026354224848179261915075
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "i": 99, + "fibs": [ + "REF", + 19 + ], + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Fibonacci Sequence" + ], + [ + "item1", + "
Last 2 elements add for new one
\n\n \n
11235813213455
891442333776109871597258441816765
1094617711286574636875025121393196418317811514229832040
1346269217830935245785702887922746514930352241578173908816963245986102334155
1655801412679142964334944377014087331134903170183631190329712150734807526976777874204912586269025
203650110743295128009953316291173862675712721395838624452258514337173654352961625912867298799567220260411548008755920
2504730781961405273953788165574703198421061020985772317167680177565277778900352884494557021285372723460248141117669030460994190392490709135
308061521170129498454011879264806515533049393130496954492865721114850779780503416454622906707552793970088475789443943237914641447233402467622123416728348467685
378890623731439066130579072161159199194853094755497160500643816367088259695496911122585420196140727489673679891637638612258110008777836610193117799794160047141892880067194370816120
466004661037553030975401138047463464291220016041512187673819740274219868223167319404346349900999055168070885485832307283621143489848422977135301852344706746049218922995834555169026354224848179261915075
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x100" + ] + }, + "line": 24, + "event": "step_line" + } + ] +} diff --git a/v3/example-code/chris-meyers/optFib.txt b/v3/example-code/chris-meyers/optFib.txt new file mode 100644 index 000000000..f2d830a31 --- /dev/null +++ b/v3/example-code/chris-meyers/optFib.txt @@ -0,0 +1,25 @@ +# o p t F i b . p y +# +# Chris Meyers. 09/25/2013 +# +from htmlFrame import HtmlFrame +from matrix import Matrix + +htmlPage = HtmlFrame() +htmlPage.banner = "Animated Fibonacci Sequence" +BOLD = "color:red;font-weight:bold;" + +fibs = Matrix(1,20) +fibs.tableAttr = 'cellspacing="0" cellpadding="10"' +fibs[0,0] = 1 +fibs[0,1] = 1 + +for i in range(2,100) : + fibs.style[0,i-1] = BOLD + fibs.style[0,i-2] = BOLD + fibs[0,i] = fibs[0,i-1]+fibs[0,i-2] + fibs.title = "Last 2 elements add for new one" + htmlPage.item1 = fibs.renderHtml(wrap=10) + htmlPage.makeFrame() #break + fibs.style[0,i-2] = "" # uncolor behind + diff --git a/v3/example-code/chris-meyers/optKnapsack.golden b/v3/example-code/chris-meyers/optKnapsack.golden new file mode 100644 index 000000000..9fbdac5d5 --- /dev/null +++ b/v3/example-code/chris-meyers/optKnapsack.golden @@ -0,0 +1,14700 @@ +{ + "code": "# o p t K n a p s a c k . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nmaxwgt = 10\nvals = [0,10,40,30,50]\nwgts = [0, 5, 4, 6, 3]\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Knapsack Problem\"\nheaders=['wt'+str(i) for i in range(maxwgt+1)]\n\ninp = Matrix(len(vals),3)\ninp.title = \"Sack holds weight %s\" % maxwgt\ninp.dftFormat = \"
%03s
\"\ninp.tableAttr = 'border=\"1\" cellspacing=\"0\" cellpadding=\"4\"',\ninp.tableHeaders=['Item #','Weight','Value'] \nfor i in range(len(vals)) :\n inp.setrowVals(i, [i, wgts[i], vals[i]])\n\nframe = Matrix(1,2)\nframe[0,0] = inp.renderHtml()\nnItems = len(vals)\nbest = Matrix(nItems,maxwgt+1)\nbest.dftFormat = \"
%03s
\"\n\nfor i in range(1,nItems) :\n best.setrowVal(i,0)\nfor i in range(1,nItems) :\n for w in range(0,maxwgt+1) :\n remBest = best[i-1,w-wgts[i]]\n if remBest == None : remBest = 0\n newSolution = vals[i]+remBest\n if ((wgts[i] <= w and newSolution > best[i-1,w])) :\n best[i,w] = newSolution\n best.style[i,w] = \"background-color:pink\"\n best.title = \"Optimal solution for weight %s includes item %s\" % (w,i)\n best.tableAttr='border=\"1\" cellspacing=\"0\" cellpadding=\"4\"'\n best.tableHeaders=headers\n frame[0,1] = best.renderHtml()\n htmlPage.item1 = frame.renderHtml()\n htmlPage.makeFrame() #break\n else :\n best[i,w] = best[i-1,w]\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 6, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 6, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 7, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 7, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 8, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 8, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 9, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 9, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 1
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 4, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 4, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 6, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 6, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 7, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 7, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 8, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 8, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 40, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 9, + "vals": [ + "REF", + 18 + ], + "remBest": 10, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 9, + "vals": [ + "REF", + 18 + ], + "remBest": 10, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 10, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 2, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 10, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 2
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 3, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 70, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 3
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 3
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 3, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 70, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 3
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 3
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 3, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 3 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 3 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 3, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 3 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
  0
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 3 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
  0
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 4, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 4, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
  0
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 4 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
  0
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
  0
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 5 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
  0
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 6, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 6, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 50, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
  0
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 6 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
  0
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 7, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 7, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
  0
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 7 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
  0
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 8, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 8, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
  0
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 8 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
  0
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 9, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 9, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
  0
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 9 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
  0
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
 90
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 45, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "i", + "headers", + "inp", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "html_output": "\n\n

Knapsack Problem

\n
\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
 90
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 4, + "frame": [ + "REF", + 23 + ], + "inp": [ + "REF", + 22 + ], + "headers": [ + "REF", + 21 + ], + "w": 10, + "vals": [ + "REF", + 18 + ], + "remBest": 40, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 90, + "best": [ + "REF", + 24 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "\n\n \n
Sack holds weight 10
\n\n\n \n \n \n \n \n
Item #WeightValue
  0
  0
  0
  1
  5
 10
  2
  4
 40
  3
  6
 30
  4
  3
 50
Optimal solution for weight 10 includes item 4
\n\n\n \n \n \n \n \n
wt0wt1wt2wt3wt4wt5wt6wt7wt8wt9wt10
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 10
 10
 10
 10
 10
 10
   
   
   
   
 40
 40
 40
 40
 40
 50
 50
   
   
   
   
 40
 40
 40
 40
 40
 50
 70
   
   
   
 50
 50
 50
 50
 90
 90
 90
 90
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "22": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 33, + "event": "step_line" + } + ] +} diff --git a/v3/example-code/chris-meyers/optKnapsack.golden_py3 b/v3/example-code/chris-meyers/optKnapsack.golden_py3 new file mode 100644 index 000000000..2737c2218 --- /dev/null +++ b/v3/example-code/chris-meyers/optKnapsack.golden_py3 @@ -0,0 +1,339 @@ +{ + "code": "# o p t K n a p s a c k . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nmaxwgt = 10\nvals = [0,10,40,30,50]\nwgts = [0, 5, 4, 6, 3]\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Knapsack Problem\"\nheaders=['wt'+str(i) for i in range(maxwgt+1)]\n\ninp = Matrix(len(vals),3)\ninp.title = \"Sack holds weight %s\" % maxwgt\ninp.dftFormat = \"
%03s
\"\ninp.tableAttr = 'border=\"1\" cellspacing=\"0\" cellpadding=\"4\"',\ninp.tableHeaders=['Item #','Weight','Value'] \nfor i in range(len(vals)) :\n inp.setrowVals(i, [i, wgts[i], vals[i]])\n\nframe = Matrix(1,2)\nframe[0,0] = inp.renderHtml()\nnItems = len(vals)\nbest = Matrix(nItems,maxwgt+1)\nbest.dftFormat = \"
%03s
\"\n\nfor i in range(1,nItems) :\n best.setrowVal(i,0)\nfor i in range(1,nItems) :\n for w in range(0,maxwgt+1) :\n remBest = best[i-1,w-wgts[i]]\n if remBest == None : remBest = 0\n newSolution = vals[i]+remBest\n if ((wgts[i] <= w and newSolution > best[i-1,w])) :\n best[i,w] = newSolution\n best.style[i,w] = \"background-color:pink\"\n best.title = \"Optimal solution for weight %s includes item %s\" % (w,i)\n best.tableAttr='border=\"1\" cellspacing=\"0\" cellpadding=\"4\"'\n best.tableHeaders=headers\n frame[0,1] = best.renderHtml()\n htmlPage.item1 = frame.renderHtml()\n htmlPage.makeFrame() #break\n else :\n best[i,w] = best[i-1,w]\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "maxwgt", + "vals", + "wgts", + "htmlPage", + "headers", + "inp", + "i", + "frame", + "nItems", + "best", + "w", + "remBest", + "newSolution" + ], + "stdout": "", + "exception_msg": "TypeError: unorderable types: int() > NoneType()", + "func_name": "", + "stack_to_render": [], + "globals": { + "wgts": [ + "REF", + 19 + ], + "nItems": 5, + "Matrix": [ + "REF", + 5 + ], + "maxwgt": 10, + "i": 1, + "frame": [ + "REF", + 24 + ], + "inp": [ + "REF", + 23 + ], + "headers": [ + "REF", + 22 + ], + "w": 5, + "vals": [ + "REF", + 18 + ], + "remBest": 0, + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "newSolution": 10, + "best": [ + "REF", + 25 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "LIST", + 0, + 10, + 40, + 30, + 50 + ], + "19": [ + "LIST", + 0, + 5, + 4, + 6, + 3 + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Knapsack Problem" + ], + [ + "item1", + "" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "22": [ + "LIST", + "wt0", + "wt1", + "wt2", + "wt3", + "wt4", + "wt5", + "wt6", + "wt7", + "wt8", + "wt9", + "wt10" + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x3" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-5x11" + ] + }, + "line": 37, + "event": "exception" + } + ] +} diff --git a/v3/example-code/chris-meyers/optKnapsack.txt b/v3/example-code/chris-meyers/optKnapsack.txt new file mode 100644 index 000000000..e72b401ca --- /dev/null +++ b/v3/example-code/chris-meyers/optKnapsack.txt @@ -0,0 +1,47 @@ +# o p t K n a p s a c k . p y +# +# Chris Meyers. 09/25/2013 +# +from htmlFrame import HtmlFrame +from matrix import Matrix + +maxwgt = 10 +vals = [0,10,40,30,50] +wgts = [0, 5, 4, 6, 3] + +htmlPage = HtmlFrame() +htmlPage.banner = "Knapsack Problem" +headers=['wt'+str(i) for i in range(maxwgt+1)] + +inp = Matrix(len(vals),3) +inp.title = "Sack holds weight %s" % maxwgt +inp.dftFormat = "
%03s
" +inp.tableAttr = 'border="1" cellspacing="0" cellpadding="4"', +inp.tableHeaders=['Item #','Weight','Value'] +for i in range(len(vals)) : + inp.setrowVals(i, [i, wgts[i], vals[i]]) + +frame = Matrix(1,2) +frame[0,0] = inp.renderHtml() +nItems = len(vals) +best = Matrix(nItems,maxwgt+1) +best.dftFormat = "
%03s
" + +for i in range(1,nItems) : + best.setrowVal(i,0) +for i in range(1,nItems) : + for w in range(0,maxwgt+1) : + remBest = best[i-1,w-wgts[i]] + if remBest == None : remBest = 0 + newSolution = vals[i]+remBest + if ((wgts[i] <= w and newSolution > best[i-1,w])) : + best[i,w] = newSolution + best.style[i,w] = "background-color:pink" + best.title = "Optimal solution for weight %s includes item %s" % (w,i) + best.tableAttr='border="1" cellspacing="0" cellpadding="4"' + best.tableHeaders=headers + frame[0,1] = best.renderHtml() + htmlPage.item1 = frame.renderHtml() + htmlPage.makeFrame() #break + else : + best[i,w] = best[i-1,w] diff --git a/v3/example-code/chris-meyers/optMinpath.golden b/v3/example-code/chris-meyers/optMinpath.golden new file mode 100644 index 000000000..3d3b0e933 --- /dev/null +++ b/v3/example-code/chris-meyers/optMinpath.golden @@ -0,0 +1,5328 @@ +{ + "code": "# o p t M i n p a t h . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nfrom random import randint\nimport random\nrandom.seed(0) # for determinism\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Minimum Path from top to bottom\"\n\ndef renderTriangle(t) :\n t.dftFormat = \"
%03s
\"\n t.tableAttr='border=\"0\" cellspacing=\"0\" cellpadding=\"4\"'\n return t.renderHtml()\n\ndef minpath(nrows) :\n mat = Matrix(1,2)\n tri = Matrix(nrows,nrows)\n org = Matrix(nrows,nrows)\n for r in range(nrows) :\n vals = [randint(1,9) for c in range(r+1)]\n tri.setrowVals(r,vals)\n org.setrowVals(r,vals)\n\n org.title = \"Original Values\"\n mat[0,0] = renderTriangle(org)\n mat.tableAttr='border=\"1\" cellspacing=\"0\" cellpadding=\"4\"'\n\n tri.style.setrowVal(nrows-1,\"background-color:lightgreen\")\n for row in range(nrows-2,-1,-1) :\n for col in range(row+1) :\n left = tri[row+1,col]\n right= tri[row+1,col+1]\n this = tri[row,col]\n tri.style[row,col] = \"background-color:pink\"\n tri.title = \"Set to min(%s+%s, %s+%s)\" % (this,left,this,right)\n mat[0,1] = renderTriangle(tri)\n htmlPage.item1 = mat.renderHtml()\n htmlPage.makeFrame() #break\n tri[row,col] = best = min(this+left,this+right)\n tri.style[row,col] = \"background-color:lightgreen\"\n mat[0,1] = renderTriangle(tri)\n htmlPage.item1 = mat.renderHtml()\n htmlPage.banner = \"Miniumum cost is %s\" % best\n htmlPage.makeFrame() #break\n\nminpath(4)\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 3, + "mat": [ + "REF", + 23 + ], + "this": 3, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 8, + "col": 0, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(3+8, 3+3)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(3+8, 3+3)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 3, + "mat": [ + "REF", + 23 + ], + "this": 3, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 8, + "col": 0, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(3+8, 3+3)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(3+8, 3+3)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 5, + "mat": [ + "REF", + 23 + ], + "this": 5, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 3, + "col": 1, + "best": 6, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(5+3, 5+5)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  5
  4
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(5+3, 5+5)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  5
  4
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 5, + "mat": [ + "REF", + 23 + ], + "this": 5, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 3, + "col": 1, + "best": 6, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(5+3, 5+5)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  5
  4
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(5+3, 5+5)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  5
  4
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 6, + "mat": [ + "REF", + 23 + ], + "this": 4, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 5, + "col": 2, + "best": 8, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+5, 4+6)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  4
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+5, 4+6)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  4
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 6, + "mat": [ + "REF", + 23 + ], + "this": 4, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 5, + "col": 2, + "best": 8, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+5, 4+6)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  4
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+5, 4+6)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  4
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 8, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 6, + "col": 0, + "best": 9, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(7+6, 7+8)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(7+6, 7+8)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 8, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 6, + "col": 0, + "best": 9, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(7+6, 7+8)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(7+6, 7+8)
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 9, + "mat": [ + "REF", + 23 + ], + "this": 4, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 8, + "col": 1, + "best": 13, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+8, 4+9)
\n\n \n \n \n \n
  8
   
   
   
 13
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+8, 4+9)
\n\n \n \n \n \n
  8
   
   
   
 13
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 9, + "mat": [ + "REF", + 23 + ], + "this": 4, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 8, + "col": 1, + "best": 13, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+8, 4+9)
\n\n \n \n \n \n
  8
   
   
   
 13
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(4+8, 4+9)
\n\n \n \n \n \n
  8
   
   
   
 13
  4
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 12, + "mat": [ + "REF", + 23 + ], + "this": 8, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 13, + "col": 0, + "best": 12, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
  8
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
  8
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 12, + "mat": [ + "REF", + 23 + ], + "this": 8, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 13, + "col": 0, + "best": 12, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
  8
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
  8
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 12, + "mat": [ + "REF", + 23 + ], + "this": 8, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 13, + "col": 0, + "best": 20, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Miniumum cost is 20" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
 20
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 49, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Miniumum cost is 20

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
 20
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "c": 3, + "right": 12, + "mat": [ + "REF", + 23 + ], + "this": 8, + "nrows": 4, + "__return__": null, + "r": 3, + "vals": [ + "REF", + 29 + ], + "org": [ + "REF", + 25 + ], + "left": 13, + "col": 0, + "best": 20, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "c", + "vals", + "row", + "col", + "left", + "right", + "this", + "best", + "__return__" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Miniumum cost is 20" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
 20
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "29": [ + "LIST", + 8, + 3, + 5, + 6 + ] + }, + "line": 49, + "event": "return" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Miniumum cost is 20

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
 20
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "module", + "random" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Miniumum cost is 20" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  8
   
   
   
  7
  4
   
   
  3
  5
  4
   
  8
  3
  5
  6
Set to min(8+13, 8+12)
\n\n \n \n \n \n
 20
   
   
   
 13
 12
   
   
  6
  8
  9
   
  8
  3
  5
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ] + }, + "line": 51, + "event": "return" + } + ] +} diff --git a/v3/example-code/chris-meyers/optMinpath.golden_py3 b/v3/example-code/chris-meyers/optMinpath.golden_py3 new file mode 100644 index 000000000..58e6cf14b --- /dev/null +++ b/v3/example-code/chris-meyers/optMinpath.golden_py3 @@ -0,0 +1,5300 @@ +{ + "code": "# o p t M i n p a t h . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nfrom random import randint\nimport random\nrandom.seed(0) # for determinism\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Minimum Path from top to bottom\"\n\ndef renderTriangle(t) :\n t.dftFormat = \"
%03s
\"\n t.tableAttr='border=\"0\" cellspacing=\"0\" cellpadding=\"4\"'\n return t.renderHtml()\n\ndef minpath(nrows) :\n mat = Matrix(1,2)\n tri = Matrix(nrows,nrows)\n org = Matrix(nrows,nrows)\n for r in range(nrows) :\n vals = [randint(1,9) for c in range(r+1)]\n tri.setrowVals(r,vals)\n org.setrowVals(r,vals)\n\n org.title = \"Original Values\"\n mat[0,0] = renderTriangle(org)\n mat.tableAttr='border=\"1\" cellspacing=\"0\" cellpadding=\"4\"'\n\n tri.style.setrowVal(nrows-1,\"background-color:lightgreen\")\n for row in range(nrows-2,-1,-1) :\n for col in range(row+1) :\n left = tri[row+1,col]\n right= tri[row+1,col+1]\n this = tri[row,col]\n tri.style[row,col] = \"background-color:pink\"\n tri.title = \"Set to min(%s+%s, %s+%s)\" % (this,left,this,right)\n mat[0,1] = renderTriangle(tri)\n htmlPage.item1 = mat.renderHtml()\n htmlPage.makeFrame() #break\n tri[row,col] = best = min(this+left,this+right)\n tri.style[row,col] = \"background-color:lightgreen\"\n mat[0,1] = renderTriangle(tri)\n htmlPage.item1 = mat.renderHtml()\n htmlPage.banner = \"Miniumum cost is %s\" % best\n htmlPage.makeFrame() #break\n\nminpath(4)\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 5, + "mat": [ + "REF", + 23 + ], + "this": 5, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 7, + "col": 0, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(5+7, 5+5)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(5+7, 5+5)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 5, + "mat": [ + "REF", + 23 + ], + "this": 5, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 7, + "col": 0, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(5+7, 5+5)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(5+7, 5+5)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 8, + "mat": [ + "REF", + 23 + ], + "this": 9, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 5, + "col": 1, + "best": 10, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(9+5, 9+8)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
  9
  8
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(9+5, 9+8)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
  9
  8
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 8, + "mat": [ + "REF", + 23 + ], + "this": 9, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 5, + "col": 1, + "best": 10, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(9+5, 9+8)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
  9
  8
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(9+5, 9+8)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
  9
  8
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 6, + "mat": [ + "REF", + 23 + ], + "this": 8, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 8, + "col": 2, + "best": 14, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(8+8, 8+6)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
  8
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(8+8, 8+6)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
  8
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 6, + "mat": [ + "REF", + 23 + ], + "this": 8, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 8, + "col": 2, + "best": 14, + "row": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(8+8, 8+6)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
  8
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(8+8, 8+6)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
  8
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 14, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 10, + "col": 0, + "best": 14, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+10, 7+14)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+10, 7+14)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 14, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 10, + "col": 0, + "best": 14, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+10, 7+14)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+10, 7+14)
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 14, + "mat": [ + "REF", + 23 + ], + "this": 1, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 14, + "col": 1, + "best": 17, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(1+14, 1+14)
\n\n \n \n \n \n
  7
   
   
   
 17
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(1+14, 1+14)
\n\n \n \n \n \n
  7
   
   
   
 17
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 14, + "mat": [ + "REF", + 23 + ], + "this": 1, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 14, + "col": 1, + "best": 17, + "row": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(1+14, 1+14)
\n\n \n \n \n \n
  7
   
   
   
 17
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(1+14, 1+14)
\n\n \n \n \n \n
  7
   
   
   
 17
  1
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 15, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 17, + "col": 0, + "best": 15, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
  7
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
  7
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 15, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 17, + "col": 0, + "best": 15, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Minimum Path from top to bottom" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
  7
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 44, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Minimum Path from top to bottom

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
  7
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 15, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 17, + "col": 0, + "best": 22, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Miniumum cost is 22" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
 22
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 49, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Miniumum cost is 22

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
 22
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "minpath", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tri": [ + "REF", + 24 + ], + "right": 15, + "mat": [ + "REF", + 23 + ], + "this": 7, + "nrows": 4, + "__return__": null, + "r": 3, + "vals": [ + "REF", + 33 + ], + "org": [ + "REF", + 25 + ], + "left": 17, + "col": 0, + "best": 22, + "row": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "minpath", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "minpath_f1", + "ordered_varnames": [ + "nrows", + "mat", + "tri", + "org", + "r", + "vals", + "row", + "col", + "left", + "right", + "this", + "best", + "__return__" + ] + } + ], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Miniumum cost is 22" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
 22
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ], + "23": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x2" + ], + "24": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "25": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-4x4" + ], + "33": [ + "LIST", + 7, + 5, + 8, + 6 + ] + }, + "line": 49, + "event": "return" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "randint", + "random", + "htmlPage", + "renderTriangle", + "minpath" + ], + "html_output": "\n\n

Miniumum cost is 22

\n
\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
 22
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "renderTriangle": [ + "REF", + 21 + ], + "Matrix": [ + "REF", + 5 + ], + "randint": [ + "REF", + 18 + ], + "random": [ + "REF", + 19 + ], + "minpath": [ + "REF", + 22 + ], + "htmlPage": [ + "REF", + 20 + ], + "HtmlFrame": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "FUNCTION", + "randint(self, a, b)", + null + ], + "19": [ + "INSTANCE", + "module" + ], + "20": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Miniumum cost is 22" + ], + [ + "item1", + "\n\n \n
Original Values
\n\n \n \n \n \n
  7
   
   
   
  7
  1
   
   
  5
  9
  8
   
  7
  5
  8
  6
Set to min(7+17, 7+15)
\n\n \n \n \n \n
 22
   
   
   
 17
 15
   
   
 10
 14
 14
   
  7
  5
  8
  6
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "21": [ + "FUNCTION", + "renderTriangle(t)", + null + ], + "22": [ + "FUNCTION", + "minpath(nrows)", + null + ] + }, + "line": 51, + "event": "return" + } + ] +} diff --git a/v3/example-code/chris-meyers/optMinpath.txt b/v3/example-code/chris-meyers/optMinpath.txt new file mode 100644 index 000000000..a995454a5 --- /dev/null +++ b/v3/example-code/chris-meyers/optMinpath.txt @@ -0,0 +1,51 @@ +# o p t M i n p a t h . p y +# +# Chris Meyers. 09/25/2013 +# +from htmlFrame import HtmlFrame +from matrix import Matrix + +from random import randint +import random +random.seed(0) # for determinism + +htmlPage = HtmlFrame() +htmlPage.banner = "Minimum Path from top to bottom" + +def renderTriangle(t) : + t.dftFormat = "
%03s
" + t.tableAttr='border="0" cellspacing="0" cellpadding="4"' + return t.renderHtml() + +def minpath(nrows) : + mat = Matrix(1,2) + tri = Matrix(nrows,nrows) + org = Matrix(nrows,nrows) + for r in range(nrows) : + vals = [randint(1,9) for c in range(r+1)] + tri.setrowVals(r,vals) + org.setrowVals(r,vals) + + org.title = "Original Values" + mat[0,0] = renderTriangle(org) + mat.tableAttr='border="1" cellspacing="0" cellpadding="4"' + + tri.style.setrowVal(nrows-1,"background-color:lightgreen") + for row in range(nrows-2,-1,-1) : + for col in range(row+1) : + left = tri[row+1,col] + right= tri[row+1,col+1] + this = tri[row,col] + tri.style[row,col] = "background-color:pink" + tri.title = "Set to min(%s+%s, %s+%s)" % (this,left,this,right) + mat[0,1] = renderTriangle(tri) + htmlPage.item1 = mat.renderHtml() + htmlPage.makeFrame() #break + tri[row,col] = best = min(this+left,this+right) + tri.style[row,col] = "background-color:lightgreen" + mat[0,1] = renderTriangle(tri) + htmlPage.item1 = mat.renderHtml() + htmlPage.banner = "Miniumum cost is %s" % best + htmlPage.makeFrame() #break + +minpath(4) diff --git a/v3/example-code/chris-meyers/optSieve.golden b/v3/example-code/chris-meyers/optSieve.golden new file mode 100644 index 000000000..d46278082 --- /dev/null +++ b/v3/example-code/chris-meyers/optSieve.golden @@ -0,0 +1,22058 @@ +{ + "code": "# o p t S i e v e . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Animated Sieve of Erastosthenes\"\nBOLD = \"color:red;font-weight:bold;\"\n\nprimes = Matrix(1,20)\nprimes.tableAttr = 'cellspacing=\"0\" cellpadding=\"10\"'\nprimes[0,0] = 2\nnprimes = 1\n\nfor x in range(3,21) :\n primeSofar = True\n for px in range(nprimes) :\n primes.title = \"Testing if %s is divisible by primes so far\" % x\n primes.style[0,px] = BOLD\n htmlPage.item1 = primes.renderHtml(wrap=5)\n htmlPage.makeFrame() #break\n primes.style[0,px] = \"\"\n div = primes[0,px]\n if x % div == 0 : primeSofar = False\n if not primeSofar : break\n\n if primeSofar :\n primes[0,nprimes] = x\n nprimes += 1\n primes.title = \"Found a new prime %s\" % x\n else :\n primes.title = \"Not Prime: %s mod %s is zero\" % (x,div)\n htmlPage.item1 = primes.renderHtml(wrap=5)\n htmlPage.makeFrame()\n\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 1, + "x": 3, + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "primes": [ + "REF", + 19 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 3 is divisible by primes so far
\n\n \n
2
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 3 is divisible by primes so far
\n\n \n
2
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 1, + "x": 3, + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "primes": [ + "REF", + 19 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 3 is divisible by primes so far
\n\n \n
2
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 3
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 4, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 4 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 4 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 4, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 4 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 4 mod 2 is zero
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 5 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 5 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 5 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 5
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 6, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 6 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 6 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 6, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 6 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 6 mod 2 is zero
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 7
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 8, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 8 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 8 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 8, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 8 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 8 mod 2 is zero
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 9 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 9 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 9 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 9 mod 3 is zero
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 10, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 10 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 10 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 10, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 10 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 10 mod 2 is zero
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 11
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 12, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 12 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 12 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 12, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 12 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 12 mod 2 is zero
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 13
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 14, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 14 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 14 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 14, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 14 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 14 mod 2 is zero
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 15 mod 3 is zero
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 16, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 16 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 16 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 16, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 16 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 16 mod 2 is zero
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 17
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 18, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 18 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 18 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 18, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 18 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 18 mod 2 is zero
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 6, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 6, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 19
\n\n \n
235711
131719
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 8, + "x": 20, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 17, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 20 is divisible by primes so far
\n\n \n
235711
131719
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 20 is divisible by primes so far
\n\n \n
235711
131719
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 8, + "x": 20, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 17, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 20 is divisible by primes so far
\n\n \n
235711
131719
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + } + ] +} diff --git a/v3/example-code/chris-meyers/optSieve.golden_py3 b/v3/example-code/chris-meyers/optSieve.golden_py3 new file mode 100644 index 000000000..d46278082 --- /dev/null +++ b/v3/example-code/chris-meyers/optSieve.golden_py3 @@ -0,0 +1,22058 @@ +{ + "code": "# o p t S i e v e . p y\n#\n# Chris Meyers. 09/25/2013\n#\nfrom htmlFrame import HtmlFrame\nfrom matrix import Matrix\n\nhtmlPage = HtmlFrame()\nhtmlPage.banner = \"Animated Sieve of Erastosthenes\"\nBOLD = \"color:red;font-weight:bold;\"\n\nprimes = Matrix(1,20)\nprimes.tableAttr = 'cellspacing=\"0\" cellpadding=\"10\"'\nprimes[0,0] = 2\nnprimes = 1\n\nfor x in range(3,21) :\n primeSofar = True\n for px in range(nprimes) :\n primes.title = \"Testing if %s is divisible by primes so far\" % x\n primes.style[0,px] = BOLD\n htmlPage.item1 = primes.renderHtml(wrap=5)\n htmlPage.makeFrame() #break\n primes.style[0,px] = \"\"\n div = primes[0,px]\n if x % div == 0 : primeSofar = False\n if not primeSofar : break\n\n if primeSofar :\n primes[0,nprimes] = x\n nprimes += 1\n primes.title = \"Found a new prime %s\" % x\n else :\n primes.title = \"Not Prime: %s mod %s is zero\" % (x,div)\n htmlPage.item1 = primes.renderHtml(wrap=5)\n htmlPage.makeFrame()\n\n", + "trace": [ + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 1, + "x": 3, + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "primes": [ + "REF", + 19 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 3 is divisible by primes so far
\n\n \n
2
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 3 is divisible by primes so far
\n\n \n
2
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 1, + "x": 3, + "htmlPage": [ + "REF", + 18 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "primes": [ + "REF", + 19 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 3 is divisible by primes so far
\n\n \n
2
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 3
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 4, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 4 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 4 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 4, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 4 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 4 mod 2 is zero
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 5 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 5 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 5 is divisible by primes so far
\n\n \n
23
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 2, + "x": 5, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 5 is divisible by primes so far
\n\n \n
23
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 5
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 6, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 6 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 6 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 6, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 6 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 6 mod 2 is zero
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 7 is divisible by primes so far
\n\n \n
235
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 3, + "x": 7, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 7 is divisible by primes so far
\n\n \n
235
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 7
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 8, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 8 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 8 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 8, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 8 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 8 mod 2 is zero
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 9 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 9 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 9 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 9, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 9 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 9 mod 3 is zero
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 10, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 10 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 10 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 10, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 10 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 10 mod 2 is zero
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 11 is divisible by primes so far
\n\n \n
2357
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 4, + "x": 11, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 11 is divisible by primes so far
\n\n \n
2357
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 11
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 12, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 12 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 12 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 12, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 12 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 12 mod 2 is zero
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 13 is divisible by primes so far
\n\n \n
235711
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 5, + "x": 13, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 13 is divisible by primes so far
\n\n \n
235711
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 13
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 14, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 14 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 14 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 14, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 14 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 14 mod 2 is zero
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 15, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 15 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 15 mod 3 is zero
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 16, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 16 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 16 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 16, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 16 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 16 mod 2 is zero
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 6, + "x": 17, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 17 is divisible by primes so far
\n\n \n
235711
13
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 17
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 18, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 18 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 18 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 18, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 18 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Not Prime: 18 mod 2 is zero
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 1, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 2, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 2, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 3, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 3, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 5, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 4, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 7, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 5, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 11, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 6, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 6, + "primeSofar": true, + "nprimes": 7, + "x": 19, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 13, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 19 is divisible by primes so far
\n\n \n
235711
1317
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Found a new prime 19
\n\n \n
235711
131719
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 8, + "x": 20, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 17, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 20 is divisible by primes so far
\n\n \n
235711
131719
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "HtmlFrame", + "Matrix", + "htmlPage", + "BOLD", + "primes", + "nprimes", + "x", + "primeSofar", + "px", + "div" + ], + "html_output": "\n\n

Animated Sieve of Erastosthenes

\n
Testing if 20 is divisible by primes so far
\n\n \n
235711
131719
\n
\n
\n\n", + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Matrix": [ + "REF", + 5 + ], + "px": 0, + "primeSofar": true, + "nprimes": 8, + "x": 20, + "primes": [ + "REF", + 19 + ], + "HtmlFrame": [ + "REF", + 1 + ], + "div": 17, + "htmlPage": [ + "REF", + 18 + ], + "BOLD": "color:red;font-weight:bold;" + }, + "heap": { + "1": [ + "CLASS", + "HtmlFrame", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "makeEofPage", + [ + "REF", + 3 + ] + ], + [ + "makeFrame", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, template, banner)", + null + ], + "3": [ + "FUNCTION", + "makeEofPage(self)", + null + ], + "4": [ + "FUNCTION", + "makeFrame(self, template)", + null + ], + "5": [ + "CLASS", + "Matrix", + [], + [ + "__getitem__", + [ + "REF", + 6 + ] + ], + [ + "__init__", + [ + "REF", + 7 + ] + ], + [ + "__setitem__", + [ + "REF", + 8 + ] + ], + [ + "__str__", + [ + "REF", + 9 + ] + ], + [ + "getcol", + [ + "REF", + 10 + ] + ], + [ + "getrow", + [ + "REF", + 11 + ] + ], + [ + "populate", + [ + "REF", + 12 + ] + ], + [ + "renderHtml", + [ + "REF", + 13 + ] + ], + [ + "setcolVal", + [ + "REF", + 14 + ] + ], + [ + "setcolVals", + [ + "REF", + 15 + ] + ], + [ + "setrowVal", + [ + "REF", + 16 + ] + ], + [ + "setrowVals", + [ + "REF", + 17 + ] + ] + ], + "6": [ + "FUNCTION", + "__getitem__(self, coords)", + null + ], + "7": [ + "FUNCTION", + "__init__(self, nrows, ncols, data, dftFormat, dftStyle, title, tableAttr, tableHeaders, Expand)", + null + ], + "8": [ + "FUNCTION", + "__setitem__(self, coords, value)", + null + ], + "9": [ + "FUNCTION", + "__str__(self)", + null + ], + "10": [ + "FUNCTION", + "getcol(self, col)", + null + ], + "11": [ + "FUNCTION", + "getrow(self, row)", + null + ], + "12": [ + "FUNCTION", + "populate(self, lists)", + null + ], + "13": [ + "FUNCTION", + "renderHtml(self, wrap)", + null + ], + "14": [ + "FUNCTION", + "setcolVal(self, col, value)", + null + ], + "15": [ + "FUNCTION", + "setcolVals(self, col, values)", + null + ], + "16": [ + "FUNCTION", + "setrowVal(self, row, value)", + null + ], + "17": [ + "FUNCTION", + "setrowVals(self, row, values)", + null + ], + "18": [ + "INSTANCE", + "HtmlFrame", + [ + "banner", + "Animated Sieve of Erastosthenes" + ], + [ + "item1", + "
Testing if 20 is divisible by primes so far
\n\n \n
235711
131719
" + ], + [ + "item2", + "" + ], + [ + "item3", + "" + ], + [ + "outputOn", + true + ], + [ + "template", + "\n\n

%(banner)s

\n
%(item1)s
\n
%(item2)s
\n
%(item3)s
\n\n" + ] + ], + "19": [ + "INSTANCE_PPRINT", + "Matrix", + "Matrix-1x20" + ] + }, + "line": 24, + "event": "step_line" + } + ] +} diff --git a/v3/example-code/chris-meyers/optSieve.txt b/v3/example-code/chris-meyers/optSieve.txt new file mode 100644 index 000000000..98a2aa5da --- /dev/null +++ b/v3/example-code/chris-meyers/optSieve.txt @@ -0,0 +1,37 @@ +# o p t S i e v e . p y +# +# Chris Meyers. 09/25/2013 +# +from htmlFrame import HtmlFrame +from matrix import Matrix + +htmlPage = HtmlFrame() +htmlPage.banner = "Animated Sieve of Erastosthenes" +BOLD = "color:red;font-weight:bold;" + +primes = Matrix(1,20) +primes.tableAttr = 'cellspacing="0" cellpadding="10"' +primes[0,0] = 2 +nprimes = 1 + +for x in range(3,21) : + primeSofar = True + for px in range(nprimes) : + primes.title = "Testing if %s is divisible by primes so far" % x + primes.style[0,px] = BOLD + htmlPage.item1 = primes.renderHtml(wrap=5) + htmlPage.makeFrame() #break + primes.style[0,px] = "" + div = primes[0,px] + if x % div == 0 : primeSofar = False + if not primeSofar : break + + if primeSofar : + primes[0,nprimes] = x + nprimes += 1 + primes.title = "Found a new prime %s" % x + else : + primes.title = "Not Prime: %s mod %s is zero" % (x,div) + htmlPage.item1 = primes.renderHtml(wrap=5) + htmlPage.makeFrame() + diff --git a/v3/example-code/closures/closure1.golden b/v3/example-code/closures/closure1.golden new file mode 100644 index 000000000..51d175606 --- /dev/null +++ b/v3/example-code/closures/closure1.golden @@ -0,0 +1,567 @@ +{ + "code": "def foo(y):\n def bar(x):\n return x + y\n return bar\n\nb = foo(1)\nb(2)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure1.golden_py3 b/v3/example-code/closures/closure1.golden_py3 new file mode 100644 index 000000000..51d175606 --- /dev/null +++ b/v3/example-code/closures/closure1.golden_py3 @@ -0,0 +1,567 @@ +{ + "code": "def foo(y):\n def bar(x):\n return x + y\n return bar\n\nb = foo(1)\nb(2)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 2 + ], + "bar": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure1.txt b/v3/example-code/closures/closure1.txt new file mode 100644 index 000000000..1b784657b --- /dev/null +++ b/v3/example-code/closures/closure1.txt @@ -0,0 +1,7 @@ +def foo(y): + def bar(x): + return x + y + return bar + +b = foo(1) +b(2) diff --git a/v3/example-code/closures/closure2.golden b/v3/example-code/closures/closure2.golden new file mode 100644 index 000000000..57084967a --- /dev/null +++ b/v3/example-code/closures/closure2.golden @@ -0,0 +1,1764 @@ +{ + "code": "def foo(y):\n def bar(x):\n return x + y\n return bar\n\ndef foo_deux(y):\n def bar_deux(x):\n return x + y\n return bar_deux\n\nb = foo(1)\nb_deux = foo_deux(1000)\n\nb(2) \nb_deux(2000)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p", + "ordered_varnames": [ + "y", + "bar_deux" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 2000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar_deux", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "bar_deux_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 2000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar_deux", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "bar_deux_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 3000, + "x": 2000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar_deux", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "bar_deux_f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure2.golden_py3 b/v3/example-code/closures/closure2.golden_py3 new file mode 100644 index 000000000..57084967a --- /dev/null +++ b/v3/example-code/closures/closure2.golden_py3 @@ -0,0 +1,1764 @@ +{ + "code": "def foo(y):\n def bar(x):\n return x + y\n return bar\n\ndef foo_deux(y):\n def bar_deux(x):\n return x + y\n return bar_deux\n\nb = foo(1)\nb_deux = foo_deux(1000)\n\nb(2) \nb_deux(2000)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "foo_deux": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p", + "ordered_varnames": [ + "y", + "bar_deux" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b" + ], + "stdout": "", + "func_name": "foo_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 2000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar_deux", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "bar_deux_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 2000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar_deux", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "bar_deux_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "bar_deux", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 3000, + "x": 2000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar_deux", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "bar_deux_f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "foo_deux", + "b", + "b_deux" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 1, + "__return__": [ + "REF", + 3 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "y", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 1000, + "__return__": [ + "REF", + 4 + ], + "bar_deux": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo_deux", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_deux_f2_p_z", + "ordered_varnames": [ + "y", + "bar_deux", + "__return__" + ] + } + ], + "globals": { + "b_deux": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "foo_deux": [ + "REF", + 2 + ], + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(y)", + null + ], + "2": [ + "FUNCTION", + "foo_deux(y)", + null + ], + "3": [ + "FUNCTION", + "bar(x)", + 1 + ], + "4": [ + "FUNCTION", + "bar_deux(x)", + 2 + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure2.txt b/v3/example-code/closures/closure2.txt new file mode 100644 index 000000000..dd036ff92 --- /dev/null +++ b/v3/example-code/closures/closure2.txt @@ -0,0 +1,15 @@ +def foo(y): + def bar(x): + return x + y + return bar + +def foo_deux(y): + def bar_deux(x): + return x + y + return bar_deux + +b = foo(1) +b_deux = foo_deux(1000) + +b(2) +b_deux(2000) diff --git a/v3/example-code/closures/closure3.golden b/v3/example-code/closures/closure3.golden new file mode 100644 index 000000000..7a968114d --- /dev/null +++ b/v3/example-code/closures/closure3.golden @@ -0,0 +1,1400 @@ +{ + "code": "def foo(x):\n def bar(y):\n def baz(z):\n return len(x) + len(y) + len(z)\n return baz\n return bar([4,5,6,7])\n\nl = [1,2,3]\nx = foo(l)\nx([8,9,10,11,12])\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p", + "ordered_varnames": [ + "y", + "baz" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "z": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "z" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ], + "6": [ + "LIST", + 8, + 9, + 10, + 11, + 12 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "z": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "z" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ], + "6": [ + "LIST", + 8, + 9, + 10, + 11, + 12 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 12, + "z": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "z", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ], + "6": [ + "LIST", + 8, + 9, + 10, + 11, + 12 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure3.golden_py3 b/v3/example-code/closures/closure3.golden_py3 new file mode 100644 index 000000000..7a968114d --- /dev/null +++ b/v3/example-code/closures/closure3.golden_py3 @@ -0,0 +1,1400 @@ +{ + "code": "def foo(x):\n def bar(y):\n def baz(z):\n return len(x) + len(y) + len(z)\n return baz\n return bar([4,5,6,7])\n\nl = [1,2,3]\nx = foo(l)\nx([8,9,10,11,12])\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p", + "ordered_varnames": [ + "y", + "baz" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "l" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "z": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "z" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ], + "6": [ + "LIST", + 8, + 9, + 10, + 11, + 12 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "z": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "z" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ], + "6": [ + "LIST", + 8, + 9, + 10, + 11, + 12 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "baz", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 12, + "z": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "baz", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "baz_f3", + "ordered_varnames": [ + "z", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ], + "6": [ + "LIST", + 8, + 9, + 10, + 11, + 12 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "l", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": [ + "REF", + 2 + ], + "bar": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "bar", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "baz": [ + "REF", + 5 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "bar", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "bar_f2_p_z", + "ordered_varnames": [ + "y", + "baz", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 5 + ], + "foo": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "LIST", + 1, + 2, + 3 + ], + "3": [ + "FUNCTION", + "bar(y)", + 1 + ], + "4": [ + "LIST", + 4, + 5, + 6, + 7 + ], + "5": [ + "FUNCTION", + "baz(z)", + 2 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure3.txt b/v3/example-code/closures/closure3.txt new file mode 100644 index 000000000..9a34ed2d1 --- /dev/null +++ b/v3/example-code/closures/closure3.txt @@ -0,0 +1,10 @@ +def foo(x): + def bar(y): + def baz(z): + return len(x) + len(y) + len(z) + return baz + return bar([4,5,6,7]) + +l = [1,2,3] +x = foo(l) +x([8,9,10,11,12]) diff --git a/v3/example-code/closures/closure4.golden b/v3/example-code/closures/closure4.golden new file mode 100644 index 000000000..d26bb55af --- /dev/null +++ b/v3/example-code/closures/closure4.golden @@ -0,0 +1,1457 @@ +{ + "code": "def f(x):\n def g(y):\n return x + y\n return g\n\ng1 = f(1)\ng2 = f(2)\ng1(3) + g2(4)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 3, + "__return__": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f3", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 4, + "__return__": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure4.golden_py3 b/v3/example-code/closures/closure4.golden_py3 new file mode 100644 index 000000000..d26bb55af --- /dev/null +++ b/v3/example-code/closures/closure4.golden_py3 @@ -0,0 +1,1457 @@ +{ + "code": "def f(x):\n def g(y):\n return x + y\n return g\n\ng1 = f(1)\ng2 = f(2)\ng1(3) + g2(4)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 3, + "__return__": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f3", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 4, + "__return__": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "g1", + "g2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 2, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "g2": [ + "REF", + 3 + ], + "g1": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y)", + 1 + ], + "3": [ + "FUNCTION", + "g(y)", + 2 + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure4.txt b/v3/example-code/closures/closure4.txt new file mode 100644 index 000000000..664625712 --- /dev/null +++ b/v3/example-code/closures/closure4.txt @@ -0,0 +1,8 @@ +def f(x): + def g(y): + return x + y + return g + +g1 = f(1) +g2 = f(2) +g1(3) + g2(4) diff --git a/v3/example-code/closures/closure5.golden b/v3/example-code/closures/closure5.golden new file mode 100644 index 000000000..a9cf39d66 --- /dev/null +++ b/v3/example-code/closures/closure5.golden @@ -0,0 +1,7684 @@ +{ + "code": "def f(x):\n def g(y, z):\n if z == 0:\n return y\n return g(x+y+z, z-1)\n return lambda: g(0, x)\n\nfoo = f(3)\nbar = f(4)\nbaz = foo() + bar()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "__return__": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "__return__": 15, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "__return__": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "__return__": 15, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "__return__": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "__return__": 26, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "__return__": 26, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "__return__": 26, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "__return__": 26, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 26 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar", + "baz" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "bar": [ + "REF", + 5 + ], + "foo": [ + "REF", + 3 + ], + "baz": 41, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure5.golden_py3 b/v3/example-code/closures/closure5.golden_py3 new file mode 100644 index 000000000..a9cf39d66 --- /dev/null +++ b/v3/example-code/closures/closure5.golden_py3 @@ -0,0 +1,7684 @@ +{ + "code": "def f(x):\n def g(y, z):\n if z == 0:\n return y\n return g(x+y+z, z-1)\n return lambda: g(0, x)\n\nfoo = f(3)\nbar = f(4)\nbaz = foo() + bar()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "y": 15, + "__return__": 15, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f7", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "y": 11, + "__return__": 15, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f6", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 6, + "__return__": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f5", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 0, + "__return__": 15, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "z": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "y": 26, + "__return__": 26, + "z": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f13", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "z": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "y": 21, + "__return__": 26, + "z": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f12", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "z": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "y": 15, + "__return__": 26, + "z": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f11", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "z": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "y": 8, + "__return__": 26, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f10", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [] + }, + { + "frame_id": 9, + "encoded_locals": { + "y": 0, + "__return__": 26, + "z": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": "g_f9", + "ordered_varnames": [ + "y", + "z", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 26 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 3 + ], + "bar": [ + "REF", + 5 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "foo", + "bar", + "baz" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 4, + "g": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "x", + "g", + "__return__" + ] + } + ], + "globals": { + "bar": [ + "REF", + 5 + ], + "foo": [ + "REF", + 3 + ], + "baz": 41, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "g(y, z)", + 1 + ], + "3": [ + "FUNCTION", + "() ", + 1 + ], + "4": [ + "FUNCTION", + "g(y, z)", + 2 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/closure5.txt b/v3/example-code/closures/closure5.txt new file mode 100644 index 000000000..df094d247 --- /dev/null +++ b/v3/example-code/closures/closure5.txt @@ -0,0 +1,10 @@ +def f(x): + def g(y, z): + if z == 0: + return y + return g(x+y+z, z-1) + return lambda: g(0, x) + +foo = f(3) +bar = f(4) +baz = foo() + bar() diff --git a/v3/example-code/closures/lambda-param.golden b/v3/example-code/closures/lambda-param.golden new file mode 100644 index 000000000..0160bb7be --- /dev/null +++ b/v3/example-code/closures/lambda-param.golden @@ -0,0 +1,758 @@ +{ + "code": "def foo(x):\n bar(lambda y: x + y)\n\ndef bar(a):\n print(a(20))\n\nfoo(10)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 20, + "__return__": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "30\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "30\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 10 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "30\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/lambda-param.golden_py3 b/v3/example-code/closures/lambda-param.golden_py3 new file mode 100644 index 000000000..0160bb7be --- /dev/null +++ b/v3/example-code/closures/lambda-param.golden_py3 @@ -0,0 +1,758 @@ +{ + "code": "def foo(x):\n bar(lambda y: x + y)\n\ndef bar(a):\n print(a(20))\n\nfoo(10)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 20, + "__return__": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "30\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ], + "3": [ + "FUNCTION", + "(y) ", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "30\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 10 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "foo", + "bar" + ], + "stdout": "30\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 10 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "foo", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "foo_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ], + "bar": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo(x)", + null + ], + "2": [ + "FUNCTION", + "bar(a)", + null + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/lambda-param.txt b/v3/example-code/closures/lambda-param.txt new file mode 100644 index 000000000..4944f2c20 --- /dev/null +++ b/v3/example-code/closures/lambda-param.txt @@ -0,0 +1,7 @@ +def foo(x): + bar(lambda y: x + y) + +def bar(a): + print(a(20)) + +foo(10) diff --git a/v3/example-code/closures/student-torture.golden b/v3/example-code/closures/student-torture.golden new file mode 100644 index 000000000..bb48036aa --- /dev/null +++ b/v3/example-code/closures/student-torture.golden @@ -0,0 +1,11 @@ +{ + "code": "# Example to torture students\n# from UC Berkeley CS61a\n# (only works in Python 3)\n\ndef f(t):\n def g(t):\n def h():\n nonlocal t\n t += 1\n return h, lambda: t\n h, gt = g(0)\n return h, gt, lambda: t\n\nh, gt, ft = f(0)\nft(), gt()\nh()\nft(), gt()\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 8)", + "line": 8, + "event": "uncaught_exception", + "offset": 22 + } + ] +} diff --git a/v3/example-code/closures/student-torture.golden_py3 b/v3/example-code/closures/student-torture.golden_py3 new file mode 100644 index 000000000..7e66f0e0d --- /dev/null +++ b/v3/example-code/closures/student-torture.golden_py3 @@ -0,0 +1,3726 @@ +{ + "code": "# Example to torture students\n# from UC Berkeley CS61a\n# (only works in Python 3)\n\ndef f(t):\n def g(t):\n def h():\n nonlocal t\n t += 1\n return h, lambda: t\n h, gt = g(0)\n return h, gt, lambda: t\n\nh, gt, ft = f(0)\nft(), gt()\nh()\nft(), gt()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p", + "ordered_varnames": [ + "t", + "h" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g", + "h", + "gt" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "h", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "h", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "h_f5", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "h", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "h", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "h_f5", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "h", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "h", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "h_f5", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 17, + "event": "return" + } + ] +} diff --git a/v3/example-code/closures/student-torture.txt b/v3/example-code/closures/student-torture.txt new file mode 100644 index 000000000..c4fa0a10e --- /dev/null +++ b/v3/example-code/closures/student-torture.txt @@ -0,0 +1,17 @@ +# Example to torture students +# from UC Berkeley CS61a +# (only works in Python 3) + +def f(t): + def g(t): + def h(): + nonlocal t + t += 1 + return h, lambda: t + h, gt = g(0) + return h, gt, lambda: t + +h, gt, ft = f(0) +ft(), gt() +h() +ft(), gt() diff --git a/v3/example-code/comprehensions.golden b/v3/example-code/comprehensions.golden new file mode 100644 index 000000000..5e486bba9 --- /dev/null +++ b/v3/example-code/comprehensions.golden @@ -0,0 +1,1873 @@ +{ + "code": "# list comprehension\nl = [e**e for e in range(10) if e%2==0]\n# set comprehension\ns = {e**e for e in range(10) if e%2==0}\n# dict comprehension\nd = {e: e**e for e in range(10) if e%2==0}\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 0 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 1 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 2 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 3 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 4 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 6 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 7 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 8 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 9 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "__return__": [ + "REF", + 3 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": { + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "2": [ + "listiterator", + "" + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "e", + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 5 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "4": [ + "listiterator", + "" + ], + "5": [ + "DICT", + [ + 0, + 1 + ], + [ + 8, + 16777216 + ], + [ + 2, + 4 + ], + [ + 4, + 256 + ], + [ + 6, + 46656 + ] + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "e", + "l", + "s", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "s": [ + "REF", + 3 + ], + "e": 9, + "d": [ + "REF", + 5 + ], + "l": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "DICT", + [ + 0, + 1 + ], + [ + 8, + 16777216 + ], + [ + 2, + 4 + ], + [ + 4, + 256 + ], + [ + 6, + 46656 + ] + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/example-code/comprehensions.golden_py3 b/v3/example-code/comprehensions.golden_py3 new file mode 100644 index 000000000..a298f236c --- /dev/null +++ b/v3/example-code/comprehensions.golden_py3 @@ -0,0 +1,2152 @@ +{ + "code": "# list comprehension\nl = [e**e for e in range(10) if e%2==0]\n# set comprehension\ns = {e**e for e in range(10) if e%2==0}\n# dict comprehension\nd = {e: e**e for e in range(10) if e%2==0}\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 1 + ], + "__return__": [ + "REF", + 2 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": {}, + "heap": { + "1": [ + "INSTANCE", + "range_iterator" + ], + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "__return__": [ + "REF", + 4 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": { + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "3": [ + "INSTANCE", + "range_iterator" + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "l", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 5 + ], + "__return__": [ + "REF", + 6 + ], + "e": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": { + "s": [ + "REF", + 4 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "5": [ + "INSTANCE", + "range_iterator" + ], + "6": [ + "DICT", + [ + 0, + 1 + ], + [ + 8, + 16777216 + ], + [ + 2, + 4 + ], + [ + 4, + 256 + ], + [ + 6, + 46656 + ] + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "l", + "s", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "s": [ + "REF", + 4 + ], + "d": [ + "REF", + 6 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 1, + 4, + 256, + 46656, + 16777216 + ], + "4": [ + "SET", + 256, + 1, + 4, + 46656, + 16777216 + ], + "6": [ + "DICT", + [ + 0, + 1 + ], + [ + 8, + 16777216 + ], + [ + 2, + 4 + ], + [ + 4, + 256 + ], + [ + 6, + 46656 + ] + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/example-code/comprehensions.txt b/v3/example-code/comprehensions.txt new file mode 100644 index 000000000..31a29ed73 --- /dev/null +++ b/v3/example-code/comprehensions.txt @@ -0,0 +1,6 @@ +# list comprehension +l = [e**e for e in range(10) if e%2==0] +# set comprehension +s = {e**e for e in range(10) if e%2==0} +# dict comprehension +d = {e: e**e for e in range(10) if e%2==0} diff --git a/v3/example-code/decorators.golden b/v3/example-code/decorators.golden new file mode 100644 index 000000000..bcd1bcf21 --- /dev/null +++ b/v3/example-code/decorators.golden @@ -0,0 +1,1892 @@ +{ + "code": "def make_bold(fn):\n return lambda : \"\" + fn() + \"\"\n\ndef make_italic(fn):\n return lambda : \"\" + fn() + \"\"\n\n@make_bold\n@make_italic\ndef hello():\n return \"hello world\"\n \nhelloHTML = hello()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "make_bold": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_italic", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_italic", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_italic", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_italic", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_italic", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_bold", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_bold", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_bold", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_bold", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_bold", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "hello", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "hello", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "hello_f5", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "hello", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "hello", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "hello_f5", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "hello", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": "hello world" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "hello", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "hello_f5", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": "hello world" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": "hello world" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello", + "helloHTML" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ], + "helloHTML": "hello world" + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/example-code/decorators.golden_py3 b/v3/example-code/decorators.golden_py3 new file mode 100644 index 000000000..bcd1bcf21 --- /dev/null +++ b/v3/example-code/decorators.golden_py3 @@ -0,0 +1,1892 @@ +{ + "code": "def make_bold(fn):\n return lambda : \"\" + fn() + \"\"\n\ndef make_italic(fn):\n return lambda : \"\" + fn() + \"\"\n\n@make_bold\n@make_italic\ndef hello():\n return \"hello world\"\n \nhelloHTML = hello()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "make_bold": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_italic", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_italic", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_italic", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_italic", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_italic", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_bold", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_bold", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_bold", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "make_bold", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2", + "ordered_varnames": [ + "fn" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic" + ], + "stdout": "", + "func_name": "make_bold", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "hello", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "hello", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "hello_f5", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "hello", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "hello", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "hello_f5", + "ordered_varnames": [] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "hello", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": "hello world" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "hello", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "hello_f5", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": "hello world" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": "hello world" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "make_bold", + "make_italic", + "hello", + "helloHTML" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "fn": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_italic", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_italic_f1_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "fn": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "make_bold", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "make_bold_f2_p_z", + "ordered_varnames": [ + "fn", + "__return__" + ] + } + ], + "globals": { + "make_bold": [ + "REF", + 1 + ], + "make_italic": [ + "REF", + 2 + ], + "hello": [ + "REF", + 5 + ], + "helloHTML": "hello world" + }, + "heap": { + "1": [ + "FUNCTION", + "make_bold(fn)", + null + ], + "2": [ + "FUNCTION", + "make_italic(fn)", + null + ], + "3": [ + "FUNCTION", + "hello()", + null + ], + "4": [ + "FUNCTION", + "() ", + 1 + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/example-code/decorators.txt b/v3/example-code/decorators.txt new file mode 100644 index 000000000..b267bac5f --- /dev/null +++ b/v3/example-code/decorators.txt @@ -0,0 +1,12 @@ +def make_bold(fn): + return lambda : "" + fn() + "" + +def make_italic(fn): + return lambda : "" + fn() + "" + +@make_bold +@make_italic +def hello(): + return "hello world" + +helloHTML = hello() diff --git a/v3/example-code/fact.golden b/v3/example-code/fact.golden new file mode 100644 index 000000000..6f756d707 --- /dev/null +++ b/v3/example-code/fact.golden @@ -0,0 +1,1909 @@ +{ + "code": "# dumb recursive factorial\ndef fact(n):\n if (n <= 1):\n return 1\n else:\n return n * fact(n - 1)\n\nprint(fact(6))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 1, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 2, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 6, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 24, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 120, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 720, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "720\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/example-code/fact.golden_py3 b/v3/example-code/fact.golden_py3 new file mode 100644 index 000000000..6f756d707 --- /dev/null +++ b/v3/example-code/fact.golden_py3 @@ -0,0 +1,1909 @@ +{ + "code": "# dumb recursive factorial\ndef fact(n):\n if (n <= 1):\n return 1\n else:\n return n * fact(n - 1)\n\nprint(fact(6))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 1, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f6", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 2, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f5", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 6, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f4", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 24, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f3", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 120, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f2", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "", + "func_name": "fact", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 720, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "fact", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "fact_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "fact" + ], + "stdout": "720\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "fact": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "fact(n)", + null + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/example-code/fact.txt b/v3/example-code/fact.txt similarity index 88% rename from example-code/fact.txt rename to v3/example-code/fact.txt index d956324b0..a6b6f446f 100644 --- a/example-code/fact.txt +++ b/v3/example-code/fact.txt @@ -5,4 +5,4 @@ def fact(n): else: return n * fact(n - 1) -print fact(6) +print(fact(6)) diff --git a/v3/example-code/fib.golden b/v3/example-code/fib.golden new file mode 100644 index 000000000..7afe29d04 --- /dev/null +++ b/v3/example-code/fib.golden @@ -0,0 +1,7545 @@ +{ + "code": "# Infinite Fibonacci!!!\n\narr = [1, 1]\n\nprint(arr[0])\n\nwhile True:\n print(arr[-1])\n tmp = sum(arr)\n arr.append(tmp)\n del arr[0]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1, + 2 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 5 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5, + 8 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8, + 13 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13, + 21 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21, + 34 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34, + 55 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55, + 89 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89, + 144 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144, + 233 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233, + 377 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377, + 610 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610, + 987 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987, + 1597 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597, + 2584 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584, + 4181 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181, + 6765 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765, + 10946 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946, + 17711 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711, + 28657 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657, + 46368 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368, + 75025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025, + 121393 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393, + 196418 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418, + 317811 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811, + 514229 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229, + 832040 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040, + 1346269 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269, + 2178309 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309, + 3524578 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578, + 5702887 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887, + 9227465 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465, + 14930352 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352, + 24157817 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817, + 39088169 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169, + 63245986 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986, + 102334155 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155, + 165580141 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141, + 267914296 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296, + 433494437 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437, + 701408733 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733, + 1134903170 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170, + 1836311903 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903, + 2971215073 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073, + 4807526976 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976, + 7778742049 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049, + 12586269025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025, + 20365011074 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074, + 32951280099 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099, + 53316291173 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173, + 86267571272 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272, + 139583862445 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445, + 225851433717 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717, + 365435296162 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162, + 591286729879 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879, + 956722026041 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041, + 1548008755920 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920, + 2504730781961 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/example-code/fib.golden_py3 b/v3/example-code/fib.golden_py3 new file mode 100644 index 000000000..55c3b980b --- /dev/null +++ b/v3/example-code/fib.golden_py3 @@ -0,0 +1,7560 @@ +{ + "code": "# Infinite Fibonacci!!!\n\narr = [1, 1]\n\nprint(arr[0])\n\nwhile True:\n print(arr[-1])\n tmp = sum(arr)\n arr.append(tmp)\n del arr[0]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1, + 2 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 5 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5, + 8 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8, + 13 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13, + 21 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21, + 34 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34, + 55 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55, + 89 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89, + 144 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144, + 233 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233, + 377 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377, + 610 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610, + 987 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987, + 1597 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597, + 2584 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584, + 4181 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181, + 6765 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765, + 10946 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946, + 17711 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711, + 28657 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657, + 46368 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368, + 75025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025, + 121393 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393, + 196418 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418, + 317811 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811, + 514229 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229, + 832040 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040, + 1346269 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269, + 2178309 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309, + 3524578 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578, + 5702887 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887, + 9227465 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465, + 14930352 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352, + 24157817 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817, + 39088169 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169, + 63245986 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986, + 102334155 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155, + 165580141 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141, + 267914296 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296, + 433494437 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437, + 701408733 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733, + 1134903170 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170, + 1836311903 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903, + 2971215073 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073, + 4807526976 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976, + 7778742049 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049, + 12586269025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025, + 20365011074 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074, + 32951280099 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099, + 53316291173 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173, + 86267571272 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272, + 139583862445 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445, + 225851433717 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717, + 365435296162 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162, + 591286729879 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879, + 956722026041 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041, + 1548008755920 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920, + 2504730781961 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961, + 4052739537881 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881, + 6557470319842 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842, + 10610209857723 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723, + 17167680177565 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565, + 27777890035288 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288, + 44945570212853 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853, + 72723460248141 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141, + 117669030460994 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994, + 190392490709135 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135, + 308061521170129 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129, + 498454011879264 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264, + 806515533049393 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393, + 1304969544928657 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657, + 2111485077978050 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3416454622906707, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3416454622906707, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050, + 3416454622906707 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3416454622906707, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2111485077978050, + 3416454622906707 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/example-code/fib.txt b/v3/example-code/fib.txt similarity index 76% rename from example-code/fib.txt rename to v3/example-code/fib.txt index 96c8799c2..d5447f19b 100644 --- a/example-code/fib.txt +++ b/v3/example-code/fib.txt @@ -2,10 +2,10 @@ arr = [1, 1] -print arr[0] +print(arr[0]) while True: - print arr[-1] + print(arr[-1]) tmp = sum(arr) arr.append(tmp) del arr[0] diff --git a/v3/example-code/filter.golden b/v3/example-code/filter.golden new file mode 100644 index 000000000..1e1111344 --- /dev/null +++ b/v3/example-code/filter.golden @@ -0,0 +1,1505 @@ +{ + "code": "input = [(\"Mary\", 27), (\"Joe\", 30), (\"Ruth\", 43), (\"Bob\", 17), (\"Jenny\", 22)]\n\nyoungPeople = []\n\nfor (person, age) in input:\n if age < 30:\n youngPeople.append(person)\n else:\n print(\"HAHA \" + person + \" is too old!\")\n\nprint(\"There are \" + str(len(youngPeople)) + \" young people\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 1 + ], + "youngPeople": [ + "REF", + 7 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Mary", + "youngPeople": [ + "REF", + 7 + ], + "age": 27, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Mary", + "youngPeople": [ + "REF", + 7 + ], + "age": 27, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Mary", + "youngPeople": [ + "REF", + 7 + ], + "age": 27, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Joe", + "youngPeople": [ + "REF", + 7 + ], + "age": 30, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Joe", + "youngPeople": [ + "REF", + 7 + ], + "age": 30, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Joe", + "youngPeople": [ + "REF", + 7 + ], + "age": 30, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Ruth", + "youngPeople": [ + "REF", + 7 + ], + "age": 43, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Ruth", + "youngPeople": [ + "REF", + 7 + ], + "age": 43, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Ruth", + "youngPeople": [ + "REF", + 7 + ], + "age": 43, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Bob", + "youngPeople": [ + "REF", + 7 + ], + "age": 17, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Bob", + "youngPeople": [ + "REF", + 7 + ], + "age": 17, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Bob", + "youngPeople": [ + "REF", + 7 + ], + "age": 17, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob", + "Jenny" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob", + "Jenny" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\nThere are 3 young people\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob", + "Jenny" + ] + }, + "line": 11, + "event": "return" + } + ] +} diff --git a/v3/example-code/filter.golden_py3 b/v3/example-code/filter.golden_py3 new file mode 100644 index 000000000..1e1111344 --- /dev/null +++ b/v3/example-code/filter.golden_py3 @@ -0,0 +1,1505 @@ +{ + "code": "input = [(\"Mary\", 27), (\"Joe\", 30), (\"Ruth\", 43), (\"Bob\", 17), (\"Jenny\", 22)]\n\nyoungPeople = []\n\nfor (person, age) in input:\n if age < 30:\n youngPeople.append(person)\n else:\n print(\"HAHA \" + person + \" is too old!\")\n\nprint(\"There are \" + str(len(youngPeople)) + \" young people\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 1 + ], + "youngPeople": [ + "REF", + 7 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Mary", + "youngPeople": [ + "REF", + 7 + ], + "age": 27, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Mary", + "youngPeople": [ + "REF", + 7 + ], + "age": 27, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Mary", + "youngPeople": [ + "REF", + 7 + ], + "age": 27, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Joe", + "youngPeople": [ + "REF", + 7 + ], + "age": 30, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Joe", + "youngPeople": [ + "REF", + 7 + ], + "age": 30, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Joe", + "youngPeople": [ + "REF", + 7 + ], + "age": 30, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Ruth", + "youngPeople": [ + "REF", + 7 + ], + "age": 43, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Ruth", + "youngPeople": [ + "REF", + 7 + ], + "age": 43, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Ruth", + "youngPeople": [ + "REF", + 7 + ], + "age": 43, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Bob", + "youngPeople": [ + "REF", + 7 + ], + "age": 17, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Bob", + "youngPeople": [ + "REF", + 7 + ], + "age": 17, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Bob", + "youngPeople": [ + "REF", + 7 + ], + "age": 17, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob", + "Jenny" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob", + "Jenny" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "youngPeople", + "person", + "age" + ], + "stdout": "HAHA Joe is too old!\nHAHA Ruth is too old!\nThere are 3 young people\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "person": "Jenny", + "youngPeople": [ + "REF", + 7 + ], + "age": 22, + "input": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 3 + ], + [ + "REF", + 4 + ], + [ + "REF", + 5 + ], + [ + "REF", + 6 + ] + ], + "2": [ + "TUPLE", + "Mary", + 27 + ], + "3": [ + "TUPLE", + "Joe", + 30 + ], + "4": [ + "TUPLE", + "Ruth", + 43 + ], + "5": [ + "TUPLE", + "Bob", + 17 + ], + "6": [ + "TUPLE", + "Jenny", + 22 + ], + "7": [ + "LIST", + "Mary", + "Bob", + "Jenny" + ] + }, + "line": 11, + "event": "return" + } + ] +} diff --git a/example-code/filter.txt b/v3/example-code/filter.txt similarity index 62% rename from example-code/filter.txt rename to v3/example-code/filter.txt index f3b3916fb..e09de854c 100644 --- a/example-code/filter.txt +++ b/v3/example-code/filter.txt @@ -6,6 +6,6 @@ for (person, age) in input: if age < 30: youngPeople.append(person) else: - print "HAHA", person, "is too old!" + print("HAHA " + person + " is too old!") -print "There are", len(youngPeople), "young people" +print("There are " + str(len(youngPeople)) + " young people") diff --git a/v3/example-code/for-else.golden b/v3/example-code/for-else.golden new file mode 100644 index 000000000..479a67f6f --- /dev/null +++ b/v3/example-code/for-else.golden @@ -0,0 +1,1634 @@ +{ + "code": "# find primes using a for-else construct\nfor n in range(2, 10):\n x_range = range(2, n)\n for x in x_range:\n if n % x == 0:\n break\n else:\n # loop fell through without finding a factor\n print(n)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "n": 2 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 2 + }, + "heap": { + "1": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 2 + }, + "heap": { + "1": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 2 + }, + "heap": { + "1": [ + "LIST" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 3 + }, + "heap": { + "1": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3 + }, + "heap": { + "2": [ + "LIST", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 4, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 5, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 2 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 2 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 2 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 3 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 3 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 4 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 4 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 4 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 5, + "x": 4 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 6, + "x": 4 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 4 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 7, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 2 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 3 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 3 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 4 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 4 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 5 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 5 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 8, + "x": 6 + }, + "heap": { + "2": [ + "LIST", + 2, + 3, + 4, + 5, + 6 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 6 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 9, + "x": 2 + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 2 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 2 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 2 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 3 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 3 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 3 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 3 + ], + "n": 9, + "x": 3 + }, + "heap": { + "3": [ + "LIST", + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/for-else.golden_py3 b/v3/example-code/for-else.golden_py3 new file mode 100644 index 000000000..ad8845399 --- /dev/null +++ b/v3/example-code/for-else.golden_py3 @@ -0,0 +1,1475 @@ +{ + "code": "# find primes using a for-else construct\nfor n in range(2, 10):\n x_range = range(2, n)\n for x in x_range:\n if n % x == 0:\n break\n else:\n # loop fell through without finding a factor\n print(n)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "n": 2 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 3 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 3, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 4, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 4, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 5, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 5, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 6, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 4 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 6, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 7, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 4 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 5 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 5 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 7, + "x": 6 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 8, + "x": 6 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 6 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 8, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 1 + ], + "n": 9, + "x": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "range" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 2 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "n", + "x_range", + "x" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_range": [ + "REF", + 2 + ], + "n": 9, + "x": 3 + }, + "heap": { + "2": [ + "INSTANCE", + "range" + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/example-code/for-else.txt b/v3/example-code/for-else.txt new file mode 100644 index 000000000..1eaf5fff7 --- /dev/null +++ b/v3/example-code/for-else.txt @@ -0,0 +1,9 @@ +# find primes using a for-else construct +for n in range(2, 10): + x_range = range(2, n) + for x in x_range: + if n % x == 0: + break + else: + # loop fell through without finding a factor + print(n) diff --git a/v3/example-code/gen_primes.golden b/v3/example-code/gen_primes.golden new file mode 100644 index 000000000..480ece9bb --- /dev/null +++ b/v3/example-code/gen_primes.golden @@ -0,0 +1,12544 @@ +{ + "code": "# Use generator to generate a stream of primes\ndef gen_primes():\n n = 2\n while True:\n for x in range(2, n):\n if n % x == 0:\n break\n else:\n yield n\n n += 1\n\nfor p in gen_primes():\n print(p)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 2, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3, + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": 5, + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 3, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 3, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": 7, + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 4, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 4, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 5, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 5, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 8, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 8, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "__return__": 11, + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 3, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 3, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 4, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 4, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 5, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 5, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 6, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 6, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 7, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 7, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 8, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 8, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "__return__": 13, + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 4, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 4, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 5, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 5, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 6, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 6, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 7, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 7, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 8, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 8, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 9, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 9, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 10, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 10, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 14, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 14, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 15, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 15, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "__return__": 17, + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 3, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 3, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 4, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 4, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 5, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 5, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 6, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 6, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 7, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 7, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 8, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 8, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 9, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 9, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 10, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 10, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 11, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 11, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 12, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 12, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 14, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 14, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 17, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 17, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "__return__": 19, + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 4, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 4, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 5, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 5, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 6, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 6, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 7, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 7, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 8, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 8, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 9, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 9, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 10, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 10, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 11, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 11, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 12, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 12, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 13, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 13, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 14, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 14, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 16, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 16, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 19, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 19, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 20, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/example-code/gen_primes.golden_py3 b/v3/example-code/gen_primes.golden_py3 new file mode 100644 index 000000000..802f27735 --- /dev/null +++ b/v3/example-code/gen_primes.golden_py3 @@ -0,0 +1,12512 @@ +{ + "code": "# Use generator to generate a stream of primes\ndef gen_primes():\n n = 2\n while True:\n for x in range(2, n):\n if n % x == 0:\n break\n else:\n yield n\n n += 1\n\nfor p in gen_primes():\n print(p)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes" + ], + "stdout": "", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 2, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3, + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f2", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 2, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 2, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": 5, + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f3", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 3, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 2, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 3, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 3, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 4, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": 7, + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f4", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 5, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 2, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 3, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 4, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 4, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 5, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 5, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 6, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 8, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 8, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "__return__": 11, + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f5", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 7, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 2, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 3, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 3, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 4, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 4, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 5, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 5, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 6, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 6, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 7, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 7, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 8, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 8, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 10, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "__return__": 13, + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f6", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 11, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 14 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 16 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 2, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 3, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 4, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 4, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 5, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 5, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 6, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 6, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 7, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 7, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 8, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 8, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 9, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 9, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 10, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 10, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 12, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 14, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 14, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 15, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 15, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "__return__": 17, + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f7", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 13, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 18 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 2, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 3, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 3, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 4, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 4, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 5, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 5, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 6, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 6, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 7, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 7, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 8, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 8, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 9, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 9, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 10, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 10, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 11, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 11, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 12, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 12, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 14, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 14, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 16, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 17, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 17, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "__return__": 19, + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f8", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 17, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 22 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 2, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 3, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 4, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 4, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 5, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 5, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 6, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 6, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 7, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 7, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 8, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 8, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 9, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 9, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 10, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 10, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 11, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 11, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 12, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 12, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 13, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 13, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 14, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 14, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 16, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 16, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 18, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 19, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 19, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 20, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 20, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 21, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 21, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 22, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 22, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 22, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "__return__": 23, + "x": 22, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f9", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "p": 19, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 22, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 22, + "n": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 22, + "n": 24 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 2, + "n": 24 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 2, + "n": 24 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 2, + "n": 24 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 2, + "n": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 2, + "n": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 2, + "n": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 3, + "n": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 3, + "n": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_primes", + "p" + ], + "stdout": "2\n3\n5\n7\n11\n13\n17\n19\n23\n", + "func_name": "gen_primes", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 4, + "n": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_primes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_primes_f10", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "p": 23, + "gen_primes": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_primes()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/example-code/gen_primes.txt b/v3/example-code/gen_primes.txt new file mode 100644 index 000000000..2b047187b --- /dev/null +++ b/v3/example-code/gen_primes.txt @@ -0,0 +1,14 @@ +# Use generator to generate a stream of primes +def gen_primes(): + n = 2 + while True: + for x in range(2, n): + if n % x == 0: + break + else: + yield n + n += 1 + +for p in gen_primes(): + print(p) + diff --git a/v3/example-code/genexpr.golden b/v3/example-code/genexpr.golden new file mode 100644 index 000000000..aebc24d6d --- /dev/null +++ b/v3/example-code/genexpr.golden @@ -0,0 +1,2170 @@ +{ + "code": "# NB: there's a known bug when frames of exited functions are displayed\nx = (i for i in range(10))\n\nfor e in x:\n print(e)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 0, + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 1, + "__return__": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 2, + "__return__": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f4", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f4", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 3, + "__return__": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f4", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f5", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f5", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 4, + "__return__": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f5", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f6", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f6", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 5, + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f6", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f7", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f7", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 6, + "__return__": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f7", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f8", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f8", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 7, + "__return__": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f8", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f9", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f9", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 8, + "__return__": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f9", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f10", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f10", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9, + "__return__": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f10", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f11", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f11", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9, + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f11", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "listiterator", + "" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/example-code/genexpr.golden_py3 b/v3/example-code/genexpr.golden_py3 new file mode 100644 index 000000000..10ad0ebac --- /dev/null +++ b/v3/example-code/genexpr.golden_py3 @@ -0,0 +1,2170 @@ +{ + "code": "# NB: there's a known bug when frames of exited functions are displayed\nx = (i for i in range(10))\n\nfor e in x:\n print(e)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 0, + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 1, + "__return__": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 0 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 2, + "__return__": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f3", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 1 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f4", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f4", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 3, + "__return__": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f4", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 2 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f5", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f5", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 4, + "__return__": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f5", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 3 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f6", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f6", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 5, + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f6", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 4 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f7", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f7", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 6, + "__return__": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f7", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 5 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f8", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f8", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 7, + "__return__": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f8", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 6 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f9", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f9", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 8, + "__return__": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f9", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 7 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f10", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f10", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9, + "__return__": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f10", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 8 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f11", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f11", + "ordered_varnames": [ + ".0", + "i" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "i": 9, + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f11", + "ordered_varnames": [ + ".0", + "i", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "range_iterator" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "e" + ], + "stdout": "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "e": 9 + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/example-code/genexpr.txt b/v3/example-code/genexpr.txt new file mode 100644 index 000000000..46bac3e62 --- /dev/null +++ b/v3/example-code/genexpr.txt @@ -0,0 +1,5 @@ +# NB: there's a known bug when frames of exited functions are displayed +x = (i for i in range(10)) + +for e in x: + print(e) diff --git a/v3/example-code/happy.golden b/v3/example-code/happy.golden new file mode 100644 index 000000000..ea1a6a7e0 --- /dev/null +++ b/v3/example-code/happy.golden @@ -0,0 +1,952 @@ +{ + "code": "# From \"Teaching with Python\" by John Zelle\ndef happy():\n print(\"Happy Birthday to you!\")\n\ndef sing(P):\n happy()\n happy()\n print(\"Happy Birthday dear \" + P + \"!\")\n happy()\n\n# main\nsing(\"Fred\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f2", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f2", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f3", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f3", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f4", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f4", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P", + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/example-code/happy.golden_py3 b/v3/example-code/happy.golden_py3 new file mode 100644 index 000000000..ea1a6a7e0 --- /dev/null +++ b/v3/example-code/happy.golden_py3 @@ -0,0 +1,952 @@ +{ + "code": "# From \"Teaching with Python\" by John Zelle\ndef happy():\n print(\"Happy Birthday to you!\")\n\ndef sing(P):\n happy()\n happy()\n print(\"Happy Birthday dear \" + P + \"!\")\n happy()\n\n# main\nsing(\"Fred\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f2", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f2", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f3", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f3", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f4", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f4", + "ordered_varnames": [] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", + "func_name": "happy", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "P": "Fred" + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "happy", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "happy_f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", + "func_name": "sing", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "P": "Fred" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sing", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sing_f1", + "ordered_varnames": [ + "P", + "__return__" + ] + } + ], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "happy", + "sing" + ], + "stdout": "Happy Birthday to you!\nHappy Birthday to you!\nHappy Birthday dear Fred!\nHappy Birthday to you!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "sing": [ + "REF", + 2 + ], + "happy": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "happy()", + null + ], + "2": [ + "FUNCTION", + "sing(P)", + null + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/example-code/happy.txt b/v3/example-code/happy.txt new file mode 100644 index 000000000..c2dd73280 --- /dev/null +++ b/v3/example-code/happy.txt @@ -0,0 +1,12 @@ +# From "Teaching with Python" by John Zelle +def happy(): + print("Happy Birthday to you!") + +def sing(P): + happy() + happy() + print("Happy Birthday dear " + P + "!") + happy() + +# main +sing("Fred") diff --git a/v3/example-code/ins_sort.golden b/v3/example-code/ins_sort.golden new file mode 100644 index 000000000..837933f43 --- /dev/null +++ b/v3/example-code/ins_sort.golden @@ -0,0 +1,3538 @@ +{ + "code": "# from: http://www.ece.uci.edu/~chou/py02/python.html\ndef InsertionSort(A):\n for j in range(1, len(A)):\n key = A[j]\n i = j - 1\n while (i >= 0) and (A[i] > key):\n A[i+1] = A[i]\n i = i - 1\n A[i+1] = key\n\ninput = [8, 3, 9, 15, 29, 7, 10]\nInsertionSort(input)\nprint(input)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "j": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 2, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 3, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 4, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 15, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 15, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 9, + 15, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 9, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 9, + 15, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 6, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 5, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 5, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 5, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 29 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 29 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 29 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 15, + 29 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 15, + 29 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 15, + 29 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "__return__": null, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i", + "__return__" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "[3, 7, 8, 9, 10, 15, 29]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 13, + "event": "return" + } + ] +} diff --git a/v3/example-code/ins_sort.golden_py3 b/v3/example-code/ins_sort.golden_py3 new file mode 100644 index 000000000..837933f43 --- /dev/null +++ b/v3/example-code/ins_sort.golden_py3 @@ -0,0 +1,3538 @@ +{ + "code": "# from: http://www.ece.uci.edu/~chou/py02/python.html\ndef InsertionSort(A):\n for j in range(1, len(A)):\n key = A[j]\n i = j - 1\n while (i >= 0) and (A[i] > key):\n A[i+1] = A[i]\n i = i - 1\n A[i+1] = key\n\ninput = [8, 3, 9, 15, 29, 7, 10]\nInsertionSort(input)\nprint(input)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "j": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 3, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 8, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 1, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 2, + "key": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": -1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 2, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 3, + "key": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 3, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 4, + "key": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 4, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 7, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 29, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 15, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 15, + 15, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 2, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 9, + 15, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 9, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 9, + 9, + 15, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 1, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 8, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 5, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 6, + "key": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 0, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 5, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 5, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 10 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 5, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 29 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 29 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 29, + 29 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 4, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 15, + 29 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 15, + 29 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 15, + 15, + 29 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "InsertionSort", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "A": [ + "REF", + 2 + ], + "i": 3, + "__return__": null, + "j": 6, + "key": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "InsertionSort", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "InsertionSort_f1", + "ordered_varnames": [ + "A", + "j", + "key", + "i", + "__return__" + ] + } + ], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "InsertionSort", + "input" + ], + "stdout": "[3, 7, 8, 9, 10, 15, 29]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": [ + "REF", + 2 + ], + "InsertionSort": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "InsertionSort(A)", + null + ], + "2": [ + "LIST", + 3, + 7, + 8, + 9, + 10, + 15, + 29 + ] + }, + "line": 13, + "event": "return" + } + ] +} diff --git a/example-code/ins_sort.txt b/v3/example-code/ins_sort.txt similarity index 95% rename from example-code/ins_sort.txt rename to v3/example-code/ins_sort.txt index d6598fae2..4c2dacc0f 100644 --- a/example-code/ins_sort.txt +++ b/v3/example-code/ins_sort.txt @@ -10,4 +10,4 @@ def InsertionSort(A): input = [8, 3, 9, 15, 29, 7, 10] InsertionSort(input) -print input +print(input) diff --git a/v3/example-code/linked-lists/ll1.golden b/v3/example-code/linked-lists/ll1.golden new file mode 100644 index 000000000..1da0bbfb2 --- /dev/null +++ b/v3/example-code/linked-lists/ll1.golden @@ -0,0 +1,1977 @@ +{ + "code": "# use lists\nx = None\nfor i in range(6, 0, -1):\n x = [i, x]\n\n# use tuples\ny = None\nfor i in range(6, 0, -1):\n y = (i, y)\n\nx[1][0]=y[1][1] # courtesy of John DeNero!\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": null + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": null + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": null + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 6 + ], + "y": null + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 7 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 7 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 8 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 8 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 9 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 9 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 10 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 10 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 11 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 11 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 12 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ], + "12": [ + "TUPLE", + 1, + [ + "REF", + 11 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 12 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ], + "12": [ + "TUPLE", + 1, + [ + "REF", + 11 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + [ + "REF", + 10 + ], + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ], + "12": [ + "TUPLE", + 1, + [ + "REF", + 11 + ] + ] + }, + "line": 11, + "event": "return" + } + ] +} diff --git a/v3/example-code/linked-lists/ll1.golden_py3 b/v3/example-code/linked-lists/ll1.golden_py3 new file mode 100644 index 000000000..1da0bbfb2 --- /dev/null +++ b/v3/example-code/linked-lists/ll1.golden_py3 @@ -0,0 +1,1977 @@ +{ + "code": "# use lists\nx = None\nfor i in range(6, 0, -1):\n x = [i, x]\n\n# use tuples\ny = None\nfor i in range(6, 0, -1):\n y = (i, y)\n\nx[1][0]=y[1][1] # courtesy of John DeNero!\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": null + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": null + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": null + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 6 + ], + "y": null + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 7 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 7 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 8 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 8 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 9 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 9 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 10 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 10 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 11 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 11 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 12 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ], + "12": [ + "TUPLE", + 1, + [ + "REF", + 11 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ], + "y": [ + "REF", + 12 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + 2, + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ], + "12": [ + "TUPLE", + 1, + [ + "REF", + 11 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "LIST", + 6, + null + ], + "2": [ + "LIST", + 5, + [ + "REF", + 1 + ] + ], + "3": [ + "LIST", + 4, + [ + "REF", + 2 + ] + ], + "4": [ + "LIST", + 3, + [ + "REF", + 3 + ] + ], + "5": [ + "LIST", + [ + "REF", + 10 + ], + [ + "REF", + 4 + ] + ], + "6": [ + "LIST", + 1, + [ + "REF", + 5 + ] + ], + "7": [ + "TUPLE", + 6, + null + ], + "8": [ + "TUPLE", + 5, + [ + "REF", + 7 + ] + ], + "9": [ + "TUPLE", + 4, + [ + "REF", + 8 + ] + ], + "10": [ + "TUPLE", + 3, + [ + "REF", + 9 + ] + ], + "11": [ + "TUPLE", + 2, + [ + "REF", + 10 + ] + ], + "12": [ + "TUPLE", + 1, + [ + "REF", + 11 + ] + ] + }, + "line": 11, + "event": "return" + } + ] +} diff --git a/v3/example-code/linked-lists/ll1.txt b/v3/example-code/linked-lists/ll1.txt new file mode 100644 index 000000000..223f228be --- /dev/null +++ b/v3/example-code/linked-lists/ll1.txt @@ -0,0 +1,12 @@ +# use lists +x = None +for i in range(6, 0, -1): + x = [i, x] + +# use tuples +y = None +for i in range(6, 0, -1): + y = (i, y) + +x[1][0]=y[1][1] # courtesy of John DeNero! + diff --git a/v3/example-code/linked-lists/ll2.golden b/v3/example-code/linked-lists/ll2.golden new file mode 100644 index 000000000..4d47af384 --- /dev/null +++ b/v3/example-code/linked-lists/ll2.golden @@ -0,0 +1,8047 @@ +{ + "code": "# use dicts\nx = None\nfor i in range(6, 0, -1):\n x = {'data': i, 'next': x}\n\n# use objects\nclass Node:\n def __init__(self, data, next):\n self.data = data\n self.next = next\n\ny = None\nfor i in range(6, 0, -1):\n y = Node(i, y)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": null + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": null + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 13 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 14 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 13 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "y": [ + "REF", + 14 + ], + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 13 + ] + ] + ] + }, + "line": 13, + "event": "return" + } + ] +} diff --git a/v3/example-code/linked-lists/ll2.golden_py3 b/v3/example-code/linked-lists/ll2.golden_py3 new file mode 100644 index 000000000..4d47af384 --- /dev/null +++ b/v3/example-code/linked-lists/ll2.golden_py3 @@ -0,0 +1,8047 @@ +{ + "code": "# use dicts\nx = None\nfor i in range(6, 0, -1):\n x = {'data': i, 'next': x}\n\n# use objects\nclass Node:\n def __init__(self, data, next):\n self.data = data\n self.next = next\n\ny = None\nfor i in range(6, 0, -1):\n y = Node(i, y)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": null + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": null + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 9 + ], + "data": 6, + "next": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": null, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 6, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 10 + ], + "data": 5, + "next": [ + "REF", + 9 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f2", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 9 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 5, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 11 + ], + "data": 4, + "next": [ + "REF", + 10 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 10 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 4, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 12 + ], + "data": 3, + "next": [ + "REF", + 11 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f4", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 11 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 3, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 13 + ], + "data": 2, + "next": [ + "REF", + 12 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f5", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 12 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 2, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node" + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 14 + ], + "data": 1, + "next": [ + "REF", + 13 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f6", + "ordered_varnames": [ + "self", + "data", + "next", + "__return__" + ] + } + ], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 13 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 13 + ] + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "i": 1, + "y": [ + "REF", + 14 + ], + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 13 + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "Node", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Node": [ + "REF", + 7 + ], + "y": [ + "REF", + 14 + ], + "i": 1, + "x": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "2": [ + "DICT", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 1 + ] + ] + ], + "3": [ + "DICT", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 2 + ] + ] + ], + "4": [ + "DICT", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 3 + ] + ] + ], + "5": [ + "DICT", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 4 + ] + ] + ], + "6": [ + "DICT", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 5 + ] + ] + ], + "7": [ + "CLASS", + "Node", + [], + [ + "__init__", + [ + "REF", + 8 + ] + ] + ], + "8": [ + "FUNCTION", + "__init__(self, data, next)", + null + ], + "9": [ + "INSTANCE", + "Node", + [ + "data", + 6 + ], + [ + "next", + null + ] + ], + "10": [ + "INSTANCE", + "Node", + [ + "data", + 5 + ], + [ + "next", + [ + "REF", + 9 + ] + ] + ], + "11": [ + "INSTANCE", + "Node", + [ + "data", + 4 + ], + [ + "next", + [ + "REF", + 10 + ] + ] + ], + "12": [ + "INSTANCE", + "Node", + [ + "data", + 3 + ], + [ + "next", + [ + "REF", + 11 + ] + ] + ], + "13": [ + "INSTANCE", + "Node", + [ + "data", + 2 + ], + [ + "next", + [ + "REF", + 12 + ] + ] + ], + "14": [ + "INSTANCE", + "Node", + [ + "data", + 1 + ], + [ + "next", + [ + "REF", + 13 + ] + ] + ] + }, + "line": 13, + "event": "return" + } + ] +} diff --git a/v3/example-code/linked-lists/ll2.txt b/v3/example-code/linked-lists/ll2.txt new file mode 100644 index 000000000..3a1181499 --- /dev/null +++ b/v3/example-code/linked-lists/ll2.txt @@ -0,0 +1,15 @@ +# use dicts +x = None +for i in range(6, 0, -1): + x = {'data': i, 'next': x} + +# use objects +class Node: + def __init__(self, data, next): + self.data = data + self.next = next + +y = None +for i in range(6, 0, -1): + y = Node(i, y) + diff --git a/v3/example-code/list-comp.golden b/v3/example-code/list-comp.golden new file mode 100644 index 000000000..6a4ea270a --- /dev/null +++ b/v3/example-code/list-comp.golden @@ -0,0 +1,404 @@ +{ + "code": "ppl = ['Alice', 'Bob', 'Carol', 'Doug']\nexcited_ppl = [e + '!!' for e in ppl]\nppl_len = [len(x) for x in ppl]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Alice", + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Bob", + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Carol", + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Doug", + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Doug", + "excited_ppl": [ + "REF", + 2 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e", + "excited_ppl", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Doug", + "ppl": [ + "REF", + 1 + ], + "excited_ppl": [ + "REF", + 2 + ], + "x": "Alice" + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e", + "excited_ppl", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Doug", + "ppl": [ + "REF", + 1 + ], + "excited_ppl": [ + "REF", + 2 + ], + "x": "Bob" + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e", + "excited_ppl", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Doug", + "ppl": [ + "REF", + 1 + ], + "excited_ppl": [ + "REF", + 2 + ], + "x": "Carol" + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e", + "excited_ppl", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "Doug", + "ppl": [ + "REF", + 1 + ], + "excited_ppl": [ + "REF", + 2 + ], + "x": "Doug" + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "e", + "excited_ppl", + "x", + "ppl_len" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "excited_ppl": [ + "REF", + 2 + ], + "ppl_len": [ + "REF", + 3 + ], + "e": "Doug", + "x": "Doug", + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "3": [ + "LIST", + 5, + 3, + 5, + 4 + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/example-code/list-comp.golden_py3 b/v3/example-code/list-comp.golden_py3 new file mode 100644 index 000000000..5d999ccae --- /dev/null +++ b/v3/example-code/list-comp.golden_py3 @@ -0,0 +1,926 @@ +{ + "code": "ppl = ['Alice', 'Bob', 'Carol', 'Doug']\nexcited_ppl = [e + '!!' for e in ppl]\nppl_len = [len(x) for x in ppl]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": "Alice" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": "Bob" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": "Carol" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "e": "Doug" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 2 + ], + "__return__": [ + "REF", + 3 + ], + "e": "Doug" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": { + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "2": [ + "INSTANCE", + "list_iterator" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "x": "Alice" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "x" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "x": "Bob" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "x" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "x": "Carol" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "x" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "x": "Doug" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "x" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + ".0": [ + "REF", + 4 + ], + "x": "Doug", + "__return__": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f2", + "ordered_varnames": [ + ".0", + "x", + "__return__" + ] + } + ], + "globals": { + "excited_ppl": [ + "REF", + 3 + ], + "ppl": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "4": [ + "INSTANCE", + "list_iterator" + ], + "5": [ + "LIST", + 5, + 3, + 5, + 4 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "ppl", + "excited_ppl", + "ppl_len" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ppl": [ + "REF", + 1 + ], + "excited_ppl": [ + "REF", + 3 + ], + "ppl_len": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "LIST", + "Alice", + "Bob", + "Carol", + "Doug" + ], + "3": [ + "LIST", + "Alice!!", + "Bob!!", + "Carol!!", + "Doug!!" + ], + "5": [ + "LIST", + 5, + 3, + 5, + 4 + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/example-code/list-comp.txt b/v3/example-code/list-comp.txt new file mode 100644 index 000000000..b5a158904 --- /dev/null +++ b/v3/example-code/list-comp.txt @@ -0,0 +1,3 @@ +ppl = ['Alice', 'Bob', 'Carol', 'Doug'] +excited_ppl = [e + '!!' for e in ppl] +ppl_len = [len(x) for x in ppl] diff --git a/v3/example-code/map.golden b/v3/example-code/map.golden new file mode 100644 index 000000000..5c65be1bb --- /dev/null +++ b/v3/example-code/map.golden @@ -0,0 +1,7043 @@ +{ + "code": "# Functional programming with map\n# Adapted from MIT 6.01 course notes (Section A.2.3)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\ndef map(func, lst):\n if lst == []:\n return []\n else:\n return [func(lst[0])] + map(func, lst[1:])\n \ndef halveElements(lst):\n return map(lambda x: x / 2.0, lst)\n \ninput = [2, 4, 6, 8, 10]\noutput = halveElements(input)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "halveElements", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "halveElements", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "1.0" + ], + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "2.0" + ], + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "3.0" + ], + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "4.0" + ], + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "5.0" + ], + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": [ + "REF", + 10 + ], + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ], + "10": [ + "LIST" + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": [ + "REF", + 11 + ], + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "11": [ + "LIST", + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": [ + "REF", + 12 + ], + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "12": [ + "LIST", + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": [ + "REF", + 13 + ], + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "13": [ + "LIST", + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 14 + ], + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "14": [ + "LIST", + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 15 + ], + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "15": [ + "LIST", + [ + "SPECIAL_FLOAT", + "1.0" + ], + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "halveElements", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 15 + ], + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "15": [ + "LIST", + [ + "SPECIAL_FLOAT", + "1.0" + ], + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input", + "output" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 15 + ], + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p_z", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "output": [ + "REF", + 15 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "15": [ + "LIST", + [ + "SPECIAL_FLOAT", + "1.0" + ], + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/v3/example-code/map.golden_py3 b/v3/example-code/map.golden_py3 new file mode 100644 index 000000000..5c65be1bb --- /dev/null +++ b/v3/example-code/map.golden_py3 @@ -0,0 +1,7043 @@ +{ + "code": "# Functional programming with map\n# Adapted from MIT 6.01 course notes (Section A.2.3)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\ndef map(func, lst):\n if lst == []:\n return []\n else:\n return [func(lst[0])] + map(func, lst[1:])\n \ndef halveElements(lst):\n return map(lambda x: x / 2.0, lst)\n \ninput = [2, 4, 6, 8, 10]\noutput = halveElements(input)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "halveElements", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "halveElements", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "1.0" + ], + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "2.0" + ], + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "3.0" + ], + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "4.0" + ], + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 12, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "5.0" + ], + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": [ + "REF", + 10 + ], + "lst": [ + "REF", + 9 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f12", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "9": [ + "LIST" + ], + "10": [ + "LIST" + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": [ + "REF", + 11 + ], + "lst": [ + "REF", + 8 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "8": [ + "LIST", + 10 + ], + "11": [ + "LIST", + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": [ + "REF", + 12 + ], + "lst": [ + "REF", + 7 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "7": [ + "LIST", + 8, + 10 + ], + "12": [ + "LIST", + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": [ + "REF", + 13 + ], + "lst": [ + "REF", + 6 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "6": [ + "LIST", + 6, + 8, + 10 + ], + "13": [ + "LIST", + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 14 + ], + "lst": [ + "REF", + 5 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "5": [ + "LIST", + 4, + 6, + 8, + 10 + ], + "14": [ + "LIST", + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 15 + ], + "lst": [ + "REF", + 3 + ], + "func": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "func", + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ], + "15": [ + "LIST", + [ + "SPECIAL_FLOAT", + "1.0" + ], + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input" + ], + "stdout": "", + "func_name": "halveElements", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 15 + ], + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "15": [ + "LIST", + [ + "SPECIAL_FLOAT", + "1.0" + ], + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "halveElements", + "input", + "output" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 15 + ], + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "halveElements", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "halveElements_f1_p_z", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "halveElements": [ + "REF", + 2 + ], + "output": [ + "REF", + 15 + ], + "input": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(func, lst)", + null + ], + "2": [ + "FUNCTION", + "halveElements(lst)", + null + ], + "3": [ + "LIST", + 2, + 4, + 6, + 8, + 10 + ], + "15": [ + "LIST", + [ + "SPECIAL_FLOAT", + "1.0" + ], + [ + "SPECIAL_FLOAT", + "2.0" + ], + [ + "SPECIAL_FLOAT", + "3.0" + ], + [ + "SPECIAL_FLOAT", + "4.0" + ], + [ + "SPECIAL_FLOAT", + "5.0" + ] + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/example-code/map.txt b/v3/example-code/map.txt similarity index 100% rename from example-code/map.txt rename to v3/example-code/map.txt diff --git a/v3/example-code/memo_fib.golden b/v3/example-code/memo_fib.golden new file mode 100644 index 000000000..abb03047a --- /dev/null +++ b/v3/example-code/memo_fib.golden @@ -0,0 +1,10715 @@ +{ + "code": "# use memoization to make the recursive Fibonacci\n# implementation only take O(n) time and space\n\nMemoTable = {}\n\ndef MemoizedFib(n):\n if n <= 2:\n return 1\n\n if n in MemoTable:\n return MemoTable[n]\n\n MemoTable[n] = MemoizedFib(n-1) + MemoizedFib(n-2)\n return MemoTable[n]\n\n\nres = MemoizedFib(10)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": 1, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 1, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": 1, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 3, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 5, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "__return__": 3, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 8, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": 5, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 13, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": 8, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 21, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": 13, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 34, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "__return__": 21, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ], + [ + 10, + 55 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 55, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ], + [ + 10, + 55 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib", + "res" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "res": 55, + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ], + [ + 10, + 55 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 17, + "event": "return" + } + ] +} diff --git a/v3/example-code/memo_fib.golden_py3 b/v3/example-code/memo_fib.golden_py3 new file mode 100644 index 000000000..abb03047a --- /dev/null +++ b/v3/example-code/memo_fib.golden_py3 @@ -0,0 +1,10715 @@ +{ + "code": "# use memoization to make the recursive Fibonacci\n# implementation only take O(n) time and space\n\nMemoTable = {}\n\ndef MemoizedFib(n):\n if n <= 2:\n return 1\n\n if n in MemoTable:\n return MemoTable[n]\n\n MemoTable[n] = MemoizedFib(n-1) + MemoizedFib(n-2)\n return MemoTable[n]\n\n\nres = MemoizedFib(10)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": 1, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f9", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 1, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f10", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f8", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": 1, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f11", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 3, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f7", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 2, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f12", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 5, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f6", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "__return__": 3, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f13", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 8, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f5", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": 5, + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f14", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 13, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f4", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": 8, + "n": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f15", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 21, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f3", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": 13, + "n": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f16", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 34, + "n": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f2", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "__return__": 21, + "n": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f17", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ], + [ + 10, + 55 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib" + ], + "stdout": "", + "func_name": "MemoizedFib", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 55, + "n": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "MemoizedFib", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "MemoizedFib_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ], + [ + 10, + 55 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "MemoTable", + "MemoizedFib", + "res" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MemoizedFib": [ + "REF", + 2 + ], + "res": 55, + "MemoTable": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 3, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 5 + ], + [ + 6, + 8 + ], + [ + 7, + 13 + ], + [ + 8, + 21 + ], + [ + 9, + 34 + ], + [ + 10, + 55 + ] + ], + "2": [ + "FUNCTION", + "MemoizedFib(n)", + null + ] + }, + "line": 17, + "event": "return" + } + ] +} diff --git a/example-code/memo_fib.txt b/v3/example-code/memo_fib.txt similarity index 100% rename from example-code/memo_fib.txt rename to v3/example-code/memo_fib.txt diff --git a/v3/example-code/metaclass.golden b/v3/example-code/metaclass.golden new file mode 100644 index 000000000..2dc46e253 --- /dev/null +++ b/v3/example-code/metaclass.golden @@ -0,0 +1,1883 @@ +{ + "code": "class Metaclass(type):\n def __new__(mcs, name, bases, dict_):\n print(\"__NEW__\")\n cls = super(Metaclass, mcs).__new__(mcs, name, bases, dict_)\n return cls\n\n def __init__(cls, name, bases, dict_):\n print(\"__INIT__\")\n super(Metaclass, cls).__init__(name, bases, dict_)\n\n def __call__(cls, *args):\n print(\"__CALL__\")\n obj = super(Metaclass, cls).__call__(*args)\n return obj\n\nclass MyObj(object):\n __metaclass__ = Metaclass\n\nMyObj()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass" + ], + "stdout": "__NEW__\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "dict_": [ + "REF", + 5 + ], + "bases": [ + "REF", + 6 + ], + "name": "MyObj", + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "cls", + "name", + "bases", + "dict_" + ] + } + ], + "globals": { + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "5": [ + "DICT", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "6": [ + "TUPLE", + [ + "REF", + 7 + ] + ], + "7": [ + "CLASS", + "object", + [], + [ + "__class__", + [ + "REF", + 8 + ] + ], + [ + "__delattr__", + [ + "REF", + 9 + ] + ], + [ + "__format__", + [ + "REF", + 10 + ] + ], + [ + "__getattribute__", + [ + "REF", + 11 + ] + ], + [ + "__hash__", + [ + "REF", + 12 + ] + ], + [ + "__init__", + [ + "REF", + 13 + ] + ], + [ + "__new__", + [ + "REF", + 14 + ] + ], + [ + "__reduce__", + [ + "REF", + 15 + ] + ], + [ + "__reduce_ex__", + [ + "REF", + 16 + ] + ], + [ + "__repr__", + [ + "REF", + 17 + ] + ], + [ + "__setattr__", + [ + "REF", + 18 + ] + ], + [ + "__sizeof__", + [ + "REF", + 19 + ] + ], + [ + "__str__", + [ + "REF", + 20 + ] + ], + [ + "__subclasshook__", + [ + "REF", + 21 + ] + ] + ], + "8": [ + "getset_descriptor", + "" + ], + "9": [ + "wrapper_descriptor", + "" + ], + "10": [ + "method_descriptor", + "" + ], + "11": [ + "wrapper_descriptor", + "" + ], + "12": [ + "wrapper_descriptor", + "" + ], + "13": [ + "wrapper_descriptor", + "" + ], + "14": [ + "FUNCTION", + "__new__(...)", + null + ], + "15": [ + "method_descriptor", + "" + ], + "16": [ + "method_descriptor", + "" + ], + "17": [ + "wrapper_descriptor", + "" + ], + "18": [ + "wrapper_descriptor", + "" + ], + "19": [ + "method_descriptor", + "" + ], + "20": [ + "wrapper_descriptor", + "" + ], + "21": [ + "classmethod_descriptor", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "Metaclass" + ], + "stdout": "__NEW__\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "dict_": [ + "REF", + 5 + ], + "bases": [ + "REF", + 6 + ], + "name": "MyObj", + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "cls", + "name", + "bases", + "dict_" + ] + } + ], + "globals": { + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "5": [ + "DICT", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "6": [ + "TUPLE", + [ + "REF", + 7 + ] + ], + "7": [ + "CLASS", + "object", + [], + [ + "__class__", + [ + "REF", + 8 + ] + ], + [ + "__delattr__", + [ + "REF", + 9 + ] + ], + [ + "__format__", + [ + "REF", + 10 + ] + ], + [ + "__getattribute__", + [ + "REF", + 11 + ] + ], + [ + "__hash__", + [ + "REF", + 12 + ] + ], + [ + "__init__", + [ + "REF", + 13 + ] + ], + [ + "__new__", + [ + "REF", + 14 + ] + ], + [ + "__reduce__", + [ + "REF", + 15 + ] + ], + [ + "__reduce_ex__", + [ + "REF", + 16 + ] + ], + [ + "__repr__", + [ + "REF", + 17 + ] + ], + [ + "__setattr__", + [ + "REF", + 18 + ] + ], + [ + "__sizeof__", + [ + "REF", + 19 + ] + ], + [ + "__str__", + [ + "REF", + 20 + ] + ], + [ + "__subclasshook__", + [ + "REF", + 21 + ] + ] + ], + "8": [ + "getset_descriptor", + "" + ], + "9": [ + "wrapper_descriptor", + "" + ], + "10": [ + "method_descriptor", + "" + ], + "11": [ + "wrapper_descriptor", + "" + ], + "12": [ + "wrapper_descriptor", + "" + ], + "13": [ + "wrapper_descriptor", + "" + ], + "14": [ + "FUNCTION", + "__new__(...)", + null + ], + "15": [ + "method_descriptor", + "" + ], + "16": [ + "method_descriptor", + "" + ], + "17": [ + "wrapper_descriptor", + "" + ], + "18": [ + "wrapper_descriptor", + "" + ], + "19": [ + "method_descriptor", + "" + ], + "20": [ + "wrapper_descriptor", + "" + ], + "21": [ + "classmethod_descriptor", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass" + ], + "stdout": "__NEW__\n__INIT__\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "dict_": [ + "REF", + 5 + ], + "bases": [ + "REF", + 6 + ], + "name": "MyObj", + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "cls", + "name", + "bases", + "dict_" + ] + } + ], + "globals": { + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "5": [ + "DICT", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "6": [ + "TUPLE", + [ + "REF", + 7 + ] + ], + "7": [ + "CLASS", + "object", + [], + [ + "__class__", + [ + "REF", + 8 + ] + ], + [ + "__delattr__", + [ + "REF", + 9 + ] + ], + [ + "__format__", + [ + "REF", + 10 + ] + ], + [ + "__getattribute__", + [ + "REF", + 11 + ] + ], + [ + "__hash__", + [ + "REF", + 12 + ] + ], + [ + "__init__", + [ + "REF", + 13 + ] + ], + [ + "__new__", + [ + "REF", + 14 + ] + ], + [ + "__reduce__", + [ + "REF", + 15 + ] + ], + [ + "__reduce_ex__", + [ + "REF", + 16 + ] + ], + [ + "__repr__", + [ + "REF", + 17 + ] + ], + [ + "__setattr__", + [ + "REF", + 18 + ] + ], + [ + "__sizeof__", + [ + "REF", + 19 + ] + ], + [ + "__str__", + [ + "REF", + 20 + ] + ], + [ + "__subclasshook__", + [ + "REF", + 21 + ] + ] + ], + "8": [ + "getset_descriptor", + "" + ], + "9": [ + "wrapper_descriptor", + "" + ], + "10": [ + "method_descriptor", + "" + ], + "11": [ + "wrapper_descriptor", + "" + ], + "12": [ + "wrapper_descriptor", + "" + ], + "13": [ + "wrapper_descriptor", + "" + ], + "14": [ + "FUNCTION", + "__new__(...)", + null + ], + "15": [ + "method_descriptor", + "" + ], + "16": [ + "method_descriptor", + "" + ], + "17": [ + "wrapper_descriptor", + "" + ], + "18": [ + "wrapper_descriptor", + "" + ], + "19": [ + "method_descriptor", + "" + ], + "20": [ + "wrapper_descriptor", + "" + ], + "21": [ + "classmethod_descriptor", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass" + ], + "stdout": "__NEW__\n__INIT__\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "dict_": [ + "REF", + 5 + ], + "bases": [ + "REF", + 6 + ], + "name": "MyObj", + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "cls", + "name", + "bases", + "dict_", + "__return__" + ] + } + ], + "globals": { + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "5": [ + "DICT", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "6": [ + "TUPLE", + [ + "REF", + 7 + ] + ], + "7": [ + "CLASS", + "object", + [], + [ + "__class__", + [ + "REF", + 8 + ] + ], + [ + "__delattr__", + [ + "REF", + 9 + ] + ], + [ + "__format__", + [ + "REF", + 10 + ] + ], + [ + "__getattribute__", + [ + "REF", + 11 + ] + ], + [ + "__hash__", + [ + "REF", + 12 + ] + ], + [ + "__init__", + [ + "REF", + 13 + ] + ], + [ + "__new__", + [ + "REF", + 14 + ] + ], + [ + "__reduce__", + [ + "REF", + 15 + ] + ], + [ + "__reduce_ex__", + [ + "REF", + 16 + ] + ], + [ + "__repr__", + [ + "REF", + 17 + ] + ], + [ + "__setattr__", + [ + "REF", + 18 + ] + ], + [ + "__sizeof__", + [ + "REF", + 19 + ] + ], + [ + "__str__", + [ + "REF", + 20 + ] + ], + [ + "__subclasshook__", + [ + "REF", + 21 + ] + ] + ], + "8": [ + "getset_descriptor", + "" + ], + "9": [ + "wrapper_descriptor", + "" + ], + "10": [ + "method_descriptor", + "" + ], + "11": [ + "wrapper_descriptor", + "" + ], + "12": [ + "wrapper_descriptor", + "" + ], + "13": [ + "wrapper_descriptor", + "" + ], + "14": [ + "FUNCTION", + "__new__(...)", + null + ], + "15": [ + "method_descriptor", + "" + ], + "16": [ + "method_descriptor", + "" + ], + "17": [ + "wrapper_descriptor", + "" + ], + "18": [ + "wrapper_descriptor", + "" + ], + "19": [ + "method_descriptor", + "" + ], + "20": [ + "wrapper_descriptor", + "" + ], + "21": [ + "classmethod_descriptor", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n", + "func_name": "__call__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "args": [ + "REF", + 23 + ], + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__call__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__call___f2", + "ordered_varnames": [ + "cls", + "args" + ] + } + ], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "23": [ + "TUPLE" + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n", + "func_name": "__call__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "args": [ + "REF", + 23 + ], + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__call__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__call___f2", + "ordered_varnames": [ + "cls", + "args" + ] + } + ], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "23": [ + "TUPLE" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n__CALL__\n", + "func_name": "__call__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "args": [ + "REF", + 23 + ], + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__call__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__call___f2", + "ordered_varnames": [ + "cls", + "args" + ] + } + ], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "23": [ + "TUPLE" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n__CALL__\n", + "func_name": "__call__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "args": [ + "REF", + 23 + ], + "obj": [ + "REF", + 24 + ], + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__call__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__call___f2", + "ordered_varnames": [ + "cls", + "args", + "obj" + ] + } + ], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "23": [ + "TUPLE" + ], + "24": [ + "INSTANCE", + "MyObj" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n__CALL__\n", + "func_name": "__call__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "args": [ + "REF", + 23 + ], + "obj": [ + "REF", + 24 + ], + "cls": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__call__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__call___f2", + "ordered_varnames": [ + "cls", + "args", + "obj", + "__return__" + ] + } + ], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ], + "23": [ + "TUPLE" + ], + "24": [ + "INSTANCE", + "MyObj" + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "__NEW__\n__INIT__\n__CALL__\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "MyObj": [ + "REF", + 22 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "staticmethod", + "" + ], + "22": [ + "INSTANCE", + "Metaclass", + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 19, + "event": "return" + } + ] +} diff --git a/v3/example-code/metaclass.golden_py3 b/v3/example-code/metaclass.golden_py3 new file mode 100644 index 000000000..16f9fa582 --- /dev/null +++ b/v3/example-code/metaclass.golden_py3 @@ -0,0 +1,229 @@ +{ + "code": "class Metaclass(type):\n def __new__(mcs, name, bases, dict_):\n print(\"__NEW__\")\n cls = super(Metaclass, mcs).__new__(mcs, name, bases, dict_)\n return cls\n\n def __init__(cls, name, bases, dict_):\n print(\"__INIT__\")\n super(Metaclass, cls).__init__(name, bases, dict_)\n\n def __call__(cls, *args):\n print(\"__CALL__\")\n obj = super(Metaclass, cls).__call__(*args)\n return obj\n\nclass MyObj(object):\n __metaclass__ = Metaclass\n\nMyObj()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MyObj": [ + "REF", + 5 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "CLASS", + "MyObj", + [], + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "Metaclass", + "MyObj" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "MyObj": [ + "REF", + 5 + ], + "Metaclass": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Metaclass", + [ + "type" + ], + [ + "__call__", + [ + "REF", + 2 + ] + ], + [ + "__init__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ] + ], + "2": [ + "FUNCTION", + "__call__(cls, *args)", + null + ], + "3": [ + "FUNCTION", + "__init__(cls, name, bases, dict_)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "CLASS", + "MyObj", + [], + [ + "__metaclass__", + [ + "REF", + 1 + ] + ] + ] + }, + "line": 19, + "event": "return" + } + ] +} diff --git a/v3/example-code/metaclass.txt b/v3/example-code/metaclass.txt new file mode 100644 index 000000000..16f1d75c7 --- /dev/null +++ b/v3/example-code/metaclass.txt @@ -0,0 +1,19 @@ +class Metaclass(type): + def __new__(mcs, name, bases, dict_): + print("__NEW__") + cls = super(Metaclass, mcs).__new__(mcs, name, bases, dict_) + return cls + + def __init__(cls, name, bases, dict_): + print("__INIT__") + super(Metaclass, cls).__init__(name, bases, dict_) + + def __call__(cls, *args): + print("__CALL__") + obj = super(Metaclass, cls).__call__(*args) + return obj + +class MyObj(object): + __metaclass__ = Metaclass + +MyObj() diff --git a/v3/example-code/nonlocal.golden b/v3/example-code/nonlocal.golden new file mode 100644 index 000000000..7f7631792 --- /dev/null +++ b/v3/example-code/nonlocal.golden @@ -0,0 +1,11 @@ +{ + "code": "# 'nonlocal' keyword is only in Python 3\ndef outer():\n x = 1\n def inner():\n nonlocal x\n x = 2\n y = x\n print(\"inner:\", x, y)\n inner()\n print(\"outer:\", x)\n\nouter()\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 5)", + "line": 5, + "event": "uncaught_exception", + "offset": 18 + } + ] +} diff --git a/v3/example-code/nonlocal.golden_py3 b/v3/example-code/nonlocal.golden_py3 new file mode 100644 index 000000000..e865e76cc --- /dev/null +++ b/v3/example-code/nonlocal.golden_py3 @@ -0,0 +1,667 @@ +{ + "code": "# 'nonlocal' keyword is only in Python 3\ndef outer():\n x = 1\n def inner():\n nonlocal x\n x = 2\n y = x\n print(\"inner:\", x, y)\n inner()\n print(\"outer:\", x)\n\nouter()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "outer", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1", + "ordered_varnames": [] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "outer", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1", + "ordered_varnames": [] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "outer", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "outer", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "inner", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "inner", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "inner_f2", + "ordered_varnames": [] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "inner", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "inner", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "inner_f2", + "ordered_varnames": [] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "inner", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "inner", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "inner_f2", + "ordered_varnames": [] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "", + "func_name": "inner", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "inner", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "inner_f2", + "ordered_varnames": [ + "y" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "inner: 2 2\n", + "func_name": "inner", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "inner", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "inner_f2", + "ordered_varnames": [ + "y", + "__return__" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "inner: 2 2\n", + "func_name": "outer", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "inner: 2 2\nouter: 2\n", + "func_name": "outer", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 2, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "outer", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p", + "ordered_varnames": [ + "inner", + "x", + "__return__" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "outer" + ], + "stdout": "inner: 2 2\nouter: 2\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 2, + "inner": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "outer", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "outer_f1_p_z", + "ordered_varnames": [ + "inner", + "x", + "__return__" + ] + } + ], + "globals": { + "outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "outer()", + null + ], + "2": [ + "FUNCTION", + "inner()", + 1 + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/example-code/nonlocal.txt b/v3/example-code/nonlocal.txt new file mode 100644 index 000000000..4bd156762 --- /dev/null +++ b/v3/example-code/nonlocal.txt @@ -0,0 +1,12 @@ +# 'nonlocal' keyword is only in Python 3 +def outer(): + x = 1 + def inner(): + nonlocal x + x = 2 + y = x + print("inner:", x, y) + inner() + print("outer:", x) + +outer() diff --git a/v3/example-code/oop_1.golden b/v3/example-code/oop_1.golden new file mode 100644 index 000000000..ef5496688 --- /dev/null +++ b/v3/example-code/oop_1.golden @@ -0,0 +1,1272 @@ +{ + "code": "# Object-oriented programming intro\n# Adapted from MIT 6.01 course notes (Section 3.5)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\nclass Staff601:\n course = '6.01'\n building = 34\n room = 501\n\n def salutation(self):\n return self.role + ' ' + self.name\n\npat = Staff601()\nprint(pat.course)\n\npat.name = 'Pat'\npat.age = 60\npat.role = 'Professor'\n\nprint(pat.building)\npat.building = 32\nprint(pat.building)\n\nprint(pat.salutation())\nprint(Staff601.salutation(pat))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ] + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ] + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": "Professor Pat", + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 25, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "Professor Pat", + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\nProfessor Pat\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 25, + "event": "return" + } + ] +} diff --git a/v3/example-code/oop_1.golden_py3 b/v3/example-code/oop_1.golden_py3 new file mode 100644 index 000000000..ef5496688 --- /dev/null +++ b/v3/example-code/oop_1.golden_py3 @@ -0,0 +1,1272 @@ +{ + "code": "# Object-oriented programming intro\n# Adapted from MIT 6.01 course notes (Section 3.5)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\nclass Staff601:\n course = '6.01'\n building = 34\n room = 501\n\n def salutation(self):\n return self.role + ' ' + self.name\n\npat = Staff601()\nprint(pat.course)\n\npat.name = 'Pat'\npat.age = 60\npat.role = 'Professor'\n\nprint(pat.building)\npat.building = 32\nprint(pat.building)\n\nprint(pat.salutation())\nprint(Staff601.salutation(pat))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ] + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ] + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": "Professor Pat", + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 25, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "Professor Pat", + "self": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\nProfessor Pat\nProfessor Pat\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 2 + ] + ] + ], + "2": [ + "FUNCTION", + "salutation(self)", + null + ], + "3": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 25, + "event": "return" + } + ] +} diff --git a/example-code/oop_1.txt b/v3/example-code/oop_1.txt similarity index 77% rename from example-code/oop_1.txt rename to v3/example-code/oop_1.txt index f072f69f2..d04790552 100644 --- a/example-code/oop_1.txt +++ b/v3/example-code/oop_1.txt @@ -11,15 +11,15 @@ class Staff601: return self.role + ' ' + self.name pat = Staff601() -print pat.course +print(pat.course) pat.name = 'Pat' pat.age = 60 pat.role = 'Professor' -print pat.building +print(pat.building) pat.building = 32 -print pat.building +print(pat.building) -print pat.salutation() -print Staff601.salutation(pat) +print(pat.salutation()) +print(Staff601.salutation(pat)) diff --git a/v3/example-code/oop_2.golden b/v3/example-code/oop_2.golden new file mode 100644 index 000000000..67d2ab57b --- /dev/null +++ b/v3/example-code/oop_2.golden @@ -0,0 +1,1135 @@ +{ + "code": "# The __init__ 'constructor' - object-oriented programming intro\n# Adapted from MIT 6.01 course notes (Section 3.5)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\nclass Staff601:\n course = '6.01'\n building = 34\n room = 501\n\n def __init__(self, name, role, years, salary):\n self.name = name\n self.role = role\n self.age = years\n self.salary = salary\n\n def salutation(self):\n return self.role + ' ' + self.name\n\npat = Staff601('Pat', 'Professor', 60, 100000)\nprint(pat.salutation())\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ] + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "name": "Pat", + "self": [ + "REF", + 4 + ], + "years": 60, + "role": "Professor", + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "Professor Pat", + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 17, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "Professor Pat\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 20, + "event": "return" + } + ] +} diff --git a/v3/example-code/oop_2.golden_py3 b/v3/example-code/oop_2.golden_py3 new file mode 100644 index 000000000..67d2ab57b --- /dev/null +++ b/v3/example-code/oop_2.golden_py3 @@ -0,0 +1,1135 @@ +{ + "code": "# The __init__ 'constructor' - object-oriented programming intro\n# Adapted from MIT 6.01 course notes (Section 3.5)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\nclass Staff601:\n course = '6.01'\n building = 34\n room = 501\n\n def __init__(self, name, role, years, salary):\n self.name = name\n self.role = role\n self.age = years\n self.salary = salary\n\n def salutation(self):\n return self.role + ' ' + self.name\n\npat = Staff601('Pat', 'Professor', 60, 100000)\nprint(pat.salutation())\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ] + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "self": [ + "REF", + 4 + ], + "role": "Professor", + "name": "Pat", + "years": 60 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "salary": 100000, + "name": "Pat", + "self": [ + "REF", + 4 + ], + "years": 60, + "role": "Professor", + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "role", + "years", + "salary", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "Professor Pat", + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 17, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "Professor Pat\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ], + [ + "salutation", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, name, role, years, salary)", + null + ], + "3": [ + "FUNCTION", + "salutation(self)", + null + ], + "4": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ], + [ + "salary", + 100000 + ] + ] + }, + "line": 20, + "event": "return" + } + ] +} diff --git a/example-code/oop_2.txt b/v3/example-code/oop_2.txt similarity index 95% rename from example-code/oop_2.txt rename to v3/example-code/oop_2.txt index c4f0a534d..014c82790 100644 --- a/example-code/oop_2.txt +++ b/v3/example-code/oop_2.txt @@ -17,5 +17,5 @@ class Staff601: return self.role + ' ' + self.name pat = Staff601('Pat', 'Professor', 60, 100000) -print pat.salutation() +print(pat.salutation()) diff --git a/v3/example-code/oop_inherit.golden b/v3/example-code/oop_inherit.golden new file mode 100644 index 000000000..21edf4ec3 --- /dev/null +++ b/v3/example-code/oop_inherit.golden @@ -0,0 +1,1152 @@ +{ + "code": "# Inheritance - object-oriented programming intro\n# Adapted from MIT 6.01 course notes (Section 3.5)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\nclass Staff601:\n course = '6.01'\n building = 34\n room = 501\n\n def giveRaise(self, percentage):\n self.salary = self.salary + self.salary * percentage\n\nclass Prof601(Staff601):\n salary = 100000\n\n def __init__(self, name, age):\n self.name = name\n self.giveRaise((age - 18) * 0.03)\n\n def salutation(self):\n return self.role + ' ' + self.name\n\npat = Prof601('Pat', 60)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601" + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ] + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "giveRaise", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "percentage": 1.260, + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "giveRaise", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "giveRaise_f2", + "ordered_varnames": [ + "self", + "percentage" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ] + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "giveRaise", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "percentage": 1.260, + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "giveRaise", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "giveRaise_f2", + "ordered_varnames": [ + "self", + "percentage" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "giveRaise", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "percentage": 1.260, + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "giveRaise", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "giveRaise_f2", + "ordered_varnames": [ + "self", + "percentage", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ], + [ + "salary", + [ + "SPECIAL_FLOAT", + "226000.0" + ] + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ], + [ + "salary", + [ + "SPECIAL_FLOAT", + "226000.0" + ] + ] + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 6 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ], + [ + "salary", + [ + "SPECIAL_FLOAT", + "226000.0" + ] + ] + ] + }, + "line": 23, + "event": "return" + } + ] +} diff --git a/v3/example-code/oop_inherit.golden_py3 b/v3/example-code/oop_inherit.golden_py3 new file mode 100644 index 000000000..21edf4ec3 --- /dev/null +++ b/v3/example-code/oop_inherit.golden_py3 @@ -0,0 +1,1152 @@ +{ + "code": "# Inheritance - object-oriented programming intro\n# Adapted from MIT 6.01 course notes (Section 3.5)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\nclass Staff601:\n course = '6.01'\n building = 34\n room = 501\n\n def giveRaise(self, percentage):\n self.salary = self.salary + self.salary * percentage\n\nclass Prof601(Staff601):\n salary = 100000\n\n def __init__(self, name, age):\n self.name = name\n self.giveRaise((age - 18) * 0.03)\n\n def salutation(self):\n return self.role + ' ' + self.name\n\npat = Prof601('Pat', 60)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601" + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ] + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "giveRaise", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "percentage": 1.260, + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "giveRaise", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "giveRaise_f2", + "ordered_varnames": [ + "self", + "percentage" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ] + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "giveRaise", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "percentage": 1.260, + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "giveRaise", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "giveRaise_f2", + "ordered_varnames": [ + "self", + "percentage" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "giveRaise", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "percentage": 1.260, + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "giveRaise", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "giveRaise_f2", + "ordered_varnames": [ + "self", + "percentage", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ], + [ + "salary", + [ + "SPECIAL_FLOAT", + "226000.0" + ] + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "age": 60, + "name": "Pat", + "self": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "name", + "age", + "__return__" + ] + } + ], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ], + [ + "salary", + [ + "SPECIAL_FLOAT", + "226000.0" + ] + ] + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "Staff601", + "Prof601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 6 + ], + "Prof601": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "giveRaise", + [ + "REF", + 2 + ] + ], + [ + "room", + 501 + ] + ], + "2": [ + "FUNCTION", + "giveRaise(self, percentage)", + null + ], + "3": [ + "CLASS", + "Prof601", + [ + "Staff601" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "salary", + 100000 + ], + [ + "salutation", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "FUNCTION", + "__init__(self, name, age)", + null + ], + "5": [ + "FUNCTION", + "salutation(self)", + null + ], + "6": [ + "INSTANCE", + "Prof601", + [ + "name", + "Pat" + ], + [ + "salary", + [ + "SPECIAL_FLOAT", + "226000.0" + ] + ] + ] + }, + "line": 23, + "event": "return" + } + ] +} diff --git a/example-code/oop_inherit.txt b/v3/example-code/oop_inherit.txt similarity index 100% rename from example-code/oop_inherit.txt rename to v3/example-code/oop_inherit.txt diff --git a/v3/example-code/oop_small.golden b/v3/example-code/oop_small.golden new file mode 100644 index 000000000..4325327d6 --- /dev/null +++ b/v3/example-code/oop_small.golden @@ -0,0 +1,1089 @@ +{ + "code": "class A:\n x = 1\n y = 'hello'\n\nclass B:\n z = 'bye'\n\nclass C(A,B):\n def salutation(self):\n return '%d %s %s' % (self.x, self.y, self.z)\n\ninst = C()\nprint(inst.salutation())\ninst.x = 100\nprint(inst.salutation())\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "B": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": "1 hello bye", + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "100 hello bye", + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n100 hello bye\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/v3/example-code/oop_small.golden_py3 b/v3/example-code/oop_small.golden_py3 new file mode 100644 index 000000000..4325327d6 --- /dev/null +++ b/v3/example-code/oop_small.golden_py3 @@ -0,0 +1,1089 @@ +{ + "code": "class A:\n x = 1\n y = 'hello'\n\nclass B:\n z = 'bye'\n\nclass C(A,B):\n def salutation(self):\n return '%d %s %s' % (self.x, self.y, self.z)\n\ninst = C()\nprint(inst.salutation())\ninst.x = 100\nprint(inst.salutation())\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "B": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": "1 hello bye", + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f1", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n", + "func_name": "salutation", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "100 hello bye", + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "salutation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "salutation_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "B", + "C", + "inst" + ], + "stdout": "1 hello bye\n100 hello bye\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "C": [ + "REF", + 3 + ], + "B": [ + "REF", + 2 + ], + "inst": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "x", + 1 + ], + [ + "y", + "hello" + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "z", + "bye" + ] + ], + "3": [ + "CLASS", + "C", + [ + "A", + "B" + ], + [ + "salutation", + [ + "REF", + 4 + ] + ] + ], + "4": [ + "FUNCTION", + "salutation(self)", + null + ], + "5": [ + "INSTANCE", + "C", + [ + "x", + 100 + ] + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/example-code/oop_small.txt b/v3/example-code/oop_small.txt similarity index 78% rename from example-code/oop_small.txt rename to v3/example-code/oop_small.txt index e40400587..8a7ca559b 100644 --- a/example-code/oop_small.txt +++ b/v3/example-code/oop_small.txt @@ -10,6 +10,6 @@ class C(A,B): return '%d %s %s' % (self.x, self.y, self.z) inst = C() -print inst.salutation() +print(inst.salutation()) inst.x = 100 -print inst.salutation() +print(inst.salutation()) diff --git a/v3/example-code/py_tutorial.golden b/v3/example-code/py_tutorial.golden new file mode 100644 index 000000000..b2849cbd9 --- /dev/null +++ b/v3/example-code/py_tutorial.golden @@ -0,0 +1,4754 @@ +{ + "code": "# Philip's 10-minute intro to Python\n\n# numbers!\nage = 26\npi = 3.14159\n\n# strings!\ns = 'Rutherford Birchard Hayes'\ntokens = s.split()\nfirstName = tokens[0]\nmiddleName = tokens[1]\nlastName = tokens[2]\ns2 = firstName + ' ' + middleName + ' ' + lastName\n\n# 'if' statement - indentation matters!\nif (s == s2):\n print('yes!!!')\nelse:\n print('nooooooo')\n\n# list (mutable sequence)\nbeatles = ['John', 'Paul', 'George']\nbeatles.append('Ringo')\n\n# 'for' loop - indentation matters!\nfor b in beatles:\n print('Hello ' + b)\n\n# tuple (immutable sequence)\nages = (18, 21, 28, 21, 22, 18, 19, 34, 9)\n\n# set (no order, no duplicates)\nuniqueAges = set(ages)\nuniqueAges.add(18) # already in set, no effect\nuniqueAges.remove(21)\n\n# no guaranteed order when iterating over a set\nfor thisAge in uniqueAges:\n print(thisAge)\n\n# testing set membership\nif 18 in uniqueAges:\n print('There is an 18-year-old present!')\n\n# sorting\nbeatles.sort() # in-place\norderedUniqueAges = sorted(uniqueAges) # new list\n\n# dict - mapping unique keys to values\nnetWorth = {}\nnetWorth['Donald Trump'] = 3000000000\nnetWorth['Bill Gates'] = 58000000000\nnetWorth['Tom Cruise'] = 40000000\nnetWorth['Joe Postdoc'] = 20000\n\n# iterating over key-value pairs:\nfor (person, worth) in netWorth.items():\n if worth < 1000000:\n print('haha ' + person + ' is not a millionaire')\n\n# testing dict membership\nif 'Tom Cruise' in netWorth:\n print('show me the money!')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "age": 26 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "age": 26, + "pi": 3.142 + }, + "heap": {}, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "age": 26, + "pi": 3.142, + "s": "Rutherford Birchard Hayes" + }, + "heap": {}, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "age": 26, + "pi": 3.142, + "s": "Rutherford Birchard Hayes" + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "age": 26, + "pi": 3.142, + "s": "Rutherford Birchard Hayes", + "firstName": "Rutherford" + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "John", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "John", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Paul", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Paul", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "George", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "George", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 30, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 21, + 22, + 28 + ] + }, + "line": 34, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 21, + 22, + 28 + ] + }, + "line": 35, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 34, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 34, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 9, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 9, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 18, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 18, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 19, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 19, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 22, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 22, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 42, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 46, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 47, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "orderedUniqueAges": [ + "REF", + 5 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "uniqueAges": [ + "REF", + 4 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ] + }, + "line": 50, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT" + ] + }, + "line": 51, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ] + ] + }, + "line": 52, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ] + ] + }, + "line": 53, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 54, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Donald Trump", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 3000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Donald Trump", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 3000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Bill Gates", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 58000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Bill Gates", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 58000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Joe Postdoc", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 20000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Joe Postdoc", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 20000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 59, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Joe Postdoc", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 20000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 62, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 63, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\nshow me the money!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 63, + "event": "return" + } + ] +} diff --git a/v3/example-code/py_tutorial.golden_py3 b/v3/example-code/py_tutorial.golden_py3 new file mode 100644 index 000000000..b2849cbd9 --- /dev/null +++ b/v3/example-code/py_tutorial.golden_py3 @@ -0,0 +1,4754 @@ +{ + "code": "# Philip's 10-minute intro to Python\n\n# numbers!\nage = 26\npi = 3.14159\n\n# strings!\ns = 'Rutherford Birchard Hayes'\ntokens = s.split()\nfirstName = tokens[0]\nmiddleName = tokens[1]\nlastName = tokens[2]\ns2 = firstName + ' ' + middleName + ' ' + lastName\n\n# 'if' statement - indentation matters!\nif (s == s2):\n print('yes!!!')\nelse:\n print('nooooooo')\n\n# list (mutable sequence)\nbeatles = ['John', 'Paul', 'George']\nbeatles.append('Ringo')\n\n# 'for' loop - indentation matters!\nfor b in beatles:\n print('Hello ' + b)\n\n# tuple (immutable sequence)\nages = (18, 21, 28, 21, 22, 18, 19, 34, 9)\n\n# set (no order, no duplicates)\nuniqueAges = set(ages)\nuniqueAges.add(18) # already in set, no effect\nuniqueAges.remove(21)\n\n# no guaranteed order when iterating over a set\nfor thisAge in uniqueAges:\n print(thisAge)\n\n# testing set membership\nif 18 in uniqueAges:\n print('There is an 18-year-old present!')\n\n# sorting\nbeatles.sort() # in-place\norderedUniqueAges = sorted(uniqueAges) # new list\n\n# dict - mapping unique keys to values\nnetWorth = {}\nnetWorth['Donald Trump'] = 3000000000\nnetWorth['Bill Gates'] = 58000000000\nnetWorth['Tom Cruise'] = 40000000\nnetWorth['Joe Postdoc'] = 20000\n\n# iterating over key-value pairs:\nfor (person, worth) in netWorth.items():\n if worth < 1000000:\n print('haha ' + person + ' is not a millionaire')\n\n# testing dict membership\nif 'Tom Cruise' in netWorth:\n print('show me the money!')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "age" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "age": 26 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "age": 26, + "pi": 3.142 + }, + "heap": {}, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "age": 26, + "pi": 3.142, + "s": "Rutherford Birchard Hayes" + }, + "heap": {}, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "age": 26, + "pi": 3.142, + "s": "Rutherford Birchard Hayes" + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "age": 26, + "pi": 3.142, + "s": "Rutherford Birchard Hayes", + "firstName": "Rutherford" + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George" + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "John", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "John", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Paul", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Paul", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "George", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "George", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 27, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 26, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ] + }, + "line": 30, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ] + }, + "line": 33, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 21, + 22, + 28 + ] + }, + "line": 34, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 21, + 22, + 28 + ] + }, + "line": 35, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 34, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 34, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 9, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 9, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 18, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 18, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 19, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 19, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 22, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 22, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 39, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 38, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 42, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 43, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "John", + "Paul", + "George", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 46, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ] + }, + "line": 47, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "orderedUniqueAges": [ + "REF", + 5 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "uniqueAges": [ + "REF", + 4 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ] + }, + "line": 50, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT" + ] + }, + "line": 51, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ] + ] + }, + "line": 52, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ] + ] + }, + "line": 53, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 54, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Donald Trump", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 3000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Donald Trump", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 3000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Bill Gates", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 58000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Bill Gates", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 58000000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Joe Postdoc", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 20000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Joe Postdoc", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 20000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 59, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Joe Postdoc", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 20000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 58, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 57, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 62, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "s2": "Rutherford Birchard Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "lastName": "Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 63, + "event": "step_line" + }, + { + "ordered_globals": [ + "age", + "pi", + "s", + "tokens", + "firstName", + "middleName", + "lastName", + "s2", + "beatles", + "b", + "ages", + "uniqueAges", + "thisAge", + "orderedUniqueAges", + "netWorth", + "person", + "worth" + ], + "stdout": "yes!!!\nHello John\nHello Paul\nHello George\nHello Ringo\n34\n9\n18\n19\n22\n28\nThere is an 18-year-old present!\nhaha Joe Postdoc is not a millionaire\nshow me the money!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "netWorth": [ + "REF", + 6 + ], + "beatles": [ + "REF", + 2 + ], + "firstName": "Rutherford", + "uniqueAges": [ + "REF", + 4 + ], + "middleName": "Birchard", + "lastName": "Hayes", + "age": 26, + "orderedUniqueAges": [ + "REF", + 5 + ], + "ages": [ + "REF", + 3 + ], + "tokens": [ + "REF", + 1 + ], + "person": "Tom Cruise", + "s": "Rutherford Birchard Hayes", + "b": "Ringo", + "s2": "Rutherford Birchard Hayes", + "thisAge": 28, + "pi": 3.142, + "worth": 40000000 + }, + "heap": { + "1": [ + "LIST", + "Rutherford", + "Birchard", + "Hayes" + ], + "2": [ + "LIST", + "George", + "John", + "Paul", + "Ringo" + ], + "3": [ + "TUPLE", + 18, + 21, + 28, + 21, + 22, + 18, + 19, + 34, + 9 + ], + "4": [ + "SET", + 34, + 9, + 18, + 19, + 22, + 28 + ], + "5": [ + "LIST", + 9, + 18, + 19, + 22, + 28, + 34 + ], + "6": [ + "DICT", + [ + "Donald Trump", + 3000000000 + ], + [ + "Bill Gates", + 58000000000 + ], + [ + "Joe Postdoc", + 20000 + ], + [ + "Tom Cruise", + 40000000 + ] + ] + }, + "line": 63, + "event": "return" + } + ] +} diff --git a/example-code/py_tutorial.txt b/v3/example-code/py_tutorial.txt similarity index 81% rename from example-code/py_tutorial.txt rename to v3/example-code/py_tutorial.txt index 5f1a230d1..e51ab9599 100644 --- a/example-code/py_tutorial.txt +++ b/v3/example-code/py_tutorial.txt @@ -14,9 +14,9 @@ s2 = firstName + ' ' + middleName + ' ' + lastName # 'if' statement - indentation matters! if (s == s2): - print 'yes!!!' + print('yes!!!') else: - print 'nooooooo' + print('nooooooo') # list (mutable sequence) beatles = ['John', 'Paul', 'George'] @@ -24,7 +24,7 @@ beatles.append('Ringo') # 'for' loop - indentation matters! for b in beatles: - print 'Hello', b + print('Hello ' + b) # tuple (immutable sequence) ages = (18, 21, 28, 21, 22, 18, 19, 34, 9) @@ -36,11 +36,11 @@ uniqueAges.remove(21) # no guaranteed order when iterating over a set for thisAge in uniqueAges: - print thisAge + print(thisAge) # testing set membership if 18 in uniqueAges: - print 'There is an 18-year-old present!' + print('There is an 18-year-old present!') # sorting beatles.sort() # in-place @@ -54,10 +54,10 @@ netWorth['Tom Cruise'] = 40000000 netWorth['Joe Postdoc'] = 20000 # iterating over key-value pairs: -for (person, worth) in netWorth.iteritems(): +for (person, worth) in netWorth.items(): if worth < 1000000: - print 'haha', person, 'is not a millionaire' + print('haha ' + person + ' is not a millionaire') # testing dict membership if 'Tom Cruise' in netWorth: - print 'show me the money!' + print('show me the money!') diff --git a/v3/example-code/raw_input.golden b/v3/example-code/raw_input.golden new file mode 100644 index 000000000..613736478 --- /dev/null +++ b/v3/example-code/raw_input.golden @@ -0,0 +1,33 @@ +{ + "code": "prefix = \"Hello \"\n\nn1 = raw_input(\"Enter your name\")\n\nn2 = raw_input(\"Enter another name\")\n\nres = prefix + n1 + \" and \" + n2\nprint(res)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "prefix" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "prefix": "Hello " + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "prompt": "Enter your name", + "event": "raw_input" + } + ] +} diff --git a/v3/example-code/raw_input.golden_py3 b/v3/example-code/raw_input.golden_py3 new file mode 100644 index 000000000..16dd1a0e6 --- /dev/null +++ b/v3/example-code/raw_input.golden_py3 @@ -0,0 +1,44 @@ +{ + "code": "prefix = \"Hello \"\n\nn1 = raw_input(\"Enter your name\")\n\nn2 = raw_input(\"Enter another name\")\n\nres = prefix + n1 + \" and \" + n2\nprint(res)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "prefix" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "prefix": "Hello " + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "prefix" + ], + "stdout": "", + "exception_msg": "NameError: name 'raw_input' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": { + "prefix": "Hello " + }, + "heap": {}, + "line": 3, + "event": "exception" + } + ] +} diff --git a/v3/example-code/raw_input.txt b/v3/example-code/raw_input.txt new file mode 100644 index 000000000..f585d9b1c --- /dev/null +++ b/v3/example-code/raw_input.txt @@ -0,0 +1,8 @@ +prefix = "Hello " + +n1 = raw_input("Enter your name") + +n2 = raw_input("Enter another name") + +res = prefix + n1 + " and " + n2 +print(res) diff --git a/v3/example-code/raw_input_py3.golden b/v3/example-code/raw_input_py3.golden new file mode 100644 index 000000000..6cf9c2f64 --- /dev/null +++ b/v3/example-code/raw_input_py3.golden @@ -0,0 +1,44 @@ +{ + "code": "# In Python 3, raw_input is called input\nprefix = \"Hello \"\n\nn1 = input(\"Enter your name\")\n\nn2 = input(\"Enter another name\")\n\nres = prefix + n1 + \" and \" + n2\nprint(res)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "prefix" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "prefix": "Hello " + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "prefix" + ], + "stdout": "", + "exception_msg": "NameError: name 'input' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": { + "prefix": "Hello " + }, + "heap": {}, + "line": 4, + "event": "exception" + } + ] +} diff --git a/v3/example-code/raw_input_py3.golden_py3 b/v3/example-code/raw_input_py3.golden_py3 new file mode 100644 index 000000000..7d064d6d0 --- /dev/null +++ b/v3/example-code/raw_input_py3.golden_py3 @@ -0,0 +1,33 @@ +{ + "code": "# In Python 3, raw_input is called input\nprefix = \"Hello \"\n\nn1 = input(\"Enter your name\")\n\nn2 = input(\"Enter another name\")\n\nres = prefix + n1 + \" and \" + n2\nprint(res)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "prefix" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "prefix": "Hello " + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "prompt": "Enter your name", + "event": "raw_input" + } + ] +} diff --git a/v3/example-code/raw_input_py3.txt b/v3/example-code/raw_input_py3.txt new file mode 100644 index 000000000..d71c4992f --- /dev/null +++ b/v3/example-code/raw_input_py3.txt @@ -0,0 +1,9 @@ +# In Python 3, raw_input is called input +prefix = "Hello " + +n1 = input("Enter your name") + +n2 = input("Enter another name") + +res = prefix + n1 + " and " + n2 +print(res) diff --git a/v3/example-code/sqrt.golden b/v3/example-code/sqrt.golden new file mode 100644 index 000000000..67a8e85cf --- /dev/null +++ b/v3/example-code/sqrt.golden @@ -0,0 +1,9331 @@ +{ + "code": "# Calculating square roots by Newton's method, inspired by SICP\n# http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1.7\n\ndef sqrt(x):\n def average(a, b):\n return (a + b) / 2.0\n\n def is_good_enough(guess):\n return (abs((guess * guess) - x) < 0.001)\n\n def improve(guess):\n return average(guess, x / guess)\n\n def sqrt_iter(guess):\n if is_good_enough(guess):\n return guess\n else:\n return sqrt_iter(improve(guess))\n\n return sqrt_iter(1.0)\n\n\nans = sqrt(9)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "average": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "average": [ + "REF", + 2 + ], + "is_good_enough": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "is_good_enough" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "average": [ + "REF", + 2 + ], + "is_good_enough": [ + "REF", + 3 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f3", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f3", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": false, + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f3", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "1.0" + ], + "b": [ + "SPECIAL_FLOAT", + "9.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f5", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "1.0" + ], + "b": [ + "SPECIAL_FLOAT", + "9.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f5", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "1.0" + ], + "__return__": [ + "SPECIAL_FLOAT", + "5.0" + ], + "b": [ + "SPECIAL_FLOAT", + "9.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f5", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "5.0" + ], + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f7", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f7", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": false, + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f7", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "5.0" + ], + "b": 1.800 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f9", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "5.0" + ], + "b": 1.800 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f9", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "5.0" + ], + "__return__": 3.400, + "b": 1.800 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f9", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 3.400, + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f11", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f11", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": false, + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f11", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "a": 3.400, + "b": 2.647 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f13", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "a": 3.400, + "b": 2.647 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f13", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "a": 3.400, + "__return__": 3.023, + "b": 2.647 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f13", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 3.023, + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f15", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f15", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": false, + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f15", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "a": 3.023, + "b": 2.977 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f17", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "a": 3.023, + "b": 2.977 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f17", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "a": 3.023, + "__return__": 3.000, + "b": 2.977 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f17", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f19", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f19", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "__return__": true, + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f19", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 3.000, + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3.000, + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "__return__": 3.000, + "x": 9, + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 20, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt", + "ans" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "__return__": 3.000, + "x": 9, + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p_z", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ], + "ans": 3.000 + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 23, + "event": "return" + } + ] +} diff --git a/v3/example-code/sqrt.golden_py3 b/v3/example-code/sqrt.golden_py3 new file mode 100644 index 000000000..67a8e85cf --- /dev/null +++ b/v3/example-code/sqrt.golden_py3 @@ -0,0 +1,9331 @@ +{ + "code": "# Calculating square roots by Newton's method, inspired by SICP\n# http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html#%_sec_1.1.7\n\ndef sqrt(x):\n def average(a, b):\n return (a + b) / 2.0\n\n def is_good_enough(guess):\n return (abs((guess * guess) - x) < 0.001)\n\n def improve(guess):\n return average(guess, x / guess)\n\n def sqrt_iter(guess):\n if is_good_enough(guess):\n return guess\n else:\n return sqrt_iter(improve(guess))\n\n return sqrt_iter(1.0)\n\n\nans = sqrt(9)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "average": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "average": [ + "REF", + 2 + ], + "is_good_enough": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "is_good_enough" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "average": [ + "REF", + 2 + ], + "is_good_enough": [ + "REF", + 3 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f3", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f3", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": false, + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f3", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "1.0" + ], + "b": [ + "SPECIAL_FLOAT", + "9.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f5", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "1.0" + ], + "b": [ + "SPECIAL_FLOAT", + "9.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f5", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "1.0" + ], + "__return__": [ + "SPECIAL_FLOAT", + "5.0" + ], + "b": [ + "SPECIAL_FLOAT", + "9.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f5", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "SPECIAL_FLOAT", + "5.0" + ], + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f4", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f7", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f7", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": false, + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f7", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "5.0" + ], + "b": 1.800 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f9", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "5.0" + ], + "b": 1.800 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f9", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "a": [ + "SPECIAL_FLOAT", + "5.0" + ], + "__return__": 3.400, + "b": 1.800 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f9", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 3.400, + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f8", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f11", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f11", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": false, + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f11", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "a": 3.400, + "b": 2.647 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f13", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "a": 3.400, + "b": 2.647 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f13", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "a": 3.400, + "__return__": 3.023, + "b": 2.647 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f13", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 3.023, + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f12", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f15", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f15", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": false, + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f15", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 11, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "a": 3.023, + "b": 2.977 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f17", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "a": 3.023, + "b": 2.977 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f17", + "ordered_varnames": [ + "a", + "b" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "average", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "a": 3.023, + "__return__": 3.000, + "b": 2.977 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "average", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "average_f17", + "ordered_varnames": [ + "a", + "b", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "improve", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "improve", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "improve_f16", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 12, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f19", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f19", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "is_good_enough", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "__return__": true, + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "is_good_enough", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "is_good_enough_f19", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "guess": 3.023 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.000 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f18", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "guess": 3.400 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.023 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f14", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 3.000, + "guess": 3.400 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f10", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 3.000, + "guess": [ + "SPECIAL_FLOAT", + "5.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f6", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt_iter", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 9, + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3.000, + "guess": [ + "SPECIAL_FLOAT", + "1.0" + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sqrt_iter", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "sqrt_iter_f2", + "ordered_varnames": [ + "guess", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt" + ], + "stdout": "", + "func_name": "sqrt", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "__return__": 3.000, + "x": 9, + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 20, + "event": "return" + }, + { + "ordered_globals": [ + "sqrt", + "ans" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "sqrt_iter": [ + "REF", + 5 + ], + "is_good_enough": [ + "REF", + 3 + ], + "__return__": 3.000, + "x": 9, + "average": [ + "REF", + 2 + ], + "improve": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sqrt", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "sqrt_f1_p_z", + "ordered_varnames": [ + "x", + "average", + "improve", + "is_good_enough", + "sqrt_iter", + "__return__" + ] + } + ], + "globals": { + "sqrt": [ + "REF", + 1 + ], + "ans": 3.000 + }, + "heap": { + "1": [ + "FUNCTION", + "sqrt(x)", + null + ], + "2": [ + "FUNCTION", + "average(a, b)", + 1 + ], + "3": [ + "FUNCTION", + "is_good_enough(guess)", + 1 + ], + "4": [ + "FUNCTION", + "improve(guess)", + 1 + ], + "5": [ + "FUNCTION", + "sqrt_iter(guess)", + 1 + ] + }, + "line": 23, + "event": "return" + } + ] +} diff --git a/example-code/sqrt.txt b/v3/example-code/sqrt.txt similarity index 100% rename from example-code/sqrt.txt rename to v3/example-code/sqrt.txt diff --git a/v3/example-code/strtok.golden b/v3/example-code/strtok.golden new file mode 100644 index 000000000..3c5031e8f --- /dev/null +++ b/v3/example-code/strtok.golden @@ -0,0 +1,258 @@ +{ + "code": "input = 'John,Doe,1984,4,1,male'\n\ntokens = input.split(',')\nfirstName = tokens[0]\nlastName = tokens[1]\nbirthdate = (int(tokens[2]), int(tokens[3]), int(tokens[4]))\nisMale = (tokens[5] == 'male')\n\nprint('Hi ' + firstName + ' ' + lastName)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": "John,Doe,1984,4,1,male" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male", + "firstName": "John" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "lastName": "Doe", + "firstName": "John", + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName", + "birthdate" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "lastName": "Doe", + "firstName": "John", + "birthdate": [ + "REF", + 2 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ], + "2": [ + "TUPLE", + 1984, + 4, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName", + "birthdate", + "isMale" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "isMale": true, + "firstName": "John", + "lastName": "Doe", + "birthdate": [ + "REF", + 2 + ], + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ], + "2": [ + "TUPLE", + 1984, + 4, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName", + "birthdate", + "isMale" + ], + "stdout": "Hi John Doe\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "isMale": true, + "firstName": "John", + "lastName": "Doe", + "birthdate": [ + "REF", + 2 + ], + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ], + "2": [ + "TUPLE", + 1984, + 4, + 1 + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/example-code/strtok.golden_py3 b/v3/example-code/strtok.golden_py3 new file mode 100644 index 000000000..3c5031e8f --- /dev/null +++ b/v3/example-code/strtok.golden_py3 @@ -0,0 +1,258 @@ +{ + "code": "input = 'John,Doe,1984,4,1,male'\n\ntokens = input.split(',')\nfirstName = tokens[0]\nlastName = tokens[1]\nbirthdate = (int(tokens[2]), int(tokens[3]), int(tokens[4]))\nisMale = (tokens[5] == 'male')\n\nprint('Hi ' + firstName + ' ' + lastName)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "input" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "input": "John,Doe,1984,4,1,male" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male", + "firstName": "John" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "lastName": "Doe", + "firstName": "John", + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName", + "birthdate" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "tokens": [ + "REF", + 1 + ], + "lastName": "Doe", + "firstName": "John", + "birthdate": [ + "REF", + 2 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ], + "2": [ + "TUPLE", + 1984, + 4, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName", + "birthdate", + "isMale" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "isMale": true, + "firstName": "John", + "lastName": "Doe", + "birthdate": [ + "REF", + 2 + ], + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ], + "2": [ + "TUPLE", + 1984, + 4, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "input", + "tokens", + "firstName", + "lastName", + "birthdate", + "isMale" + ], + "stdout": "Hi John Doe\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "isMale": true, + "firstName": "John", + "lastName": "Doe", + "birthdate": [ + "REF", + 2 + ], + "tokens": [ + "REF", + 1 + ], + "input": "John,Doe,1984,4,1,male" + }, + "heap": { + "1": [ + "LIST", + "John", + "Doe", + "1984", + "4", + "1", + "male" + ], + "2": [ + "TUPLE", + 1984, + 4, + 1 + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/example-code/strtok.txt b/v3/example-code/strtok.txt similarity index 82% rename from example-code/strtok.txt rename to v3/example-code/strtok.txt index 96e8100d5..52e08f112 100644 --- a/example-code/strtok.txt +++ b/v3/example-code/strtok.txt @@ -6,4 +6,4 @@ lastName = tokens[1] birthdate = (int(tokens[2]), int(tokens[3]), int(tokens[4])) isMale = (tokens[5] == 'male') -print 'Hi', firstName, lastName +print('Hi ' + firstName + ' ' + lastName) diff --git a/v3/example-code/sum-cubes.golden b/v3/example-code/sum-cubes.golden new file mode 100644 index 000000000..6eecbbe30 --- /dev/null +++ b/v3/example-code/sum-cubes.golden @@ -0,0 +1,1693 @@ +{ + "code": "def summation(n, term, next):\n total, k = 0, 1\n while k <= n:\n total, k = total + term(k), next(k)\n return total\n\ndef cube(k):\n return pow(k, 3)\n\ndef successor(k):\n return k + 1\n\ndef sum_cubes(n):\n return summation(n, cube, successor)\n\nsum_cubes(3)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "sum_cubes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "sum_cubes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "term": [ + "REF", + 2 + ], + "n": 3, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "term": [ + "REF", + 2 + ], + "n": 3, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "cube", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "cube", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "cube_f3", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "cube", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "cube", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "cube_f3", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "cube", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "cube", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "cube_f3", + "ordered_varnames": [ + "k", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "successor", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "successor", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "successor_f4", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "successor", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "successor", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "successor_f4", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "successor", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 2, + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "successor", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "successor_f4", + "ordered_varnames": [ + "k", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 1, + "k": 2, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "term": [ + "REF", + 2 + ], + "k": 2, + "n": 3, + "next": [ + "REF", + 3 + ], + "__return__": 1, + "total": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "sum_cubes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 1, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/example-code/sum-cubes.golden_py3 b/v3/example-code/sum-cubes.golden_py3 new file mode 100644 index 000000000..6eecbbe30 --- /dev/null +++ b/v3/example-code/sum-cubes.golden_py3 @@ -0,0 +1,1693 @@ +{ + "code": "def summation(n, term, next):\n total, k = 0, 1\n while k <= n:\n total, k = total + term(k), next(k)\n return total\n\ndef cube(k):\n return pow(k, 3)\n\ndef successor(k):\n return k + 1\n\ndef sum_cubes(n):\n return summation(n, cube, successor)\n\nsum_cubes(3)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "sum_cubes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "sum_cubes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "term": [ + "REF", + 2 + ], + "n": 3, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "term": [ + "REF", + 2 + ], + "n": 3, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "cube", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "cube", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "cube_f3", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "cube", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "cube", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "cube_f3", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "cube", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "cube", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "cube_f3", + "ordered_varnames": [ + "k", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "successor", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "successor", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "successor_f4", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "successor", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "successor", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "successor_f4", + "ordered_varnames": [ + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "successor", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 0, + "k": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 2, + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "successor", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "successor_f4", + "ordered_varnames": [ + "k", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3, + "term": [ + "REF", + 2 + ], + "total": 1, + "k": 2, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "term": [ + "REF", + 2 + ], + "k": 2, + "n": 3, + "next": [ + "REF", + 3 + ], + "__return__": 1, + "total": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "n", + "term", + "next", + "total", + "k", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "sum_cubes", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 1, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sum_cubes", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sum_cubes_f1", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "cube", + "successor", + "sum_cubes" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "cube": [ + "REF", + 2 + ], + "sum_cubes": [ + "REF", + 4 + ], + "successor": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(n, term, next)", + null + ], + "2": [ + "FUNCTION", + "cube(k)", + null + ], + "3": [ + "FUNCTION", + "successor(k)", + null + ], + "4": [ + "FUNCTION", + "sum_cubes(n)", + null + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/example-code/sum-cubes.txt b/v3/example-code/sum-cubes.txt new file mode 100644 index 000000000..7eff416f7 --- /dev/null +++ b/v3/example-code/sum-cubes.txt @@ -0,0 +1,16 @@ +def summation(n, term, next): + total, k = 0, 1 + while k <= n: + total, k = total + term(k), next(k) + return total + +def cube(k): + return pow(k, 3) + +def successor(k): + return k + 1 + +def sum_cubes(n): + return summation(n, cube, successor) + +sum_cubes(3) diff --git a/v3/example-code/sum-list.golden b/v3/example-code/sum-list.golden new file mode 100644 index 000000000..c121417d9 --- /dev/null +++ b/v3/example-code/sum-list.golden @@ -0,0 +1,3466 @@ +{ + "code": "myList = (1, (2, (3, (4, (5, None)))))\n\ndef sumList(node, subtotal):\n if not node:\n return subtotal\n else:\n return sumList(node[1], subtotal + node[0])\n\ntotal = sumList(myList, 0)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "myList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "__return__": 15, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "__return__": 15, + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "__return__": 15, + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "__return__": 15, + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "__return__": 15, + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "__return__": 15, + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList", + "total" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "total": 15, + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/example-code/sum-list.golden_py3 b/v3/example-code/sum-list.golden_py3 new file mode 100644 index 000000000..c121417d9 --- /dev/null +++ b/v3/example-code/sum-list.golden_py3 @@ -0,0 +1,3466 @@ +{ + "code": "myList = (1, (2, (3, (4, (5, None)))))\n\ndef sumList(node, subtotal):\n if not node:\n return subtotal\n else:\n return sumList(node[1], subtotal + node[0])\n\ntotal = sumList(myList, 0)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "myList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "subtotal": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "node": null, + "__return__": 15, + "subtotal": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f6", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "subtotal": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "node": [ + "REF", + 5 + ], + "__return__": 15, + "subtotal": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f5", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "subtotal": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "node": [ + "REF", + 4 + ], + "__return__": 15, + "subtotal": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f4", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "subtotal": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "node": [ + "REF", + 3 + ], + "__return__": 15, + "subtotal": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "subtotal": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "node": [ + "REF", + 2 + ], + "__return__": 15, + "subtotal": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList" + ], + "stdout": "", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "node": [ + "REF", + 1 + ], + "__return__": 15, + "subtotal": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "node", + "subtotal", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "myList", + "sumList", + "total" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "total": 15, + "myList": [ + "REF", + 1 + ], + "sumList": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 2, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 3, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 4, + [ + "REF", + 5 + ] + ], + "5": [ + "TUPLE", + 5, + null + ], + "6": [ + "FUNCTION", + "sumList(node, subtotal)", + null + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/example-code/sum-list.txt b/v3/example-code/sum-list.txt new file mode 100644 index 000000000..9945a6a6b --- /dev/null +++ b/v3/example-code/sum-list.txt @@ -0,0 +1,9 @@ +myList = (1, (2, (3, (4, (5, None))))) + +def sumList(node, subtotal): + if not node: + return subtotal + else: + return sumList(node[1], subtotal + node[0]) + +total = sumList(myList, 0) diff --git a/v3/example-code/sum.golden b/v3/example-code/sum.golden new file mode 100644 index 000000000..5995d2750 --- /dev/null +++ b/v3/example-code/sum.golden @@ -0,0 +1,10163 @@ +{ + "code": "# Higher-order functions\n# Adapted from MIT 6.01 course notes (Section A.2.2)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\ndef summation(low, high, f, next):\n s = 0\n x = low\n while x <= high:\n s = s + f(x)\n x = next(x)\n return s\n\ndef sumsquares(low, high):\n return summation(low, high, lambda x: x**2, lambda x: x+1)\n\nprint(sumsquares(1, 10))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 10, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 10, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 10, + "s": 0, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 4, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 9, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 4, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": 16, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 5, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": 25, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 6, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "__return__": 36, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f13", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": 7, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f14", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": 49, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f15", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": 8, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f16", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "__return__": 64, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f17", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "__return__": 9, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f18", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "__return__": 81, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f19", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 20, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 20, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 20, + "encoded_locals": { + "__return__": 10, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f20", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 21, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 21, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 21, + "encoded_locals": { + "__return__": 100, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f21", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 22, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 22, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 22, + "encoded_locals": { + "__return__": 11, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f22", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "__return__": 385, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "__return__": 385, + "low": 1 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "385\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "__return__": 385, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p_z", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/example-code/sum.golden_py3 b/v3/example-code/sum.golden_py3 new file mode 100644 index 000000000..5995d2750 --- /dev/null +++ b/v3/example-code/sum.golden_py3 @@ -0,0 +1,10163 @@ +{ + "code": "# Higher-order functions\n# Adapted from MIT 6.01 course notes (Section A.2.2)\n# http://mit.edu/6.01/mercurial/spring10/www/handouts/readings.pdf\n\ndef summation(low, high, f, next):\n s = 0\n x = low\n while x <= high:\n s = s + f(x)\n x = next(x)\n return s\n\ndef sumsquares(low, high):\n return summation(low, high, lambda x: x**2, lambda x: x+1)\n\nprint(sumsquares(1, 10))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 10, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 10, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 10, + "s": 0, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 4, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 9, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 4, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": 16, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 5, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": 25, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 6, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "__return__": 36, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f13", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 6 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": 7, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f14", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 91, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": 49, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f15", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 7 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": 8, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f16", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 140, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 17, + "encoded_locals": { + "__return__": 64, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f17", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 8 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 18, + "encoded_locals": { + "__return__": 9, + "x": 8 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f18", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 204, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 19, + "encoded_locals": { + "__return__": 81, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f19", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 20, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 20, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 9 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 20, + "encoded_locals": { + "__return__": 10, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f20", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 21, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 21, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 285, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 21, + "encoded_locals": { + "__return__": 100, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f21", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 22, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 22, + "encoded_locals": { + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 22, + "encoded_locals": { + "__return__": 11, + "x": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f22", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 10, + "s": 385, + "low": 1, + "__return__": 385, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "__return__": 385, + "low": 1 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "385\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 10, + "__return__": 385, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p_z", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/example-code/sum.txt b/v3/example-code/sum.txt similarity index 93% rename from example-code/sum.txt rename to v3/example-code/sum.txt index 99a8ace18..3fe651044 100644 --- a/example-code/sum.txt +++ b/v3/example-code/sum.txt @@ -13,4 +13,4 @@ def summation(low, high, f, next): def sumsquares(low, high): return summation(low, high, lambda x: x**2, lambda x: x+1) -print sumsquares(1, 10) +print(sumsquares(1, 10)) diff --git a/v3/example-code/towers_of_hanoi.golden b/v3/example-code/towers_of_hanoi.golden new file mode 100644 index 000000000..0b98e6d8c --- /dev/null +++ b/v3/example-code/towers_of_hanoi.golden @@ -0,0 +1,10996 @@ +{ + "code": "# move a stack of n disks from stack a to stack b,\n# using tmp as a temporary stack\ndef TowerOfHanoi(n, a, b, tmp):\n if n == 1:\n b.append(a.pop())\n else:\n TowerOfHanoi(n-1, a, tmp, b)\n b.append(a.pop())\n TowerOfHanoi(n-1, tmp, b, a)\n \nstack1 = [4,3,2,1]\nstack2 = []\nstack3 = []\n \n# transfer stack1 to stack3 using Tower of Hanoi rules\nTowerOfHanoi(len(stack1), stack1, stack3, stack2)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "TowerOfHanoi": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/example-code/towers_of_hanoi.golden_py3 b/v3/example-code/towers_of_hanoi.golden_py3 new file mode 100644 index 000000000..0b98e6d8c --- /dev/null +++ b/v3/example-code/towers_of_hanoi.golden_py3 @@ -0,0 +1,10996 @@ +{ + "code": "# move a stack of n disks from stack a to stack b,\n# using tmp as a temporary stack\ndef TowerOfHanoi(n, a, b, tmp):\n if n == 1:\n b.append(a.pop())\n else:\n TowerOfHanoi(n-1, a, tmp, b)\n b.append(a.pop())\n TowerOfHanoi(n-1, tmp, b, a)\n \nstack1 = [4,3,2,1]\nstack2 = []\nstack3 = []\n \n# transfer stack1 to stack3 using Tower of Hanoi rules\nTowerOfHanoi(len(stack1), stack1, stack3, stack2)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "TowerOfHanoi": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f4", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3, + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f5", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f3", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 3 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f7", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4, + 1 + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f8", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f6", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f2", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 4 + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2, + 1 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f11", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 3, + 2 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f12", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f10", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST", + 3 + ], + "4": [ + "LIST", + 4 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2, + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "tmp": [ + "REF", + 4 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 3 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f14", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST", + 2 + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST", + 1 + ], + "4": [ + "LIST", + 4, + 3, + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f15", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f13", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "tmp": [ + "REF", + 2 + ], + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f9", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "TowerOfHanoi", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "tmp": [ + "REF", + 3 + ], + "a": [ + "REF", + 2 + ], + "__return__": null, + "b": [ + "REF", + 4 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "TowerOfHanoi", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "TowerOfHanoi_f1", + "ordered_varnames": [ + "n", + "a", + "b", + "tmp", + "__return__" + ] + } + ], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "TowerOfHanoi", + "stack1", + "stack2", + "stack3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "stack3": [ + "REF", + 4 + ], + "stack2": [ + "REF", + 3 + ], + "TowerOfHanoi": [ + "REF", + 1 + ], + "stack1": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "TowerOfHanoi(n, a, b, tmp)", + null + ], + "2": [ + "LIST" + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 4, + 3, + 2, + 1 + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/example-code/towers_of_hanoi.txt b/v3/example-code/towers_of_hanoi.txt similarity index 100% rename from example-code/towers_of_hanoi.txt rename to v3/example-code/towers_of_hanoi.txt diff --git a/v3/example-code/varargs.golden b/v3/example-code/varargs.golden new file mode 100644 index 000000000..d12be8967 --- /dev/null +++ b/v3/example-code/varargs.golden @@ -0,0 +1,1015 @@ +{ + "code": "# Demonstrate *args and **kwargs\ndef f1(a, b, *rest):\n pass\n\nf1(1, 2)\nf1(1, 2, 3, 4, 5, 6, 7)\n\ndef f2(a, b, **kwrest):\n pass\n\nf2(1, 2, name='Bob', age=38)\n\ndef f3(a, b, *rest, **kwrest):\n pass\n\nf3(1, 2, 3, 4, name='Bob', age=38)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f1", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "2": [ + "TUPLE" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f1", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "2": [ + "TUPLE" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "rest": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f1", + "ordered_varnames": [ + "a", + "b", + "rest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "2": [ + "TUPLE" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f2", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "3": [ + "TUPLE", + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f2", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "3": [ + "TUPLE", + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "rest": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f2", + "ordered_varnames": [ + "a", + "b", + "rest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "3": [ + "TUPLE", + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "f2", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "a": 1, + "b": 2, + "kwrest": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f2", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f2_f3", + "ordered_varnames": [ + "a", + "b", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "5": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "f2", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "a": 1, + "b": 2, + "kwrest": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f2", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f2_f3", + "ordered_varnames": [ + "a", + "b", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "5": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "f2", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "kwrest": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f2", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f2_f3", + "ordered_varnames": [ + "a", + "b", + "kwrest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "5": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "f3", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 8 + ], + "kwrest": [ + "REF", + 7 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f3", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f3_f4", + "ordered_varnames": [ + "a", + "b", + "rest", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "8": [ + "TUPLE", + 3, + 4 + ], + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ], + "7": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "f3", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 8 + ], + "kwrest": [ + "REF", + 7 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f3", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f3_f4", + "ordered_varnames": [ + "a", + "b", + "rest", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "8": [ + "TUPLE", + 3, + 4 + ], + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ], + "7": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "f3", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "rest": [ + "REF", + 8 + ], + "kwrest": [ + "REF", + 7 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f3", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f3_f4", + "ordered_varnames": [ + "a", + "b", + "rest", + "kwrest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "8": [ + "TUPLE", + 3, + 4 + ], + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ], + "7": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/example-code/varargs.golden_py3 b/v3/example-code/varargs.golden_py3 new file mode 100644 index 000000000..d12be8967 --- /dev/null +++ b/v3/example-code/varargs.golden_py3 @@ -0,0 +1,1015 @@ +{ + "code": "# Demonstrate *args and **kwargs\ndef f1(a, b, *rest):\n pass\n\nf1(1, 2)\nf1(1, 2, 3, 4, 5, 6, 7)\n\ndef f2(a, b, **kwrest):\n pass\n\nf2(1, 2, name='Bob', age=38)\n\ndef f3(a, b, *rest, **kwrest):\n pass\n\nf3(1, 2, 3, 4, name='Bob', age=38)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f1", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "2": [ + "TUPLE" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f1", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "2": [ + "TUPLE" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "rest": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f1", + "ordered_varnames": [ + "a", + "b", + "rest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "2": [ + "TUPLE" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f2", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "3": [ + "TUPLE", + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f2", + "ordered_varnames": [ + "a", + "b", + "rest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "3": [ + "TUPLE", + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "f1", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "rest": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f1_f2", + "ordered_varnames": [ + "a", + "b", + "rest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "3": [ + "TUPLE", + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "f2", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "a": 1, + "b": 2, + "kwrest": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f2", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f2_f3", + "ordered_varnames": [ + "a", + "b", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "5": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "f2", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "a": 1, + "b": 2, + "kwrest": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f2", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f2_f3", + "ordered_varnames": [ + "a", + "b", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "5": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "f2", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "kwrest": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f2", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f2_f3", + "ordered_varnames": [ + "a", + "b", + "kwrest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "5": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "f1", + "f2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "f3", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 8 + ], + "kwrest": [ + "REF", + 7 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f3", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f3_f4", + "ordered_varnames": [ + "a", + "b", + "rest", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "8": [ + "TUPLE", + 3, + 4 + ], + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ], + "7": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "f3", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "a": 1, + "b": 2, + "rest": [ + "REF", + 8 + ], + "kwrest": [ + "REF", + 7 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f3", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f3_f4", + "ordered_varnames": [ + "a", + "b", + "rest", + "kwrest" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "8": [ + "TUPLE", + 3, + 4 + ], + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ], + "7": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "f3", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "a": 1, + "__return__": null, + "b": 2, + "rest": [ + "REF", + 8 + ], + "kwrest": [ + "REF", + 7 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f3", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f3_f4", + "ordered_varnames": [ + "a", + "b", + "rest", + "kwrest", + "__return__" + ] + } + ], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "8": [ + "TUPLE", + 3, + 4 + ], + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ], + "7": [ + "DICT", + [ + "age", + 38 + ], + [ + "name", + "Bob" + ] + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "f1", + "f2", + "f3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f1": [ + "REF", + 1 + ], + "f2": [ + "REF", + 4 + ], + "f3": [ + "REF", + 6 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f1(a, b, *rest)", + null + ], + "4": [ + "FUNCTION", + "f2(a, b, **kwrest)", + null + ], + "6": [ + "FUNCTION", + "f3(a, b, *rest, **kwrest)", + null + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/example-code/varargs.txt b/v3/example-code/varargs.txt new file mode 100644 index 000000000..97da39bb9 --- /dev/null +++ b/v3/example-code/varargs.txt @@ -0,0 +1,16 @@ +# Demonstrate *args and **kwargs +def f1(a, b, *rest): + pass + +f1(1, 2) +f1(1, 2, 3, 4, 5, 6, 7) + +def f2(a, b, **kwrest): + pass + +f2(1, 2, name='Bob', age=38) + +def f3(a, b, *rest, **kwrest): + pass + +f3(1, 2, 3, 4, name='Bob', age=38) diff --git a/v3/example-code/wentworth_gcd.golden b/v3/example-code/wentworth_gcd.golden new file mode 100644 index 000000000..cc0273cb0 --- /dev/null +++ b/v3/example-code/wentworth_gcd.golden @@ -0,0 +1,3798 @@ +{ + "code": "# Tutorial code from Prof. Peter Wentworth\n# Rhodes University, South Africa (http://www.ru.ac.za/)\n\ndef gcd(x, y, depth=1):\n '''\n Find the greatest common divisor of x, y\n Pre: x >= y, y >= 0, both x and y are int\n '''\n result = x # set provisional return value\n if y != 0:\n indent = \"**\" * depth\n print((\"%s About to recursively call gcd(%d, %d)\" % (indent, y, x%y)))\n result = gcd(y, x % y, depth+1)\n print((\"%s result is %d\" % (indent, result)))\n return result\n\ndef main():\n m = 77\n n = 28\n print((\"Finding gcd(%d, %d)\" % (m,n)))\n g = gcd(m, n)\n print(('Greatest common divisor of %d, %d = %d'\n % (m, n, g)))\n\nmain()\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 25, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 17, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4, + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4, + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4, + "result": 7, + "__return__": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "indent": "******", + "__return__": 7, + "depth": 3, + "result": 7, + "y": 7, + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "indent": "****", + "__return__": 7, + "depth": 2, + "result": 7, + "y": 21, + "x": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "indent": "**", + "__return__": 7, + "depth": 1, + "result": 7, + "y": 28, + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "g": 7, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n", + "g" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "g": 7, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n", + "g" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\nGreatest common divisor of 77, 28 = 7\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "m": 77, + "g": 7, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n", + "g", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 23, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\nGreatest common divisor of 77, 28 = 7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 25, + "event": "return" + } + ] +} diff --git a/v3/example-code/wentworth_gcd.golden_py3 b/v3/example-code/wentworth_gcd.golden_py3 new file mode 100644 index 000000000..cc0273cb0 --- /dev/null +++ b/v3/example-code/wentworth_gcd.golden_py3 @@ -0,0 +1,3798 @@ +{ + "code": "# Tutorial code from Prof. Peter Wentworth\n# Rhodes University, South Africa (http://www.ru.ac.za/)\n\ndef gcd(x, y, depth=1):\n '''\n Find the greatest common divisor of x, y\n Pre: x >= y, y >= 0, both x and y are int\n '''\n result = x # set provisional return value\n if y != 0:\n indent = \"**\" * depth\n print((\"%s About to recursively call gcd(%d, %d)\" % (indent, y, x%y)))\n result = gcd(y, x % y, depth+1)\n print((\"%s result is %d\" % (indent, result)))\n return result\n\ndef main():\n m = 77\n n = 28\n print((\"Finding gcd(%d, %d)\" % (m,n)))\n g = gcd(m, n)\n print(('Greatest common divisor of %d, %d = %d'\n % (m, n, g)))\n\nmain()\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 25, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 17, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4, + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4, + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth", + "result" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 21 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "y": 0, + "x": 7, + "depth": 4, + "result": 7, + "__return__": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f5", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "y": 7, + "x": 21, + "depth": 3, + "indent": "******", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "indent": "******", + "__return__": 7, + "depth": 3, + "result": 7, + "y": 7, + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f4", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "y": 21, + "x": 28, + "depth": 2, + "indent": "****", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 77 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "indent": "****", + "__return__": 7, + "depth": 2, + "result": 7, + "y": 21, + "x": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f3", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 28, + "x": 77, + "depth": 1, + "indent": "**", + "result": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "gcd", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "n": 28 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "indent": "**", + "__return__": 7, + "depth": 1, + "result": 7, + "y": 28, + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gcd", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gcd_f2", + "ordered_varnames": [ + "x", + "y", + "depth", + "result", + "indent", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "g": 7, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n", + "g" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "m": 77, + "g": 7, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n", + "g" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\nGreatest common divisor of 77, 28 = 7\n", + "func_name": "main", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "m": 77, + "g": 7, + "n": 28 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "main", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "main_f1", + "ordered_varnames": [ + "m", + "n", + "g", + "__return__" + ] + } + ], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 23, + "event": "return" + }, + { + "ordered_globals": [ + "gcd", + "main" + ], + "stdout": "Finding gcd(77, 28)\n** About to recursively call gcd(28, 21)\n**** About to recursively call gcd(21, 7)\n****** About to recursively call gcd(7, 0)\n****** result is 7\n**** result is 7\n** result is 7\nGreatest common divisor of 77, 28 = 7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "main": [ + "REF", + 2 + ], + "gcd": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gcd(x, y, depth)", + null + ], + "2": [ + "FUNCTION", + "main()", + null + ] + }, + "line": 25, + "event": "return" + } + ] +} diff --git a/example-code/wentworth_gcd.txt b/v3/example-code/wentworth_gcd.txt similarity index 64% rename from example-code/wentworth_gcd.txt rename to v3/example-code/wentworth_gcd.txt index b9d544fbd..683beffc2 100644 --- a/example-code/wentworth_gcd.txt +++ b/v3/example-code/wentworth_gcd.txt @@ -9,18 +9,18 @@ def gcd(x, y, depth=1): result = x # set provisional return value if y != 0: indent = "**" * depth - print("%s About to recursively call gcd(%d, %d)" % (indent, y, x%y)) + print(("%s About to recursively call gcd(%d, %d)" % (indent, y, x%y))) result = gcd(y, x % y, depth+1) - print("%s result is %d" % (indent, result)) + print(("%s result is %d" % (indent, result))) return result def main(): m = 77 n = 28 - print("Finding gcd(%d, %d)" % (m,n)) + print(("Finding gcd(%d, %d)" % (m,n))) g = gcd(m, n) - print('Greatest common divisor of %d, %d = %d' - % (m, n, g)) + print(('Greatest common divisor of %d, %d = %d' + % (m, n, g))) main() diff --git a/v3/example-code/wentworth_sumList.golden b/v3/example-code/wentworth_sumList.golden new file mode 100644 index 000000000..8809705d3 --- /dev/null +++ b/v3/example-code/wentworth_sumList.golden @@ -0,0 +1,4520 @@ +{ + "code": "# Tutorial code from Prof. Peter Wentworth\n# Rhodes University, South Africa (http://www.ru.ac.za/)\n\ndef sumList(xs):\n '''\n Sum a list that can contain nested lists.\n Precondition: All leaf elements are numbers.\n '''\n sum = 0\n for e in xs:\n if type(e) is list:\n print((\"Calling sumList(%s) recursively\" % e))\n v = sumList(e)\n print((\"sumList(%s) returned %s\" % (e, v)))\n sum += v\n else:\n sum += e\n return sum\n\n\ntestData = [10, [20, 30, [40], 50], 60]\nprint((\"Calling sumList(%s)\" % testData))\nresult = sumList(testData)\nprint((\"Final sum of all numbers in initial list is %s\" % result))\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 0, + "e": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 0, + "e": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 0, + "e": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 0, + "e": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 20, + "e": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 20, + "e": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 20, + "e": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 0, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 0, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 40, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 40, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 40, + "xs": [ + "REF", + 4 + ], + "sum": 40, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e", + "__return__" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ], + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ], + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 90, + "e": [ + "REF", + 4 + ], + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 90, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 90, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 140, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 140, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 140, + "xs": [ + "REF", + 3 + ], + "sum": 140, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v", + "__return__" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ], + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ], + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 150, + "e": [ + "REF", + 3 + ], + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 150, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 150, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 210, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 210, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 210, + "xs": [ + "REF", + 2 + ], + "sum": 210, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v", + "__return__" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sumList", + "testData", + "result" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "result": 210, + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData", + "result" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\nFinal sum of all numbers in initial list is 210\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "result": 210, + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 24, + "event": "return" + } + ] +} diff --git a/v3/example-code/wentworth_sumList.golden_py3 b/v3/example-code/wentworth_sumList.golden_py3 new file mode 100644 index 000000000..8809705d3 --- /dev/null +++ b/v3/example-code/wentworth_sumList.golden_py3 @@ -0,0 +1,4520 @@ +{ + "code": "# Tutorial code from Prof. Peter Wentworth\n# Rhodes University, South Africa (http://www.ru.ac.za/)\n\ndef sumList(xs):\n '''\n Sum a list that can contain nested lists.\n Precondition: All leaf elements are numbers.\n '''\n sum = 0\n for e in xs:\n if type(e) is list:\n print((\"Calling sumList(%s) recursively\" % e))\n v = sumList(e)\n print((\"sumList(%s) returned %s\" % (e, v)))\n sum += v\n else:\n sum += e\n return sum\n\n\ntestData = [10, [20, 30, [40], 50], 60]\nprint((\"Calling sumList(%s)\" % testData))\nresult = sumList(testData)\nprint((\"Final sum of all numbers in initial list is %s\" % result))\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 22, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 0, + "e": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 0, + "e": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 0, + "e": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 0, + "e": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 20, + "e": 20 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 20, + "e": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 20, + "e": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": 30 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 0, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 0, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 40, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "xs": [ + "REF", + 4 + ], + "sum": 40, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 40, + "xs": [ + "REF", + 4 + ], + "sum": 40, + "e": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f3", + "ordered_varnames": [ + "xs", + "sum", + "e", + "__return__" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ], + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 50, + "e": [ + "REF", + 4 + ], + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 90, + "e": [ + "REF", + 4 + ], + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 90, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 90, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 140, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 3 + ], + "sum": 140, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 140, + "xs": [ + "REF", + 3 + ], + "sum": 140, + "e": 50, + "v": 40 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f2", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v", + "__return__" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ], + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 10, + "e": [ + "REF", + 3 + ], + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 150, + "e": [ + "REF", + 3 + ], + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 150, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 150, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 210, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ], + "sum": 210, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "sumList", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 210, + "xs": [ + "REF", + 2 + ], + "sum": 210, + "e": 60, + "v": 140 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumList", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumList_f1", + "ordered_varnames": [ + "xs", + "sum", + "e", + "v", + "__return__" + ] + } + ], + "globals": { + "testData": [ + "REF", + 2 + ], + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 18, + "event": "return" + }, + { + "ordered_globals": [ + "sumList", + "testData", + "result" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "result": 210, + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "sumList", + "testData", + "result" + ], + "stdout": "Calling sumList([10, [20, 30, [40], 50], 60])\nCalling sumList([20, 30, [40], 50]) recursively\nCalling sumList([40]) recursively\nsumList([40]) returned 40\nsumList([20, 30, [40], 50]) returned 140\nFinal sum of all numbers in initial list is 210\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "testData": [ + "REF", + 2 + ], + "result": 210, + "sumList": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "sumList(xs)", + null + ], + "2": [ + "LIST", + 10, + [ + "REF", + 3 + ], + 60 + ], + "3": [ + "LIST", + 20, + 30, + [ + "REF", + 4 + ], + 50 + ], + "4": [ + "LIST", + 40 + ] + }, + "line": 24, + "event": "return" + } + ] +} diff --git a/example-code/wentworth_sumList.txt b/v3/example-code/wentworth_sumList.txt similarity index 66% rename from example-code/wentworth_sumList.txt rename to v3/example-code/wentworth_sumList.txt index e286c2d69..30727f674 100644 --- a/example-code/wentworth_sumList.txt +++ b/v3/example-code/wentworth_sumList.txt @@ -9,9 +9,9 @@ def sumList(xs): sum = 0 for e in xs: if type(e) is list: - print("Calling sumList(%s) recursively" % e) + print(("Calling sumList(%s) recursively" % e)) v = sumList(e) - print("sumList(%s) returned %s" % (e, v)) + print(("sumList(%s) returned %s" % (e, v))) sum += v else: sum += e @@ -19,7 +19,7 @@ def sumList(xs): testData = [10, [20, 30, [40], 50], 60] -print("Calling sumList(%s)" % testData) +print(("Calling sumList(%s)" % testData)) result = sumList(testData) -print("Final sum of all numbers in initial list is %s" % result) +print(("Final sum of all numbers in initial list is %s" % result)) diff --git a/v3/example-code/wentworth_try_finally.golden b/v3/example-code/wentworth_try_finally.golden new file mode 100644 index 000000000..f305d1d32 --- /dev/null +++ b/v3/example-code/wentworth_try_finally.golden @@ -0,0 +1,2823 @@ +{ + "code": "# Tutorial code from Prof. Peter Wentworth\n# Rhodes University, South Africa (http://www.ru.ac.za/)\n\n# Demonstrate recursion that throws an exception\n# at its base case, and the tracing of try ... finally.\n#\n# How many \"survived!\" messages will be printed???\n\ndef f(n):\n try:\n x = 10 / n\n print(\"x is \" + str(x))\n f(n-1)\n print(\"survived!\")\n finally:\n print(\"Bye from f where n = \" + str(n))\n\nf(4)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": null, + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 10, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "x": 10, + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 5, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "x": 5, + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "x": 3, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\nBye from f where n = 4\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 2, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2\nx is 3\nx is 5\nx is 10\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\nBye from f where n = 4\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 18, + "event": "exception" + } + ] +} diff --git a/v3/example-code/wentworth_try_finally.golden_py3 b/v3/example-code/wentworth_try_finally.golden_py3 new file mode 100644 index 000000000..5b02e3eb7 --- /dev/null +++ b/v3/example-code/wentworth_try_finally.golden_py3 @@ -0,0 +1,2913 @@ +{ + "code": "# Tutorial code from Prof. Peter Wentworth\n# Rhodes University, South Africa (http://www.ru.ac.za/)\n\n# Demonstrate recursion that throws an exception\n# at its base case, and the tracing of try ... finally.\n#\n# How many \"survived!\" messages will be printed???\n\ndef f(n):\n try:\n x = 10 / n\n print(\"x is \" + str(x))\n f(n-1)\n print(\"survived!\")\n finally:\n print(\"Bye from f where n = \" + str(n))\n\nf(4)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 11, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": null, + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f5", + "ordered_varnames": [ + "n", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "x": [ + "SPECIAL_FLOAT", + "10.0" + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "x": [ + "SPECIAL_FLOAT", + "5.0" + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3.333, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "x": 3.333, + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 13, + "event": "exception" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 2.500, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\nBye from f where n = 4\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "x": 2.500, + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "n", + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "x is 2.5\nx is 3.3333333333333335\nx is 5.0\nx is 10.0\nBye from f where n = 0\nBye from f where n = 1\nBye from f where n = 2\nBye from f where n = 3\nBye from f where n = 4\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(n)", + null + ] + }, + "line": 18, + "event": "exception" + } + ] +} diff --git a/example-code/wentworth_try_finally.txt b/v3/example-code/wentworth_try_finally.txt similarity index 75% rename from example-code/wentworth_try_finally.txt rename to v3/example-code/wentworth_try_finally.txt index daab5e33c..b6617fa56 100644 --- a/example-code/wentworth_try_finally.txt +++ b/v3/example-code/wentworth_try_finally.txt @@ -9,10 +9,10 @@ def f(n): try: x = 10 / n - print "x is", x + print("x is " + str(x)) f(n-1) - print "survived!" + print("survived!") finally: - print "Bye from f where n =", n + print("Bye from f where n = " + str(n)) f(4) diff --git a/v3/example.py b/v3/example.py new file mode 100644 index 000000000..70433b650 --- /dev/null +++ b/v3/example.py @@ -0,0 +1,3 @@ +x = 5 +y = 10 +z = x + y diff --git a/v3/favicon.ico b/v3/favicon.ico new file mode 100644 index 000000000..c9efc5844 Binary files /dev/null and b/v3/favicon.ico differ diff --git a/v3/frontend-tests.html b/v3/frontend-tests.html new file mode 100644 index 000000000..a5a9d5a24 --- /dev/null +++ b/v3/frontend-tests.html @@ -0,0 +1,40 @@ + + + + + Online Python Tutor - test all frontends + + + + + + +

iframe-embed.html:

+ + + +

+ +

visualize.html:

+ + + +

composingprograms.html:

+ + + +

csc108h.html:

+ + + +

csc108h_shared.html:

+ + + +

Office Mix

+ + + + + diff --git a/v3/generate_json_trace.py b/v3/generate_json_trace.py new file mode 100644 index 000000000..5e1dbc4a7 --- /dev/null +++ b/v3/generate_json_trace.py @@ -0,0 +1,57 @@ +# Generates a JSON trace that is compatible with the js/pytutor.js frontend + +import sys, pg_logger, json +from optparse import OptionParser + +# To make regression tests work consistently across platforms, +# standardize display of floats to 3 significant figures +# +# Trick from: +# http://stackoverflow.com/questions/1447287/format-floats-with-standard-json-module +json.encoder.FLOAT_REPR = lambda f: ('%.3f' % f) + +def json_finalizer(input_code, output_trace): + ret = dict(code=input_code, trace=output_trace) + # sort_keys=True leads to printing in DETERMINISTIC order, but might + # screw up some old tests ... however, there is STILL non-determinism + # in Python 3.3 tests, ugh! + json_output = json.dumps(ret, indent=INDENT_LEVEL) + return json_output + +def js_var_finalizer(input_code, output_trace): + global JS_VARNAME + ret = dict(code=input_code, trace=output_trace) + json_output = json.dumps(ret, indent=None) + return "var %s = %s;" % (JS_VARNAME, json_output) + +parser = OptionParser(usage="Generate JSON trace for pytutor") +parser.add_option('-c', '--cumulative', default=False, action='store_true', + help='output cumulative trace.') +parser.add_option('-p', '--heapPrimitives', default=False, action='store_true', + help='render primitives as heap objects.') +parser.add_option('-o', '--compact', default=False, action='store_true', + help='output compact trace.') +parser.add_option('-i', '--input', default=False, action='store', + help='JSON list of strings for simulated raw_input.', dest='raw_input_lst_json') +parser.add_option("--create_jsvar", dest="js_varname", default=None, + help="Create a JavaScript variable out of the trace") +parser.add_option("--code", dest="usercode", default=None, + help="Load user code from a string instead of a file and output compact JSON") + +(options, args) = parser.parse_args() +INDENT_LEVEL = None if options.compact else 2 + +if options.usercode: + INDENT_LEVEL = None + print(pg_logger.exec_script_str_local(options.usercode, + options.raw_input_lst_json, + options.cumulative, + options.heapPrimitives, + json_finalizer)) +else: + fin = sys.stdin if args[0] == "-" else open(args[0]) + if options.js_varname: + JS_VARNAME = options.js_varname + print(pg_logger.exec_script_str_local(fin.read(), options.raw_input_lst_json, options.cumulative, options.heapPrimitives, js_var_finalizer)) + else: + print(pg_logger.exec_script_str_local(fin.read(), options.raw_input_lst_json, options.cumulative, options.heapPrimitives, json_finalizer)) diff --git a/v3/htmlFrame.py b/v3/htmlFrame.py new file mode 100644 index 000000000..ec57cfd22 --- /dev/null +++ b/v3/htmlFrame.py @@ -0,0 +1,34 @@ +# h t m l F r a m e . p y +# +# Chris Meyers. 09/25/2013 +# +# Holder for attributes to be applied to a template and +# a simple function to apply attributes to template and +# send it to the
for display + +from pg_logger import setHTML + +dft_template = """ + +

%(banner)s

+
%(item1)s
+
%(item2)s
+
%(item3)s
+ +""" + +class HtmlFrame : + def __init__ (self, template=dft_template, banner="") : + self.outputOn = True + self.template = template + self.banner = banner + self.item1 = self.item2 = self.item3 = "" + + def makeEofPage(self) : + pass + + def makeFrame (self,template=None) : + if not template : template = self.template + content = template % self.__dict__ + setHTML(content) + diff --git a/v3/html_module.py b/v3/html_module.py new file mode 100644 index 000000000..b9fd08df8 --- /dev/null +++ b/v3/html_module.py @@ -0,0 +1,2 @@ +def display_img(src): + setHTML('' % str(src)) diff --git a/v3/htmlexample_module.py b/v3/htmlexample_module.py new file mode 100644 index 000000000..f72cf6979 --- /dev/null +++ b/v3/htmlexample_module.py @@ -0,0 +1,71 @@ +# Example module for Online Python Tutor +# Philip Guo +# 2013-08-03 + +# To get the Online Python Tutor backend to import this custom module, +# add its filename ('htmlexample_module') to the CUSTOM_MODULE_IMPORTS +# tuple in pg_logger.py + +# To see an example of this module at work, write the following code in +# http://pythontutor.com/visualize.html +''' +from htmlexample_module import ColorTable + +t = ColorTable(3, 4) + +t.set_color(0, 0, 'red') +t.render_HTML() + +t.set_color(1, 1, 'green') +t.render_HTML() + +t.set_color(2, 2, 'blue') +t.render_HTML() + +for i in range(3): + for j in range(4): + t.set_color(i, j, 'gray') + t.render_HTML() +''' + + +# defines a simple table where you can set colors for individual rows and columns +class ColorTable: + def __init__(self, num_rows, num_columns): + self.num_rows = num_rows + self.num_columns = num_columns + + # create a 2D matrix of empty strings + self.table = [] + for i in range(self.num_rows): + new_lst = ['' for e in range(self.num_columns)] + self.table.append(new_lst) + + + # color must be a legal HTML color string + def set_color(self, row, column, color): + assert 0 <= row < self.num_rows + assert 0 <= column < self.num_columns + self.table[row][column] = color + + + # call this function whenever you want to render this table in HTML + def render_HTML(self): + # incrementally build up an HTML table string + html_string = '' + + for i in range(self.num_rows): + html_string += '' + for j in range(self.num_columns): + color = self.table[i][j] + if not color: + color = "white" + html_string += '''''' % color + html_string += '' + + html_string += '
' + + # then call the magic setHTML function + setHTML(html_string) + diff --git a/v3/iframe-embed-demo.html b/v3/iframe-embed-demo.html new file mode 100644 index 000000000..c04fc636c --- /dev/null +++ b/v3/iframe-embed-demo.html @@ -0,0 +1,35 @@ + + + + + Online Python Tutor - iframe embed demo + + + + + + + + +

+ + + +

+ + + +

+ + + +

+ + + +

+ + + + + diff --git a/v3/iframe-embed.html b/v3/iframe-embed.html new file mode 100644 index 000000000..8973205cb --- /dev/null +++ b/v3/iframe-embed.html @@ -0,0 +1,33 @@ + + + + + Online Python Tutor - iframe embed page + + + + + + + + + + + + + + + + + + + + + + + +

+ + + diff --git a/v3/index.html b/v3/index.html new file mode 100644 index 000000000..f9c49459d --- /dev/null +++ b/v3/index.html @@ -0,0 +1,279 @@ + + + + + + + +Python Tutor - Visualize Python, Java, JavaScript, TypeScript, Ruby, C, and C++ code execution + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+ +

VISUALIZE +Python, +Java, +JavaScript, +TypeScript, +Ruby, +C, +and C++ +programs + +

+ +

Python Tutor, created +by Philip Guo, +helps people overcome a fundamental +barrier to learning programming: understanding what happens as the +computer executes each line of a program's source code.

+ + +

Using this +tool, you can write Python, +Java, +JavaScript, +TypeScript, +Ruby, +C, +and C++ +programs in your Web +browser and visualize what the computer is doing step-by-step as it executes those programs. + +So far, over 1.5 million people in over 180 countries have used +Python Tutor to visualize over 15 million pieces of code, often as a +supplement to textbooks, lecture notes, and online programming +tutorials.

+ + + + +

For example, here is a visualization showing a Python program that recursively +finds the sum of a linked list:

+ +
+ + + +

+Read +the research paper – Philip J. Guo. Online Python Tutor: Embeddable +Web-Based Program Visualization for CS Education. In Proceedings +of the ACM Technical Symposium on Computer Science Education +(SIGCSE), March 2013. [BibTeX] +

+ + +
+ +
+ + + + + + + +
+ +
+ +

SHARE live visualization sessions

+ +

Click the “Start shared session” button to allow an instructor or friend + to join your session. You can chat about your code and navigate + the visualization together to get live, real-time tutoring. Watch this one-minute + video demo: +

+ + + +

Also, you can click the “Generate +permanent link” button (at the bottom of this +page) and paste that link in an email, social networking +post, or forum question. When recipients click on your link, they will +see the exact visualization you've created.

+ +

For example, clicking this +link brings you directly to step 44 of 57 in a program that finds +prime numbers using the Python for-else construct.

+ +
+ +
+ +
+ +

EMBED in any Web page

+ +

Using a single line of JavaScript code, you can embed a Python Tutor +visualization within any Web page (as shown in the “Learn” +box above). The screenshot below shows a visualization +embedded within the online textbook for the introductory CS course at UC +Berkeley (CS61A): + +

+ + + + + +
+ + +
+ +

+Details: +

+

+ + + +
+ +
+ +
+ + + + + + + diff --git a/v3/java-example-code/Casting.java b/v3/java-example-code/Casting.java new file mode 100644 index 000000000..723028813 --- /dev/null +++ b/v3/java-example-code/Casting.java @@ -0,0 +1,12 @@ +public class Casting { + public static void main(String[] args) { + // casting doesn't change the object + Object obj; + { + Stopwatch w = new Stopwatch(); + obj = w; + } + System.out.println(obj); // still a Stopwatch + } +} + \ No newline at end of file diff --git a/v3/java-example-code/CmdLineArgs.java b/v3/java-example-code/CmdLineArgs.java new file mode 100644 index 000000000..e03c266c9 --- /dev/null +++ b/v3/java-example-code/CmdLineArgs.java @@ -0,0 +1,16 @@ +public class CmdLineArgs { + public static void main(String[] args) { + // you can change "args" in the boxes below this window + int a = Integer.parseInt(args[0]); + int b = Integer.parseInt(args[1]); + int sum = a + b; + int prod = a * b; + int quot = a / b; + int rem = a % b; + System.out.println(a + " + " + b + " = " + sum); + System.out.println(a + " * " + b + " = " + prod); + System.out.println(a + " / " + b + " = " + quot); + System.out.println(a + " % " + b + " = " + rem); + } +} +/*viz_options {"args":["1234","99"]}*/ \ No newline at end of file diff --git a/v3/java-example-code/Complex.java b/v3/java-example-code/Complex.java new file mode 100644 index 000000000..a7264ff07 --- /dev/null +++ b/v3/java-example-code/Complex.java @@ -0,0 +1,154 @@ +/************************************************************************* + * From: http://introcs.cs.princeton.edu/java/home/ (Section 9.7) + * + * Compilation: javac Complex.java + * Execution: java Complex + * + * Data type for complex numbers. + * + * The data type is "immutable" so once you create and initialize + * a Complex object, you cannot change it. The "final" keyword + * when declaring re and im enforces this rule, making it a + * compile-time error to change the .re or .im fields after + * they've been initialized. + * + * % java Complex + * a = 5.0 + 6.0i + * b = -3.0 + 4.0i + * Re(a) = 5.0 + * Im(a) = 6.0 + * b + a = 2.0 + 10.0i + * a - b = 8.0 + 2.0i + * a * b = -39.0 + 2.0i + * b * a = -39.0 + 2.0i + * a / b = 0.36 - 1.52i + * (a / b) * b = 5.0 + 6.0i + * conj(a) = 5.0 - 6.0i + * |a| = 7.810249675906654 + * tan(a) = -6.685231390246571E-6 + 1.0000103108981198i + * + *************************************************************************/ + +public class Complex { + private final double re; // the real part + private final double im; // the imaginary part + + // create a new object with the given real and imaginary parts + public Complex(double real, double imag) { + re = real; + im = imag; + } + + // return a string representation of the invoking Complex object + public String toString() { + if (im == 0) return re + ""; + if (re == 0) return im + "i"; + if (im < 0) return re + " - " + (-im) + "i"; + return re + " + " + im + "i"; + } + + // return abs/modulus/magnitude and angle/phase/argument + public double abs() { return Math.hypot(re, im); } // Math.sqrt(re*re + im*im) + public double phase() { return Math.atan2(im, re); } // between -pi and pi + + // return a new Complex object whose value is (this + b) + public Complex plus(Complex b) { + Complex a = this; // invoking object + double real = a.re + b.re; + double imag = a.im + b.im; + return new Complex(real, imag); + } + + // return a new Complex object whose value is (this - b) + public Complex minus(Complex b) { + Complex a = this; + double real = a.re - b.re; + double imag = a.im - b.im; + return new Complex(real, imag); + } + + // return a new Complex object whose value is (this * b) + public Complex times(Complex b) { + Complex a = this; + double real = a.re * b.re - a.im * b.im; + double imag = a.re * b.im + a.im * b.re; + return new Complex(real, imag); + } + + // scalar multiplication + // return a new object whose value is (this * alpha) + public Complex times(double alpha) { + return new Complex(alpha * re, alpha * im); + } + + // return a new Complex object whose value is the conjugate of this + public Complex conjugate() { return new Complex(re, -im); } + + // return a new Complex object whose value is the reciprocal of this + public Complex reciprocal() { + double scale = re*re + im*im; + return new Complex(re / scale, -im / scale); + } + + // return the real or imaginary part + public double re() { return re; } + public double im() { return im; } + + // return a / b + public Complex divides(Complex b) { + Complex a = this; + return a.times(b.reciprocal()); + } + + // return a new Complex object whose value is the complex exponential of this + public Complex exp() { + return new Complex(Math.exp(re) * Math.cos(im), Math.exp(re) * Math.sin(im)); + } + + // return a new Complex object whose value is the complex sine of this + public Complex sin() { + return new Complex(Math.sin(re) * Math.cosh(im), Math.cos(re) * Math.sinh(im)); + } + + // return a new Complex object whose value is the complex cosine of this + public Complex cos() { + return new Complex(Math.cos(re) * Math.cosh(im), -Math.sin(re) * Math.sinh(im)); + } + + // return a new Complex object whose value is the complex tangent of this + public Complex tan() { + return sin().divides(cos()); + } + + + + // a static version of plus + public static Complex plus(Complex a, Complex b) { + double real = a.re + b.re; + double imag = a.im + b.im; + Complex sum = new Complex(real, imag); + return sum; + } + + + + // sample client for testing + public static void main(String[] args) { + Complex a = new Complex(5.0, 6.0); + Complex b = new Complex(-3.0, 4.0); + + System.out.println("a = " + a); + System.out.println("b = " + b); + System.out.println("Re(a) = " + a.re()); + System.out.println("Im(a) = " + a.im()); + System.out.println("b + a = " + b.plus(a)); + System.out.println("a - b = " + a.minus(b)); + System.out.println("a * b = " + a.times(b)); + System.out.println("b * a = " + b.times(a)); + System.out.println("a / b = " + a.divides(b)); + System.out.println("(a / b) * b = " + a.divides(b).times(b)); + System.out.println("conj(a) = " + a.conjugate()); + System.out.println("|a| = " + a.abs()); + } + +} \ No newline at end of file diff --git a/v3/java-example-code/ControlFlow.java b/v3/java-example-code/ControlFlow.java new file mode 100644 index 000000000..b3f3b44dd --- /dev/null +++ b/v3/java-example-code/ControlFlow.java @@ -0,0 +1,15 @@ +public class ControlFlow { + public static void main(String[] args) { + while (true) { + double roll = 3*Math.random(); + if (roll > 2.8) + break; + if ((int)roll == 2) + continue; + else if ((int)roll == 0) + System.out.println("low"); + else + System.out.println("hi"); + } + } +} \ No newline at end of file diff --git a/v3/java-example-code/Exception.java b/v3/java-example-code/Exception.java new file mode 100644 index 000000000..b746c1fab --- /dev/null +++ b/v3/java-example-code/Exception.java @@ -0,0 +1,17 @@ +public class Exception { + public static void main(String[] args) { + // this one will be caught + int x = 0; + try { + x = 1/x; + } + catch (RuntimeException e) { + x = -1; + System.out.println("Caught!"); + } + System.out.println(x); + + System.out.println(1/0); + System.out.println("this won't run"); + } +} \ No newline at end of file diff --git a/v3/java-example-code/ExceptionFlow.java b/v3/java-example-code/ExceptionFlow.java new file mode 100644 index 000000000..10ed88ae0 --- /dev/null +++ b/v3/java-example-code/ExceptionFlow.java @@ -0,0 +1,25 @@ +public class ExceptionFlow { + static String trace = ""; + + static void f() { + trace += "call-f "; + g(); + trace += "return-f "; + } + + static void g() { + trace += "call-g "; + int z = 1/0; + trace += "return-g "; + } + + public static void main(String[] args) { + try { + f(); + } + catch (RuntimeException e) { + trace += "caught!"; + } + System.out.println(trace); + } +} \ No newline at end of file diff --git a/v3/java-example-code/ExecLimit.java b/v3/java-example-code/ExecLimit.java new file mode 100644 index 000000000..10c925525 --- /dev/null +++ b/v3/java-example-code/ExecLimit.java @@ -0,0 +1,7 @@ +public class ExecLimit { + public static void main(String[] args) { + int sum = 0; + for (int i=0; i<300; i++) + sum += i; + } +} \ No newline at end of file diff --git a/v3/java-example-code/Forest.java b/v3/java-example-code/Forest.java new file mode 100644 index 000000000..6571fbef1 --- /dev/null +++ b/v3/java-example-code/Forest.java @@ -0,0 +1,34 @@ +// Princeton COS 126 Written Exam 2, Fall 2010, Question 3 +// note: this is a proof-of-concept, but to do this on +// paper you would instead skip as many internal steps of +// root, merge, and merged as possible + +public class Node { + private Node next; + private int index; + private Node root() { + if (next == null) return this; + return next.root(); + } + public static void merge(Node a, Node b) { + a.root().next = b.root(); + } + public static boolean merged(Node a, Node b) { + return a.root() == b.root(); + } + public static void main(String[] args) { + Node[] f = new Node[8]; + for (int i=0; i<8; i++) {f[i] = new Node(); f[i].index=i;} + merge(f[0], f[3]); + merge(f[1], f[2]); + merge(f[1], f[4]); + merge(f[5], f[6]); + merge(f[3], f[4]); + merge(f[7], f[5]); + + System.out.println(merged(f[0], f[3])); + System.out.println(merged(f[0], f[7])); + System.out.println(merged(f[1], f[3])); + System.out.println(merged(f[4], f[5])); + } +} \ No newline at end of file diff --git a/v3/java-example-code/Knapsack.java b/v3/java-example-code/Knapsack.java new file mode 100644 index 000000000..38270228a --- /dev/null +++ b/v3/java-example-code/Knapsack.java @@ -0,0 +1,13 @@ +public class Knapsack { + public static void main(String[] args) { + int[] itemSizes = {3, 5, 6, 8}; + int capacity = 15; + boolean[] canMakeSum = new boolean[capacity+1]; + canMakeSum[0] = true; + for (int size : itemSizes) { + for (int i=capacity; i>=size; i--) + canMakeSum[i] |= canMakeSum[i-size]; + } + System.out.println(java.util.Arrays.toString(canMakeSum)); + } +} \ No newline at end of file diff --git a/v3/java-example-code/LambdaExample.java b/v3/java-example-code/LambdaExample.java new file mode 100644 index 000000000..8416b4473 --- /dev/null +++ b/v3/java-example-code/LambdaExample.java @@ -0,0 +1,22 @@ +import java.util.function.*; + +public class LambdaExample { + // note: this only works in Java 8 + + static Function inc(int x) { + return y -> x+y; + } + + static Function mul(int x) { + return y -> x*y; + } + + public static void main(String[] args) { + // bad style, generic erasure to get array + Function[] fs = {inc(5), inc(10), mul(7), mul(2)}; + + for (Function f : fs) + System.out.println( + ((Function)f).apply(100)); + } +} \ No newline at end of file diff --git a/v3/java-example-code/LinkedList.java b/v3/java-example-code/LinkedList.java new file mode 100644 index 000000000..18acff81c --- /dev/null +++ b/v3/java-example-code/LinkedList.java @@ -0,0 +1,43 @@ +// named after barrel of monkeys: +// each one hangs on to the next +public class LinkedList { + + // structure of items in list + class Node { + // each node knows "next" node + Node next; + // and stores a value + String name; + // constructor for nodes + Node(String initialName) { + name = initialName; + } + } + + // beginning of the list, initially empty + private Node first = null; + + // a demo to create a length-3 list + public void threeKongs() { + first = new Node("DK Sr."); + first.next = new Node("DK"); + first.next.next = new Node("DK Jr."); + } + + // use a loop to print all + public void printAll() { + // a while loop also can work + for (Node current = first; + current != null; + current = current.next) { + System.out.println(current.name); + } + } + + public static void main(String[] args) { + LinkedList mc = new LinkedList(); + mc.threeKongs(); + mc.printAll(); + } +} +/*viz_options {"disableNesting":true}*/ \ No newline at end of file diff --git a/v3/java-example-code/PassByValue.java b/v3/java-example-code/PassByValue.java new file mode 100644 index 000000000..41d554dd1 --- /dev/null +++ b/v3/java-example-code/PassByValue.java @@ -0,0 +1,28 @@ +public class PassByValue { + + static void reset(int x) { + x = 0; + } + + static void reset(int[] x) { + for (int i : x) + i = 0; + } + + static void reallyReset(int[] x) { + for (int i=0; i stacky = new Stack<>(); + for (char ch : "123+45*6-+-".toCharArray()) { + if (ch == '+') + stacky.push(stacky.pop() + stacky.pop()); + else if (ch == '*') + stacky.push(stacky.pop() * stacky.pop()); + else if (ch == '-') + stacky.push(-stacky.pop() + stacky.pop()); + else + stacky.push(ch-'0'); + } + System.out.println(stacky.pop()); + } +} \ No newline at end of file diff --git a/v3/java-example-code/README b/v3/java-example-code/README new file mode 100644 index 000000000..5805a4a2d --- /dev/null +++ b/v3/java-example-code/README @@ -0,0 +1,3 @@ +adapted from https://github.com/daveagp/java_visualize/tree/master/example-code + +examples created by David Pritchard diff --git a/v3/java-example-code/Recursion.java b/v3/java-example-code/Recursion.java new file mode 100644 index 000000000..031da5d12 --- /dev/null +++ b/v3/java-example-code/Recursion.java @@ -0,0 +1,10 @@ +public class Recursion { + public static void ruler(int n) { + if (n>0) ruler(n-1); + System.out.println(n); + if (n>0) ruler(n-1); + } + public static void main(String[] args) { + ruler(2); + } +} \ No newline at end of file diff --git a/v3/java-example-code/Reflect.java b/v3/java-example-code/Reflect.java new file mode 100644 index 000000000..369c8dc35 --- /dev/null +++ b/v3/java-example-code/Reflect.java @@ -0,0 +1,15 @@ +import java.lang.reflect.*; + +public class Reflect { + public static void announce() { + System.out.println("Someone called announce()."); + } + public static void main(String[] args) { + try { + Method m = Reflect.class.getMethod("announce", null); + m.invoke(null); // null "this" since it's a static method + } + catch (NoSuchMethodException | IllegalAccessException + | InvocationTargetException e) {} + } +} \ No newline at end of file diff --git a/v3/java-example-code/Rolex.java b/v3/java-example-code/Rolex.java new file mode 100644 index 000000000..7e7d80c1f --- /dev/null +++ b/v3/java-example-code/Rolex.java @@ -0,0 +1,37 @@ +public class Rolex { + private final long start; + + public Rolex() { + start = System.currentTimeMillis(); + } + + // return time (in seconds) since this object was created + public double elapsedTime() { + long now = System.currentTimeMillis(); + return (now - start) / 1000.0; + } + + public static void main(String[] args) { + Rolex watchOne = new Rolex(); + // waste time so it is large enough to be measurable + try {Thread.sleep(500);} catch (InterruptedException e) {} + + Rolex watchTwo = new Rolex(); + // waste time so it is large enough to be measurable + try {Thread.sleep(500);} catch (InterruptedException e) {} + + // right now, watchOne is older + System.out.println("watchOne " + watchOne.elapsedTime()); + System.out.println("watchTwo " + watchTwo.elapsedTime()); + + Rolex watchTmp = watchOne; + watchOne = watchTwo; + watchTwo = watchTmp; + + // swapped! now watchTwo is the older one + // e.g. watchTwo.elapsedTime() returns a value + // (slightly) larger than watchOne.elapsedTime() + System.out.println("watchOne " + watchOne.elapsedTime()); + System.out.println("watchTwo " + watchTwo.elapsedTime()); + } +} \ No newline at end of file diff --git a/v3/java-example-code/Sqrt.java b/v3/java-example-code/Sqrt.java new file mode 100644 index 000000000..3ebb25916 --- /dev/null +++ b/v3/java-example-code/Sqrt.java @@ -0,0 +1,14 @@ +public class Sqrt { + public static void main(String[] args) { + double target = 2013; + double x = 1; + double oldx; + do { + oldx = x; + x = (x + target / x) / 2; + } + while (oldx != x); + System.out.println(x); + System.out.println(x*x); + } +} \ No newline at end of file diff --git a/v3/java-example-code/StackOverflow.java b/v3/java-example-code/StackOverflow.java new file mode 100644 index 000000000..8092ab026 --- /dev/null +++ b/v3/java-example-code/StackOverflow.java @@ -0,0 +1,9 @@ +public class StackOverflow { + private static void burn(int i) { + i = i + 1; + burn(i); + } + public static void main(String[] args) { + burn(0); + } +} \ No newline at end of file diff --git a/v3/java-example-code/StackQueue.java b/v3/java-example-code/StackQueue.java new file mode 100644 index 000000000..1c7bb847a --- /dev/null +++ b/v3/java-example-code/StackQueue.java @@ -0,0 +1,22 @@ +public class StackQueue { + public static void main(String[] args) { + Stack stack = new Stack<>(); + Queue queue = new Queue<>(); + + stack.push("stack-first"); + stack.push("stack-last"); + + queue.enqueue("queue-first"); + queue.enqueue("queue-last"); + + for (String s : stack) + System.out.println("stack contains " + s); + for (String s : queue) + System.out.println("queue contains " + s); + + while (!stack.isEmpty()) + System.out.println(stack.pop()); + while (!queue.isEmpty()) + System.out.println(queue.dequeue()); + } +} \ No newline at end of file diff --git a/v3/java-example-code/StaticInitializer.java b/v3/java-example-code/StaticInitializer.java new file mode 100644 index 000000000..d1a55b8bc --- /dev/null +++ b/v3/java-example-code/StaticInitializer.java @@ -0,0 +1,9 @@ +public class StaticInitializer { + static { + // static initializer, runs when class is initialized + System.out.println("When will this print?"); + } + public static void main(String[] args) { + System.out.println("Now we're in main"); + } +} \ No newline at end of file diff --git a/v3/java-example-code/StdIn.java b/v3/java-example-code/StdIn.java new file mode 100644 index 000000000..09757c3c2 --- /dev/null +++ b/v3/java-example-code/StdIn.java @@ -0,0 +1,12 @@ +public class StdInDemo { + public static void main(String[] args) { + StdOut.println("int: " + StdIn.readInt()); + StdOut.println("double: " + StdIn.readDouble()); + StdOut.println("String (token): " + StdIn.readString()); + StdOut.println("char: " + StdIn.readChar()); + StdOut.println("char: " + StdIn.readChar()); + StdOut.println("line: " + StdIn.readLine()); + StdOut.println("empty?: " + StdIn.isEmpty()); + } +} +/*viz_options {"stdin":"13 3.4 mytoken chars rest of line\nanother line"} */ \ No newline at end of file diff --git a/v3/java-example-code/Strings.java b/v3/java-example-code/Strings.java new file mode 100644 index 000000000..b425ca12e --- /dev/null +++ b/v3/java-example-code/Strings.java @@ -0,0 +1,15 @@ +public class Strings { + public static void main(String[] args) { + String a = "Hello, world!"; + String b = "Hello, world!!".substring(0, 13); + String c = "Hello, "; + c += "world!"; + String d = "Hello, w"+"orld!"; // constant expr, interned + String e = a.substring(0, 13); + System.out.println((a == b) + " " + a.equals(b)); + System.out.println((a == c) + " " + a.equals(c)); + System.out.println((a == d) + " " + a.equals(d)); + System.out.println((a == e) + " " + a.equals(e)); + } +} +/*viz_options {"showStringsAsObjects":true}*/ \ No newline at end of file diff --git a/v3/java-example-code/SymbolTable.java b/v3/java-example-code/SymbolTable.java new file mode 100644 index 000000000..605916f0c --- /dev/null +++ b/v3/java-example-code/SymbolTable.java @@ -0,0 +1,12 @@ +public class SymbolTable { + public static void main(String[] args) { + ST st = new ST<>(); + st.put("key1", "value1"); + st.put("key2", "value2"); + st.put("key3", "value3"); + st.put("key1", "different value"); + st.delete("key2"); + for (String s : st.keys()) + StdOut.println(s + " " + st.get(s)); + } +} \ No newline at end of file diff --git a/v3/java-example-code/Synthetic.java b/v3/java-example-code/Synthetic.java new file mode 100644 index 000000000..4e7001bbf --- /dev/null +++ b/v3/java-example-code/Synthetic.java @@ -0,0 +1,32 @@ +public class Synthetic { + + class Inner { + // contains auto-generated (synthetic) + // field "this$0" of type Synthetic + } + + public static void main(String[] args) { + Synthetic a = new Synthetic(); + Synthetic b = new Synthetic(); + Inner c = a.new Inner(); + Inner d = b.new Inner(); + // end of first + + final String[] magic = {"7", "8"}; + // anonymous class + Object e = new Object(){ + public String toString() { + return magic[1]; + } + }; + // it has a synthetic variable val$magic + System.out.println(e.toString()); + + class Local { + void foo() {System.out.println(magic.length);} + } + Local x = new Local(); + x.foo(); + } +} +/*viz_options {"showAllFields":true}*/ \ No newline at end of file diff --git a/v3/java-example-code/ToString.java b/v3/java-example-code/ToString.java new file mode 100644 index 000000000..c97a096fb --- /dev/null +++ b/v3/java-example-code/ToString.java @@ -0,0 +1,13 @@ +public class ToString { + int x; + + public String toString() { + return "Instance with x = " + x; + } + + public static void main(String[] args) { + ToString ts = new ToString(); + ts.x = 5; + System.out.println(ts); + } +} \ No newline at end of file diff --git a/v3/java-example-code/TwoClasses.java b/v3/java-example-code/TwoClasses.java new file mode 100644 index 000000000..542166c5c --- /dev/null +++ b/v3/java-example-code/TwoClasses.java @@ -0,0 +1,13 @@ +public class TwoClasses { + String message = "Can you put two classes in one file?"; + void proclaim() { + System.out.println(message); + } + public static void main(String[] args) { + new TwoClasses().proclaim(); + new AnotherClass().proclaim(); + } +} +class AnotherClass extends TwoClasses{ + {message = "Yup";} // instance initializer +} diff --git a/v3/java-example-code/Variables.java b/v3/java-example-code/Variables.java new file mode 100644 index 000000000..6d95fb638 --- /dev/null +++ b/v3/java-example-code/Variables.java @@ -0,0 +1,15 @@ +public class Variables { + public static void main(String[] args) { + String me = "me"; + String you = "you"; + String tmp = me; + me = you; + you = tmp; + + int x = 5; + int y = 10; + int t = x; + x = y; + y = t; + } +} \ No newline at end of file diff --git a/v3/java.html b/v3/java.html new file mode 100644 index 000000000..d16c1c70f --- /dev/null +++ b/v3/java.html @@ -0,0 +1,409 @@ + + + + + + + Java Tutor - Visualize Java code execution to learn Java online + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + +
+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+Java Tutor - Visualize Java code execution to learn Java online + +

+(also visualize +Python, +Java, +JavaScript, +TypeScript, +Ruby, +C, +and C++ +code) +

+ +
+ + + +
+ +
+ + +
+ +
Write Java code here: + + + +
+ + + +
+
+
+ +

+ +

+ + +
+[coming soon!] Java options: pass in command-line arguments and feed user input to stdin +
+ + + + + +

Create test cases

+ +
+ +

Java Examples

+ +

+Basic: +Variables | +ControlFlow | +Sqrt | +ExecLimit | +Strings +

+ +

+Methods: +PassByValue | +Recursion | +StackOverflow +

+ +

+OOP: +Rolex | +Person | +Complex | +Casting +

+ +

+Data structures: +LinkedList | +StackQueue | +Postfix | +SymbolTable +

+ +

+Java features: +ToString | +Reflect | +Exception | +ExceptionFlow | +TwoClasses +

+ +

+Misc: +Forest | +Knapsack | +StaticInitializer | +Synthetic +

+ +

(All Java examples created by David Pritchard)

+ +
+ + +
+
+ + + + +
+ + + diff --git a/v3/javascript.html b/v3/javascript.html new file mode 100644 index 000000000..028951ada --- /dev/null +++ b/v3/javascript.html @@ -0,0 +1,356 @@ + + + + + + + JavaScript Tutor - Visualize JavaScript code execution to learn + JavaScript online + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + +
+ +
+ +
+ + + +
+ +
+ +
+ +
+ +
+JavaScript Tutor - Visualize JavaScript code execution to learn JavaScript online + +

+(also visualize +Python, +Java, +JavaScript, +TypeScript, +Ruby, +C, +and C++ +code) +

+ +
+ + + +
+ +
+ + +
+ +
Write JavaScript code here: + + + +
+ + + +
+
+
+ +

+ +

+ + +
+[coming soon!] Java options: pass in command-line arguments and feed user input to stdin +
+ + + + + +

Create test cases

+ +
+ +

JavaScript Examples

+ +

+ factorial | + data types | + exception | + closure | + shadowing | + constructor | + inheritance +

+ +
+ + +
+
+ + + + +
+ + + diff --git a/v3/js-example-code/caught-exception.js b/v3/js-example-code/caught-exception.js new file mode 100644 index 000000000..8675219ed --- /dev/null +++ b/v3/js-example-code/caught-exception.js @@ -0,0 +1,11 @@ +try { + var x = 5; + throw new Error("oh crapo"); +} +catch (e) { + console.log('hello'); + console.log('caught'); +} +finally { + console.log('done'); +} diff --git a/v3/js-example-code/closure1.js b/v3/js-example-code/closure1.js new file mode 100644 index 000000000..2606e1859 --- /dev/null +++ b/v3/js-example-code/closure1.js @@ -0,0 +1,12 @@ +var globalZ = 10; + +function foo(y) { + function bar(x) { + globalZ += 100; + return x + y + globalZ; + } + return bar; +} + +var b = foo(1); +b(2); diff --git a/v3/js-example-code/constructor.js b/v3/js-example-code/constructor.js new file mode 100644 index 000000000..404aa617d --- /dev/null +++ b/v3/js-example-code/constructor.js @@ -0,0 +1,11 @@ +function Vector(x, y) { + this.x = x; + this.y = y; +} + +Vector.prototype.plus = function(other) { + return new Vector(this.x + other.x, this.y + other.y); +}; + +var v1 = new Vector(1, 2); +var v2 = Vector(20, 30); // whoops, forgot 'new' diff --git a/v3/js-example-code/data-types.js b/v3/js-example-code/data-types.js new file mode 100644 index 000000000..b31728f03 --- /dev/null +++ b/v3/js-example-code/data-types.js @@ -0,0 +1,22 @@ +var intNum = 42; +var floatNum = 3.14159; +var nanNum = NaN; +var infNum = Infinity; +var ninfNum = -Infinity; + +var str = "hello world"; + +var boolTrue = true; +var boolFalse = false; + +var nullVal = null; +var undefVal = undefined; + +var lst = ['a', 'b', 3, 4, 5, 'f']; + +var obj = {name: 'John', age: 35, hasChildren: true}; + +var i = 5; +var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}]; + +obj.name = 'Jane'; diff --git a/v3/js-example-code/fact.js b/v3/js-example-code/fact.js new file mode 100644 index 000000000..1c156a0d1 --- /dev/null +++ b/v3/js-example-code/fact.js @@ -0,0 +1,11 @@ +function fact(n) { + if (n == 0) { + return 1; + } + else { + return n * fact(n-1); + } +} + +fact(3); +fact(3); diff --git a/v3/js-example-code/inheritance.js b/v3/js-example-code/inheritance.js new file mode 100644 index 000000000..67b12f2a5 --- /dev/null +++ b/v3/js-example-code/inheritance.js @@ -0,0 +1,26 @@ +// Adapted from Effective JavaScript +function Actor(x, y) { + this.x = x; + this.y = y; +} + +Actor.prototype.moveTo = function(x, y) { + this.x = x; + this.y = y; +} + +function SpaceShip(x, y) { + Actor.call(this, x, y); + this.points = 0; +} + +SpaceShip.prototype = Object.create(Actor.prototype); // inherit! +SpaceShip.prototype.type = "spaceship"; +SpaceShip.prototype.scorePoint = function() { + this.points++; +} + +var s = new SpaceShip(10, 20); +s.moveTo(30, 40); +s.scorePoint(); +s.scorePoint(); diff --git a/v3/js-example-code/var-shadowing2.js b/v3/js-example-code/var-shadowing2.js new file mode 100644 index 000000000..0b4853d51 --- /dev/null +++ b/v3/js-example-code/var-shadowing2.js @@ -0,0 +1,13 @@ +var x = 10; // global +function foo() { + var x = 10; + function bar() { + var y = x; + x *= 2; + console.log(x, y); + } + return bar; +} +var b = foo(); +// x inside of bar should be the x in foo, *not* the global x +b(); diff --git a/v3/js/ace/README.txt b/v3/js/ace/README.txt new file mode 100644 index 000000000..60b8df533 --- /dev/null +++ b/v3/js/ace/README.txt @@ -0,0 +1,4 @@ +This version of Ace was checked out from: +https://github.com/ajaxorg/ace-builds/ + +on 2014-07-04 diff --git a/v3/js/ace/src-min-noconflict/ace.js b/v3/js/ace/src-min-noconflict/ace.js new file mode 100644 index 000000000..97b91b011 --- /dev/null +++ b/v3/js/ace/src-min-noconflict/ace.js @@ -0,0 +1,11 @@ +(function(){function s(r){var i=function(e,t){return n("",e,t)},s=e;r&&(e[r]||(e[r]={}),s=e[r]);if(!s.define||!s.define.packaged)t.original=s.define,s.define=t,s.define.packaged=!0;if(!s.require||!s.require.packaged)n.original=s.require,s.require=i,s.require.packaged=!0}var ACE_NAMESPACE = "ace",e=function(){return this}();if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules||(t.modules={},t.payloads={}),t.payloads[e]=r,t.modules[e]=null},n=function(e,t,r){if(Object.prototype.toString.call(t)==="[object Array]"){var s=[];for(var o=0,u=t.length;o1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;et.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product==="Gecko",t.isOldGecko=t.isGecko&&parseInt((i.match(/rv\:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isTouchPad=i.indexOf("TouchPad")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0}),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t,n){var o=s(t);if(!i.isMac&&u){if(u[91]||u[92])o|=8;if(u.altGr){if((3&o)==3)return;u.altGr=0}if(n===18||n===17){var f=t.location||t.keyLocation;if(n===17&&f===1)a=t.timeStamp;else if(n===18&&o===3&&f===2){var l=-a;a=t.timeStamp,l+=a,l<3&&(u.altGr=!0)}}}if(n in r.MODIFIER_KEYS){switch(r.MODIFIER_KEYS[n]){case"Alt":o=2;break;case"Shift":o=4;break;case"Ctrl":o=1;break;default:o=8}n=-1}o&8&&(n===91||n===93)&&(n=-1);if(!o&&n===13)if(t.location||t.keyLocation===3){e(t,o,-n);if(t.defaultPrevented)return}if(i.isChromeOS&&o&8){e(t,o,n);if(t.defaultPrevented)return;o&=-9}return!!o||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,o,n):!1}var r=e("./keys"),i=e("./useragent");t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};t.addListener(e,"mousedown",function(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}),i.isOldIE&&t.addListener(e,"dblclick",function(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)})};var s=!i.isMac||!i.isOpera||"KeyboardEvent"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[s(e)]};var u=null,a=0;t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var s=null;r(e,"keydown",function(e){s=e.keyCode}),r(e,"keypress",function(e){return o(n,e,s)})}else{var a=null;r(e,"keydown",function(e){u[e.keyCode]=!0;var t=o(n,e,e.keyCode);return a=e.defaultPrevented,t}),r(e,"keypress",function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),r(e,"keyup",function(e){u[e.keyCode]=null}),u||(u=Object.create(null),r(window,"focus",function(e){u=Object.create(null)}))}};if(window.postMessage&&!i.isOldIE){var f=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+f;t.addListener(n,"message",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())}),n.postMessage(r,"*")}}t.nextFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame,t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define("ace/lib/lang",["require","exports","module"],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=f(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>o||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row)},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(u.prototype),t.DefaultHandlers=u}),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],function(e,t,n){"use strict";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e("./lib/oop"),i=e("./lib/dom");(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(s.prototype),t.Tooltip=s}),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],function(e,t,n){"use strict";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
"),i.setHtml(f),i.show(),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=n.$cells[t.session.documentToScreenRow(r,0)].element,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),v=setInterval(C,20),y=0,i.addListener(document,"mousemove",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,y=0,E=null,S=null,i.removeListener(document,"mousemove",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e=="text/plain"||e=="Text"})}function _(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],r=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return r&&t.indexOf(i)>=0?o="copy":n.indexOf(i)>=0?o="move":t.indexOf(i)>=0&&(o="copy"),o}var t=e.editor,n=r.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var f=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n._top=n.offsetTop),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData("Text",t.session.getTextRange()),w=!0,this.setState("drag")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n=="move"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return h||(k(),y++),A!==null&&(A=null),p=e.clientX,d=e.clientY,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!h)return;var n=e.dataTransfer;if(w)switch(b){case"move":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0)}else{var r=n.getData("Text");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,"dragstart",this.onDragStart.bind(e)),i.addListener(c,"dragend",this.onDragEnd.bind(e)),i.addListener(c,"dragenter",this.onDragEnter.bind(e)),i.addListener(c,"dragover",this.onDragOver.bind(e)),i.addListener(c,"dragleave",this.onDragLeave.bind(e)),i.addListener(c,"drop",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor.container;e.draggable=!0,this.editor.renderer.$cursorLayer.setBlinking(!1),this.editor.setStyle("ace_dragging"),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state=="dragReady"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state==="dragWait"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;"unselectable"in o&&(o.unselectable="on");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement("script");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState=="loaded"||i.readyState=="complete")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(i=n[n.length-2]);var o=a[t+"Path"];return o==null?o=a.basePath:r=="/"&&(t=r=""),o&&o.slice(-1)!="/"&&(o+="/"),o+t+r+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit("load.module",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a)},t.init=f;var c={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this["$"+e]===t)return;var n=this.$options[e];if(!n)return typeof console!="undefined"&&console.warn&&console.warn('misspelled option "'+e+'"'),undefined;if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this["$"+e]=t),n&&n.set&&n.set.call(this,t)},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this["$"+e]:(typeof console!="undefined"&&console.warn&&console.warn('misspelled option "'+e+'"'),undefined)}},h={};t.defineOptions=function(e,t,n){return e.$options||(h[t]=e.$options={}),Object.keys(n).forEach(function(t){var r=n[t];typeof r=="string"&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,"initialValue"in r&&(e["$"+r.name]=r.initialValue)}),i.implement(e,c),this},t.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var n=e.$options[t];"value"in n&&e.setOption(t,n.value)})},t.setDefaultValue=function(e,n,r){var i=h[e]||(h[e]={});i[n]&&(i.forwardTo?t.setDefaultValue(i.forwardTo,n,r):i[n].value=r)},t.setDefaultValues=function(e,n){Object.keys(n).forEach(function(r){t.setDefaultValue(e,r,n[r])})}}),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop_handler").DragdropHandler,f=e("../config"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){!e.isFocused()&&e.textInput&&e.textInput.onContextMenu(t),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,"click",this.onMouseEvent.bind(this,"click")),r.addListener(u,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener(u,[400,300,250],this,"onMouseEvent"),e.renderer.scrollBarV&&(r.addMultiMouseDownListener(e.renderer.scrollBarV.inner,[400,300,250],this,"onMouseEvent"),r.addMultiMouseDownListener(e.renderer.scrollBarH.inner,[400,300,250],this,"onMouseEvent"),i.isIE&&(r.addListener(e.renderer.scrollBarV.element,"mousedown",n),r.addListener(e.renderer.scrollBarH.element,"mousemove",n))),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel"));var f=e.renderer.$gutter;r.addListener(f,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(f,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(f,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(f,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),r.addListener(u,"mousedown",n),r.addListener(f,"mousedown",function(t){return e.focus(),r.preventDefault(t)}),e.on("mousemove",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle("default"):s.setCursorStyle("")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(!e)return;if(i.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new u(e,s.editor),s.$mouseMoved=!0},a=function(e){clearInterval(l),f(),s[s.state+"End"]&&s[s.state+"End"](e),s.state="",n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent("mouseup",e)},f=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type=="dblclick")return setTimeout(function(){a(e)});s.$onCaptureMouseMove=o,s.releaseMouse=r.capture(this.editor.container,o,a);var l=setInterval(f,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!="contextmenu")return;this.editor.off("nativecontextmenu",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(l.prototype),f.defineOptions(l.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),ace.define("ace/mouse/fold_handler",["require","exports","module"],function(e,t,n){"use strict";function r(e){e.on("click",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on("gutterclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){"use strict";var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e=="function"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command=="null"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){var t=this.$callKeyboardHandlers(-1,e);t||this.$editor.commands.exec("insertstring",this.$editor,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column==0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(" ").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);e!==0&&t===0&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&r.row++,this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e.call(null,this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e.isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define("ace/tokenizer",["require","exports","module"],function(e,t,n){"use strict";var r=1e3,i=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;a1?f.onMatch=this.$applyToken:f.onMatch=f.token);c>1&&(/\\\d/.test(f.regex)?l=f.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!="string"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push("$")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp("("+r.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){r=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n=="string")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;il){var m=e.substring(l,v-d.length);c.type==h?c.value+=m:(c.type&&f.push(c),c={type:h,value:m})}for(var g=0;gr){while(l1&&n[0]!==i&&n.unshift(i),{tokens:f,state:n.length?n:i}}}).call(i.prototype),t.Tokenizer=i}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n}}).call(r.prototype),t.TokenIterator=r}),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],function(e,t,n){"use strict";var r=e("../tokenizer").Tokenizer,i=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour").Behaviour,o=e("../unicode"),u=e("../lib/lang"),a=e("../token_iterator").TokenIterator,f=e("../range").Range,l=function(){this.HighlightRules=i,this.$behaviour=new s};(function(){this.tokenRe=new RegExp("^["+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,a=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp("^(\\s*)(?:"+u.escapeRegExp(c)+")"),d=new RegExp("(?:"+u.escapeRegExp(h)+")\\s*$"),v=function(e,t){if(g(e,t))return;if(!s||/\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:a},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\S/);n!==-1?(ne.length&&(E=e.length)}),a==Infinity&&(a=E,s=!1,o=!1),l&&a%f!=0&&(a=Math.floor(a/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new a(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,l=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new f(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new a(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new f(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);l.start.row==c&&(l.start.column+=h),l.end.row==c&&(l.end.column+=h),t.selection.fromOrientedRange(l)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(var t=0;tthis.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column,s=n.start,o=n.end;if(t.action==="insertText")if(s.row===r&&s.column<=i){if(s.column!==i||!this.$insertRight)s.row===o.row?i+=o.column-s.column:(i-=s.column,r+=o.row-s.row)}else s.row!==o.row&&s.row=i?i=s.column:i=Math.max(0,i-(o.column-s.column)):s.row!==o.row&&s.row=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length===0?this.$lines=[""]:Array.isArray(e)?this._insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.getLine(e.start.row).substring(e.start.column,e.end.column);var t=this.getLines(e.start.row,e.end.row);t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;return e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):e.row<0&&(e.row=0),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this._insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){return e>=this.getLength()?this.insert({row:e,column:0},"\n"+t.join("\n")):this._insertLines(Math.max(e,0),t)},this._insertLines=function(e,t){if(t.length==0)return{row:e,column:0};while(t.length>61440){var n=this._insertLines(e,t.slice(0,61440));t=t.slice(61440),e=n.row}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._signal("change",{data:o}),i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._signal("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._signal("change",{data:i}),r},this.remove=function(e){e instanceof s||(e=s.fromPoints(e.start,e.end)),e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this._removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._signal("change",{data:a}),r.start},this.removeLines=function(e,t){return e<0||t>=this.getLength()?this.remove(new s(e,0,t+1,0)):this._removeLines(e,t)},this._removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._signal("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._signal("change",{data:o})},this.replace=function(e,t){e instanceof s||(e=s.fromPoints(e.start,e.end));if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this._removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this._insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i20){n.running=setTimeout(n.$worker,20),n.currentLine=t;return}}n.currentLine=t,s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.range,n=t.start.row,r=t.end.row-n;if(r===0)this.lines[n]=null;else if(e.action=="removeText"||e.action=="removeLines")this.lines.splice(n,r+1,null),this.states.splice(n,r+1,null);else{var i=Array(r+1);i.unshift(n,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(n,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=r.state+""?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.call(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowi)break;c.start.row==i&&c.start.column>=n.column&&(c.start.column!=n.column||!this.$insertRight)&&(c.start.column+=u,c.start.row+=o);if(c.end.row==i&&c.end.column>=n.column){if(c.end.column==n.column&&this.$insertRight)continue;c.end.column==n.column&&u>0&&fc.start.column&&c.end.column==a[f+1].start.column&&(c.end.column-=u),c.end.column+=u,c.end.row+=o}}if(o!=0&&f=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i=t){u=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(t=e){i=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.removeListener("change",this.$updateFoldWidgets),this._emit("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s=="start"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n==="end"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s){t.children||t.all?this.removeFold(s):this.expandFold(s);return}var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range)){this.removeFold(s);return}}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,o.end.row,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",n)}},this.updateFoldWidgets=function(e){var t=e.data,n=t.range,r=n.start.row,i=n.end.row-r;if(i===0)this.foldWidgets[r]=null;else if(t.action=="removeText"||t.action=="removeLines")this.foldWidgets.splice(r,i+1,null);else{var s=Array(i+1);s.unshift(r,1),this.foldWidgets.splice.apply(this.foldWidgets,s)}}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){"use strict";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,o),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(oe&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;ao){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group=="doc"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;re.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,l=s.start,o=l.row-a.row,u=l.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.insert({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new f(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new f(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeLines(e,t);return this.doc.insertLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this._signal("changeWrapMode")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n,r=e.data.action,i=e.data.range.start.row,s=e.data.range.end.row,o=e.data.range.start,u=e.data.range.end,a=null;r.indexOf("Lines")!=-1?(r=="insertLines"?s=i+e.data.lines.length:s=i,n=e.data.lines?e.data.lines.length:s-i):n=s-i,this.$updating=!0;if(n!=0)if(r.indexOf("remove")!=-1){this[t?"$wrapData":"$rowLengthCache"].splice(i,n);var f=this.$foldData;a=this.getFoldsInRange(e.data.range),this.removeFolds(a);var l=this.getFoldLine(u.row),c=0;if(l){l.addRemoveChars(u.row,u.column,o.column-u.column),l.shiftRow(-n);var h=this.getFoldLine(i);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c=u.row&&l.shiftRow(-n)}s=i}else{var p=Array(n);p.unshift(i,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(i),c=0;if(l){var v=l.range.compareInside(o.row,o.column);v==0?(l=l.split(o.row,o.column),l.shiftRow(n),l.addRemoveChars(s,0,u.column-o.column)):v==-1&&(l.addRemoveChars(i,0,u.column-o.column),l.shiftRow(n)),c=f.indexOf(l)+1}for(c;c=i&&l.shiftRow(n)}}else{n=Math.abs(e.data.range.start.column-e.data.range.end.column),r.indexOf("remove")!=-1&&(a=this.getFoldsInRange(e.data.range),this.removeFolds(a),n=-n);var l=this.getFoldLine(i);l&&l.addRemoveChars(i,o.column,n)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(i,s):this.$updateRowLengthCache(i,s),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var n=this.doc.getAllLines(),r=this.getTabSize(),i=this.$wrapData,s=this.$wrapLimit,o,a,f=e;t=Math.min(t,n.length-1);while(f<=t)a=this.getFoldLine(f,a),a?(o=[],a.walk(function(e,t,r,i){var s;if(e!=null){s=this.$getDisplayTokens(e,o.length),s[0]=u;for(var a=1;at){var f=i+t;if(e[f-1]>=d&&e[f]>=d){a(f);continue}if(e[f]==u||e[f]==l){for(f;f!=i-1;f--)if(e[f]==u)break;if(f>i){a(f);continue}f=i+t;for(f;f>2)),i-1);while(f>c&&e[f]c&&e[f]c&&e[f]==p)f--}else while(f>c&&e[f]c){a(++f);continue}f=i+t,a(f)}return n},this.$getDisplayTokens=function(e,r){var i=[],s;r=r||0;for(var o=0;o39&&u<48||u>57&&u<64?i.push(p):u>=4352&&g(u)?i.push(t,n):i.push(t)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i=4352&&g(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var n,r=0,i=0,s,o=0,u=0,a=this.$screenRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u>e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}if(this.$useWrapMode){var v=this.$wrapData[r];if(v){var m=Math.floor(e-o);s=v[m],m>0&&v.length&&(i=v[m-1]||v[v.length-1],n=n.substring(i))}}return i+=this.$getStringScreenWidth(n,t)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);if(this.$useWrapMode){var v=this.$wrapData[i];if(v){var m=0;while(d.length>=v[m])r++,m++;d=d.substring(v[m-1]||0,d.length)}}return{row:r,column:this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;ro&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){}}).call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),s.defineOptions(p.prototype,"session",{wrap:{set:function(e){!e||e=="off"?e=!1:e=="free"?e=!0:e=="printMargin"?e=-1:typeof e=="string"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;if(!e)this.setUseWrapMode(!1);else{var t=typeof e=="number"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}this.$wrap=e},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e=e=="auto"?this.$mode.type!="text":e!="text",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize")},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$matchIterator(e,this.$options);if(!t)return!1;var n=null;return t.forEach(function(e,t,r){if(!e.start){var i=e.offset+(r||0);n=new s(t,i,t,i+e.length)}else n=e;return!0}),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;hv)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;gE&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g=0;u--)if(o(s[u],t,i))return!0};else var f=function(e,t,i){var s=r.getMatchOffsets(e,n);for(var u=0;u=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function s(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={};if(this.__defineGetter__&&this.__defineSetter__&&typeof console!="undefined"&&console.error){var n=!1,r=function(){n||(n=!0,console.error("commmandKeyBinding has too many m's. use commandKeyBinding"))};this.__defineGetter__("commmandKeyBinding",function(){return r(),this.commandKeyBinding}),this.__defineSetter__("commmandKeyBinding",function(e){return r(),this.commandKeyBinding=e})}else this.commmandKeyBinding=this.commandKeyBinding;this.addCommands(e)}var r=e("../lib/keys"),i=e("../lib/useragent");(function(){this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e){var t=typeof e=="string"?e:e.name;e=this.commands[t],delete this.commands[t];var n=this.commandKeyBinding;for(var r in n)for(var i in n[r])n[r][i]==e&&delete n[r][i]},this.bindKey=function(e,t){if(!e)return;if(typeof t=="function"){this.addCommand({exec:t,bindKey:e,name:t.name||e});return}var n=this.commandKeyBinding;e.split("|").forEach(function(e){var r=this.parseKeys(e,t),i=r.hashId;(n[i]||(n[i]={}))[r.key]=t},this)},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n});if(typeof n!="object")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){var t=e.bindKey;if(!t)return;var n=typeof t=="string"?t:t[this.platform];this.bindKey(n,e)},this.parseKeys=function(e){e.indexOf(" ")!=-1&&(e=e.split(/\s+/).pop());var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!="undefined"&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=this.commandKeyBinding;return r[t]&&r[t][n]},this.handleKeyboard=function(e,t,n,r){return{command:this.findKeyCommand(t,n)}}}).call(s.prototype),t.HashHandler=s}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../keyboard/hash_handler").HashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var r={editor:t,command:e,args:n},i=this._emit("exec",r);return this._signal("afterExec",r),i===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,n){"use strict";function o(e,t){return{win:e,mac:t}}var r=e("../lib/lang"),i=e("../config"),s=e("../range").Range;t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","Ctrl-E"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Ctrl-Shift-E"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:o("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:o("Ctrl-Alt-0","Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:o("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:o("Shift-Up","Shift-Up"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",readOnly:!0},{name:"golineup",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selecttoend",bindKey:o("Ctrl-Shift-End","Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:o("Shift-Down","Shift-Down"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:o("Alt-Shift-Left","Command-Shift-Left"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:o("Shift-Left","Shift-Left"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:o("Alt-Shift-Right","Command-Shift-Right"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttomatching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",readOnly:!0},{name:"passKeysToBrowser",bindKey:o("null","null"),exec:function(){},passEvent:!0,readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"removeline",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},multiSelectAction:"forEach"},{name:"replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:o("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:o("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\n\s*/," ").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=" "+c),f+=c}i.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o=n.lastRow||t.end.row<=n.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}e.scrollIntoView=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name=="insertstring"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e){if(!e)this.keyBinding.setKeyboardHandler(null);else if(typeof e=="string"){this.$keybindingId=e;var t=this;g.loadModule(["keybinding",e],function(n){t.$keybindingId==e&&t.keyBinding.setKeyboardHandler(n&&n.handler)})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e)},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;var t=this.session;if(t){this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange),this.session.removeEventListener("changeScrollTop",this.$onScrollTopChange),this.session.removeEventListener("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.removeEventListener("changeCursor",this.$onCursorChange),n.removeEventListener("changeSelection",this.$onSelectionChange)}this.session=e,e&&(this.$onDocumentChange=this.onDocumentChange.bind(this),e.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()),this._signal("changeSession",{session:e,oldSession:t}),t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session.findMatchingBracket(e.getCursorPosition());if(t)var n=new p(t.row,t.column,t.row,t.column+1);else if(e.session.$mode.getMatching)var n=e.session.$mode.getMatching(e.session);n&&(e.session.$bracketHighlight=e.session.addMarker(n,"ace_bracket","text"))},50)},this.$highlightTags=function(){var e=this.session;if(this.$highlightTagPending)return;var t=this;this.$highlightTagPending=!0,setTimeout(function(){t.$highlightTagPending=!1;var n=t.getCursorPosition(),r=new y(t.session,n.row,n.column),i=r.getCurrentToken();if(!i||i.type.indexOf("tag-name")===-1){e.removeMarker(e.$tagHighlight),e.$tagHighlight=null;return}var s=i.value,o=0,u=r.stepBackward();if(u.value=="<"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,"ace_active-line","screenLine"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\w\d]/.test(o)||r<=s&&/[\w\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\w\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e){if(this.$readOnly)return;var t={text:e};this._signal("paste",t),this.insert(t.text,!0)},this.execCommand=function(e,t){this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),"insertion",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}e==" "&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e=="\n"||e=="\r\n"){var u=n.getLine(i.row);if(i.column>u.search(/\S|$/)){var a=u.substr(i.column).search(/\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]=="\n"){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;tt.toLowerCase()?1:0});var r=new p(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n=o)s[u].moveBy(i,0),u--}t.fromOrientedRange(t.ranges[0]),t.rangeList.attach(this.session)}},this.$getSelectedRows=function(){var e=this.getSelectionRange().collapseRows();return{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e){var t=this.getCursorPosition(),n=new y(this.session,t.row,t.column),r=n.getCurrentToken(),i=r;i||(i=n.stepForward());if(!i)return;var s,o=!1,u={},a=t.column-i.start,f,l={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(i.value.match(/[{}()\[\]]/g))for(;a=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this)},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var s=this.on("changeSelection",function(){r=!0}),o=this.renderer.on("beforeRender",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on("afterRender",function(){if(r&&t&&n.isFocused()){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.topwindow.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+"px",i.style.left=s.left+"px",i.style.height=o.lineHeight+"px",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.removeEventListener("changeSelection",s),this.renderer.removeEventListener("afterRender",u),this.renderer.removeEventListener("beforeRender",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!="wide",i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e))}}).call(b.prototype),g.defineOptions(b.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",foldStyle:"session",mode:"session"}),t.Editor=b}),ace.define("ace/undomanager",["require","exports","module"],function(e,t,n){"use strict";var r=function(){this.reset()};(function(){this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(t,e),this.$undoStack.push(t),this.dirtyCounter++),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return this.dirtyCounter===0}}).call(r.prototype),t.UndoManager=r}),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/lang"),o=e("../lib/event_emitter").EventEmitter,u=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;to&&(v=s.end.row+1,s=t.getNextFoldLine(v,s),o=s?s.start.row:Infinity);if(v>i){while(this.$cells.length>d+1)p=this.$cells.pop(),this.element.removeChild(p.element);break}p=this.$cells[++d],p||(p={element:null,textNode:null,foldWidget:null},p.element=r.createElement("div"),p.textNode=document.createTextNode(""),p.element.appendChild(p.textNode),this.element.appendChild(p.element),this.$cells[d]=p);var m="ace_gutter-cell ";a[v]&&(m+=a[v]),f[v]&&(m+=f[v]),this.$annotations[v]&&(m+=this.$annotations[v].className),p.element.className!=m&&(p.element.className=m);var g=t.getRowLength(v)*e.lineHeight+"px";g!=p.element.style.height&&(p.element.style.height=g);if(u){var y=u[v];y==null&&(y=u[v]=t.getFoldWidget(v))}if(y){p.foldWidget||(p.foldWidget=r.createElement("span"),p.element.appendChild(p.foldWidget));var m="ace_fold-widget ace_"+y;y=="start"&&v==o&&vn.right-t.right)return"foldWidgets"}}).call(u.prototype),t.Gutter=u}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var s=r.range.clipRows(e.firstRow,e.lastRow);if(s.isEmpty())continue;s=s.toScreenRange(this.session);if(r.renderer){var o=this.$getTop(s.start.row,e),u=this.$padding+s.start.column*e.characterWidth;r.renderer(t,s,u,o,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,s,r.clazz,e):r.type=="screenLine"?this.drawScreenLineMarker(t,s,r.clazz,e):s.isMultiLine()?r.type=="text"?this.drawTextMarker(t,s,r.clazz,e):this.drawMultiLineMarker(t,s,r.clazz,e):this.drawSingleLineMarker(t,s,r.clazz+" ace_start",e)}this.element=i.setInnerHtml(this.element,t.join(""))},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(e,t,n,i,s){var o=t.start.row,u=new r(o,t.start.column,o,this.session.getScreenLastRowColumn(o));this.drawSingleLineMarker(e,u,n+" ace_start",i,1,s),o=t.end.row,u=new r(o,0,o,t.end.column),this.drawSingleLineMarker(e,u,n,i,0,s);for(o=t.start.row+1;o
"),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push("
"),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<0)return;u=this.$getTop(t.start.row+1,r),e.push("
")},this.drawSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;e.push("
")},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),e.push("
")},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;e.push("
")}}).call(s.prototype),t.Marker=s}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,u),this.EOF_CHAR="\u00b6",this.EOL_CHAR_LF="\u00ac",this.EOL_CHAR_CRLF="\u00a4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2192",this.SPACE_CHAR="\u00b7",this.$padding=0,this.$updateEolChar=function(){var e=this.session.doc.getNewLineCharacter()=="\n"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n"+this.TAB_CHAR+s.stringRepeat("\u00a0",n-1)+""):t.push(s.stringRepeat("\u00a0",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var r="ace_indent-guide",i="",o="";if(this.showInvisibles){r+=" ace_invisible",i=" ace_invisible_space",o=" ace_invisible_tab";var u=s.stringRepeat(this.SPACE_CHAR,this.tabSize),a=this.TAB_CHAR+s.stringRepeat("\u00a0",this.tabSize-1)}else var u=s.stringRepeat("\u00a0",this.tabSize),a=u;this.$tabStrings[" "]=""+u+"",this.$tabStrings[" "]=""+a+""}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),s=Math.min(n,e.lastRow),o=this.element.childNodes,u=0;for(var a=e.firstRow;al&&(a=f.end.row+1,f=this.session.getNextFoldLine(a,f),l=f?f.start.row:Infinity);if(a>s)break;var c=o[u++];if(c){var h=[];this.$renderLine(h,a,!this.$useLineGroups(),a==l?f:!1),c.style.height=e.lineHeight*this.session.getRowLength(a)+"px",i.setInnerHtml(c,h.join(""))}a++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement("div"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join("");if(this.$useLineGroups())a.className="ace_line_group",r.appendChild(a),a.style.height=e.lineHeight*this.session.getRowLength(s)+"px";else while(a.firstChild)r.appendChild(a.firstChild);s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,s=n,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>r)break;this.$useLineGroups()&&t.push("
"),this.$renderLine(t,s,!1,s==u?o:!1),this.$useLineGroups()&&t.push("
"),s++}this.element=i.setInnerHtml(this.element,t.join(""))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/\t|&|<|( +)|([\x00-\x1f\x80-\xa0\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,u=function(e,n,r,o,u){if(n)return i.showInvisibles?""+s.stringRepeat(i.SPACE_CHAR,e.length)+"":s.stringRepeat("\u00a0",e.length);if(e=="&")return"&";if(e=="<")return"<";if(e==" "){var a=i.session.getScreenTabSize(t+o);return t+=a-1,i.$tabStrings[a]}if(e=="\u3000"){var f=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",l=i.showInvisibles?i.SPACE_CHAR:"";return t+=1,""+l+""}return r?""+i.SPACE_CHAR+"":(t+=1,""+e+"")},a=r.replace(o,u);if(!this.$textToken[n.type]){var f="ace_"+n.type.replace(/\./g," ace_"),l="";n.type=="fold"&&(l=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",a,"")}else e.push(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:t[0]==" "?(r-=r%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[" "],r/this.tabSize)),t.substr(r)):t[0]==" "?(e.push(s.stringRepeat(this.$tabStrings[" "],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,s=0,o=n[0],u=0;for(var a=0;a=o)u=this.$renderToken(e,u,f,l.substring(0,o-i)),l=l.substring(o-i),i=o,r||e.push("","
"),s++,u=0,o=n[s]||Number.MAX_VALUE;l.length!=0&&(i+=l.length,u=this.$renderToken(e,u,f,l))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.lengthn-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(sn?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i,s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),i===undefined&&(i="opacity"in this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateVisibility.bind(this)};(function(){this.$updateVisibility=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&!i&&(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=(e?this.$updateOpacity:this.$updateVisibility).bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,i=t.length;ne.height+e.offset||s.top<0)&&n>1)continue;var o=(this.cursors[r++]||this.addCursor()).style;o.left=s.left+"px",o.top=s.top+"px",o.width=e.characterWidth+"px",o.height=e.lineHeight+"px"}while(this.cursors.length>r)this.removeCursor();var u=this.session.getOverwrite();this.$setOverwrite(u),this.$pixelPos=s,this.restartTimer()},this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e}}).call(u.prototype);var a=function(e,t){u.call(this,e),this.scrollTop=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};r.inherits(a,u),function(){this.classSuffix="-v",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=function(e){this.inner.style.height=e+"px"},this.setScrollHeight=function(e){this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}.call(a.prototype);var f=function(e,t){u.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};r.inherits(f,u),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(f.prototype),t.ScrollBar=a,t.ScrollBarV=a,t.ScrollBarH=f,t.VScrollBar=a,t.HScrollBar=f}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){"use strict";var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=0,f=t.FontMetrics=function(e,t){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),a||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat("X",a),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,u),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;t>0&&t<1?a=1:a=100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="-100px",e.visibility="hidden",e.position="fixed",e.whiteSpace="pre",o.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&this.$pollSizeChangesTimer},this.$measureSizes=function(){if(a===1)var e=this.$measureNode.getBoundingClientRect(),t={height:e.height,width:e.width};else var t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/a};return t.width===0||t.height===0?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,a);var t=this.$main.getBoundingClientRect();return t.width/a},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(f.prototype)}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./config"),o=e("./lib/useragent"),u=e("./layer/gutter").Gutter,a=e("./layer/marker").Marker,f=e("./layer/text").Text,l=e("./layer/cursor").Cursor,c=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,p=e("./renderloop").RenderLoop,d=e("./layer/font_metrics").FontMetrics,v=e("./lib/event_emitter").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font-family: \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;font-size: 12px;line-height: normal;direction: ltr;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: text;min-width: 100%;}.ace_dragging, .ace_dragging * {cursor: move !important;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;}.ace_text-input.ace_composition {background: #f8f8f8;color: #111;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0px;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-moz-transition: opacity 0.18s;-webkit-transition: opacity 0.18s;-o-transition: opacity 0.18s;-ms-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;display: block;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-moz-transition: opacity 0.4s ease 0.05s;-webkit-transition: opacity 0.4s ease 0.05s;-o-transition: opacity 0.4s ease 0.05s;-ms-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-moz-transition: opacity 0.05s ease 0.05s;-webkit-transition: opacity 0.05s ease 0.05s;-o-transition: opacity 0.05s ease 0.05s;-ms-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}';i.importCssString(m,"ace_editor");var g=function(e,t){var n=this;this.container=e||i.createElement("div"),this.$keepTextAreaAtCursor=!o.isOldIE,i.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new u(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var r=this.$textLayer=new f(this.content);this.canvas=r.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new c(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new d(this.container,500),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new p(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e;if(!e)return;this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode)},this.updateLines=function(e,t){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$changedLines.lastRow2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0)},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var i=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};r&&(e||s.height!=r)&&(s.height=r,i|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",i|=this.CHANGE_SCROLL);if(n&&(e||s.width!=n)){i|=this.CHANGE_SIZE,s.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)i|=this.CHANGE_FULL}return s.$dirty=!n||!r,i&&this._signal("resize",o),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.lineHeight;if(t<0||t>e.height-r)return;var i=this.characterWidth;if(this.$composition){var s=this.textarea.value.replace(/^\x01+/,"");i*=this.session.$getStringScreenWidth(s)[0]+2,r+=2,t-=1}n-=this.scrollLeft,n>this.$size.scrollerWidth-i&&(n=this.$size.scrollerWidth-i),n-=this.scrollBar.width,this.textarea.style.height=r+"px",this.textarea.style.width=i+"px",this.textarea.style.right=Math.max(0,this.$size.scrollerWidth-n-i)+"px",this.textarea.style.bottom=Math.max(0,this.$size.height-t-r)+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL)e|=this.$computeLayerConfig(),n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px";e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this._signal("afterRender");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),this._signal("afterRender");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.max((this.$minLines||1)*this.lineHeight,Math.min(t,e))+this.scrollMargin.v+(this.$extraHeight||0),r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var i=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,i,n),this.desiredHeight=n}},this.$computeLayerConfig=function(){this.$maxLines&&this.lineHeight>1&&this.$autosize();var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.scrollTop%this.lineHeight,o=t.scrollerHeight+this.lineHeight,u=this.$getLongestLine(),a=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-u-2*this.$padding<0),f=this.$horizScroll!==a;f&&(this.$horizScroll=a,this.scrollBarH.setVisible(a)),!this.$maxLines&&this.$scrollPastEnd&&(i+=(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd);var l=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i<0),c=this.$vScroll!==l;c&&(this.$vScroll=l,this.scrollBarV.setVisible(l)),this.session.setScrollTop(Math.max(-this.scrollMargin.top,Math.min(this.scrollTop,i-t.scrollerHeight+this.scrollMargin.bottom))),this.session.setScrollLeft(Math.max(-this.scrollMargin.left,Math.min(this.scrollLeft,u+2*this.$padding-t.scrollerWidth+this.scrollMargin.right)));var h=Math.ceil(o/this.lineHeight)-1,p=Math.max(0,Math.round((this.scrollTop-s)/this.lineHeight)),d=p+h,v,m,g=this.lineHeight;p=e.screenToDocumentRow(p,0);var y=e.getFoldLine(p);y&&(p=y.start.row),v=e.documentToScreenRow(p,0),m=e.getRowLength(p)*g,d=Math.min(e.screenToDocumentRow(d,0),e.getLength()-1),o=t.scrollerHeight+e.getRowLength(d)*g+m,s=this.scrollTop-v*g;var b=0;this.layerConfig.width!=u&&(b=this.CHANGE_H_SCROLL);if(f||c)b=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),c&&(u=this.$getLongestLine());return this.layerConfig={width:u,padding:this.$padding,firstRow:p,firstRowScreen:v,lastRow:d,lineHeight:g,characterWidth:this.characterWidth,minHeight:o,maxHeight:i,offset:s,gutterOffset:Math.max(0,Math.ceil((s+t.height-t.scrollerHeight)/g)),height:this.$size.scrollerHeight},b},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(ts?(t&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-ui?(i=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r.cssClass)return;i.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s="padding"in r?r.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,"ace_dark",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent("themeChange",{theme:e});if(!e||typeof e=="string"){var r=e||this.$options.theme.initialValue;s.loadModule(["theme",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.content.style.cursor!=e&&(this.content.style.cursor=e)},this.setMouseCursor=function(e){this.content.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),s.defineOptions(g.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e=="number"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e=="number"&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=g}),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,o=e("../config"),u=function(t,n,r,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get("packaged")||!e.toUrl)i=i||o.moduleUrl(n,"worker");else{var s=this.$normalizePath;i=i||s(e.toUrl("ace/worker/worker.js",null,"_"));var u={};t.forEach(function(t){u[t]=s(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))})}try{this.$worker=new Worker(i)}catch(a){if(!(a instanceof window.DOMException))throw a;var f=this.$workerBlob(i),l=window.URL||window.webkitURL,c=l.createObjectURL(f);this.$worker=new Worker(c),l.revokeObjectURL(c)}this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"log":window.console&&console.log&&console.log.apply(console,t.data);break;case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id])}},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue?this.deltaQueue.push(e.data):(this.deltaQueue=[e.data],setTimeout(this.$sendDeltaQueue,0))},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>20&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e})},this.$workerBlob=function(e){var t="importScripts('"+i.qualifyURL(e)+"');";try{return new Blob([t],{type:"application/javascript"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob("application/javascript")}}}).call(u.prototype);var a=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};a.prototype=u.prototype,t.UIWorkerClient=a,t.WorkerClient=u}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session,i=this.$pos;this.pos=t.createAnchor(i.row,i.column),this.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.pos.on("change",function(t){n.removeMarker(e.markerId),e.markerId=n.addMarker(new r(t.value.row,t.value.column,t.value.row,t.value.column+e.length),e.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1),n.on("change",function(i){e.removeMarker(n.markerId),n.markerId=e.addMarker(new r(i.value.row,i.value.column,i.value.row,i.value.column+t.length),t.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e=this.pos.column&&n.start.column<=this.pos.column+this.length+1){var s=n.start.column-this.pos.column;this.length+=i;if(!this.session.$fromUndo){if(t.action==="insertText")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};u.row===n.start.row&&n.start.column=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var e=0;e1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal("removeRange",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction=="forEach"?r=n.forEachSelection(t,e.args):t.multiSelectAction=="forEachLine"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges();var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;rr.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,e);for(var i=r.length;i--;){var s=r[i];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[i])}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle;if(t.needle==undefined){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;this.$blockScrolling+=1;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),this.$blockScrolling-=1,i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}},this.selectMore=function(e,t){var n=this.session,r=n.multiSelect,i=r.toOrientedRange();i.isEmpty()&&(i=n.getWordRange(i.start.row,i.start.column),i.cursor=e==-1?i.start:i.end,this.multiSelect.addRange(i));var s=n.getTextRange(i),o=h(n,s,e);o&&(o.cursor=e==-1?o.start:o.end,this.$blockScrolling+=1,this.session.unfold(o),this.multiSelect.addRange(o),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(i.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter(function(e){if(e.cursor.row==r)return!0;r=e.cursor.row});if(!n.length||s.length==n.length-1){var o=this.selection.getRange(),u=o.start.row,f=o.end.row,l=u==f;if(l){var c=this.session.getLength(),h;do h=this.session.getLine(f);while(/[=:]/.test(h)&&++f0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.doc.removeLines(u,f);p=this.$reAlignText(p,l),this.session.doc.insert({row:u,column:0},p.join("\n")+"\n"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),io?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(" ",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),st[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t.multiSelect||(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange),this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++tf){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.detach=this.detach.bind(this),this.session.on("change",this.updateOnChange)}var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./range").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&(e+=t.rowCount)}),e},this.attach=function(e){e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,this.editor.on("changeSession",this.detach),e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)},this.detach=function(e){if(e&&e.session==this.session)return;var t=this.editor;if(!t)return;t.off("changeSession",this.detach),this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.data,r=n.range,i=r.start.row,s=r.end.row-i;if(s!==0)if(n.action=="removeText"||n.action=="removeLines"){var o=t.splice(i+1,s);o.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var u=new Array(s);u.unshift(i,0),t.splice.apply(t,u),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){e&&(t=!1,e.row=n)}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength())),this.session.lineWidgets[e.row]=e;var t=this.editor.renderer;return e.html&&!e.el&&(e.el=i.createElement("div"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,"ace_lineWidgetContainer"),e.el.style.position="absolute",e.el.style.zIndex=5,t.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight||(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/t.layerConfig.lineHeight),this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,t),e},this.removeLineWidget=function(e){e._inDocument=!1,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}this.session.lineWidgets&&(this.session.lineWidgets[e.row]=undefined),this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows()},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length-1?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("ace/line_widgets").LineWidgets,i=e("ace/lib/dom"),s=e("ace/range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.lineWidgets&&n.lineWidgets[o];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div")},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
"),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./editor").Editor,o=e("./edit_session").EditSession,u=e("./undomanager").UndoManager,a=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,t.edit=function(e){if(typeof e=="string"){var n=e;e=document.getElementById(n);if(!e)throw new Error("ace.edit can't find div #"+n)}if(e.env&&e.env.editor instanceof s)return e.env.editor;var o=t.createEditSession(r.getInnerText(e));e.innerHTML="";var u=new s(new a(e));u.setSession(o);var f={document:o,editor:u,onResize:u.resize.bind(u,null)};return i.addListener(window,"resize",f.onResize),u.on("destroy",function(){i.removeListener(window,"resize",f.onResize)}),e.env=u.env=f,u},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u}); + (function() { + ace.require(["ace/ace"], function(a) { + a && a.config.init(true); + if (!window.ace) + window.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + window.ace[key] = a[key]; + }); + })(); + \ No newline at end of file diff --git a/v3/js/ace/src-min-noconflict/mode-java.js b/v3/js/ace/src-min-noconflict/mode-java.js new file mode 100644 index 000000000..8bfb6de42 --- /dev/null +++ b/v3/js/ace/src-min-noconflict/mode-java.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/java_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(){var e="abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while",t="null|Infinity|NaN|undefined",n="AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object",r=this.createKeywordMapper({"variable.language":"this",keyword:e,"constant.language":t,"support.function":n},"identifier");this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}]},this.embedRules(i,"doc-",[i.getEndRule("start")])};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define("ace/mode/java",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/java_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("./java_highlight_rules").JavaHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id="ace/mode/java"}.call(o.prototype),t.Mode=o}) \ No newline at end of file diff --git a/v3/js/ace/src-min-noconflict/mode-javascript.js b/v3/js/ace/src-min-noconflict/mode-javascript.js new file mode 100644 index 000000000..4696564ed --- /dev/null +++ b/v3/js/ace/src-min-noconflict/mode-javascript.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",s="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[{token:"comment",regex:"\\/\\/",next:"line_comment"},i.getStartRule("doc-start"),{token:"comment",regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+r+")(\\.)(prototype)(\\.)("+r+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+r+")(\\.)("+r+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+r+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+r+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:r},{token:"keyword.operator",regex:/--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}) \ No newline at end of file diff --git a/v3/js/ace/src-min-noconflict/mode-python.js b/v3/js/ace/src-min-noconflict/mode-python.js new file mode 100644 index 000000000..f80eb0e8a --- /dev/null +++ b/v3/js/ace/src-min-noconflict/mode-python.js @@ -0,0 +1 @@ +ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield",t="True|False|None|NotImplemented|Ellipsis|__debug__",n="abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern",r=this.createKeywordMapper({"invalid.deprecated":"debugger","support.function":n,"constant.language":t,keyword:e},"identifier"),i="(?:r|u|ur|R|U|UR|Ur|uR)?",s="(?:(?:[1-9]\\d*)|(?:0))",o="(?:0[oO]?[0-7]+)",u="(?:0[xX][\\dA-Fa-f]+)",a="(?:0[bB][01]+)",f="(?:"+s+"|"+o+"|"+u+"|"+a+")",l="(?:[eE][+-]?\\d+)",c="(?:\\.\\d+)",h="(?:\\d+)",p="(?:(?:"+h+"?"+c+")|(?:"+h+"\\.))",d="(?:(?:"+p+"|"+h+")"+l+")",v="(?:"+d+"|"+p+")",m="\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:i+'"{3}',next:"qqstring3"},{token:"string",regex:i+'"(?=.)',next:"qqstring"},{token:"string",regex:i+"'{3}",next:"qstring3"},{token:"string",regex:i+"'(?=.)",next:"qstring"},{token:"constant.numeric",regex:"(?:"+v+"|\\d+)[jJ]\\b"},{token:"constant.numeric",regex:v},{token:"constant.numeric",regex:f+"[lL]\\b"},{token:"constant.numeric",regex:f+"\\b"},{token:r,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\[\\(\\{]"},{token:"paren.rparen",regex:"[\\]\\)\\}]"},{token:"text",regex:"\\s+"}],qqstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:'"{3}',next:"start"},{defaultToken:"string"}],qstring3:[{token:"constant.language.escape",regex:m},{token:"string",regex:"'{3}",next:"start"},{defaultToken:"string"}],qqstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:m},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"start"},{defaultToken:"string"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp("([\\[{])(?:\\s*)$|("+e+")(?:\\s*)(?:#.*)?$")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./python_highlight_rules").PythonHighlightRules,o=e("./folding/pythonic").FoldMode,u=e("../range").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o("\\:")};r.inherits(a,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"){var o=t.match(/^.*[\{\(\[\:]\s*$/);o&&(r+=n)}return r};var e={pass:1,"return":1,raise:1,"break":1,"continue":1};this.checkOutdent=function(t,n,r){if(r!=="\r\n"&&r!=="\r"&&r!=="\n")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type=="comment"||s.type=="text"&&s.value.match(/^\s+$/)));return s?s.type=="keyword"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id="ace/mode/python"}.call(a.prototype),t.Mode=a}) \ No newline at end of file diff --git a/v3/js/ace/src-min-noconflict/mode-ruby.js b/v3/js/ace/src-min-noconflict/mode-ruby.js new file mode 100644 index 000000000..b20cdc957 --- /dev/null +++ b/v3/js/ace/src-min-noconflict/mode-ruby.js @@ -0,0 +1 @@ +ace.define("ace/mode/ruby_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=t.constantOtherSymbol={token:"constant.other.symbol.ruby",regex:"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?"},o=t.qString={token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},u=t.qqString={token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},a=t.tString={token:"string",regex:"[`](?:(?:\\\\.)|(?:[^'\\\\]))*?[`]"},f=t.constantNumericHex={token:"constant.numeric",regex:"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\b"},l=t.constantNumericFloat={token:"constant.numeric",regex:"[+-]?\\d(?:\\d|_(?=\\d))*(?:(?:\\.\\d(?:\\d|_(?=\\d))*)?(?:[eE][+-]?\\d+)?)?\\b"},c=function(){var e="abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many",t="alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield",n="true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING",r="$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self",i=this.$keywords=this.createKeywordMapper({keyword:t,"constant.language":n,"variable.language":r,"support.function":e,"invalid.deprecated":"debugger"},"identifier");this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"comment",regex:"^=begin(?:$|\\s.*$)",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/]\\w*\\s*(?=[).,;]|$)"},[{regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren.lparen";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.start",regex:/"/,push:[{token:"constant.language.escape",regex:/\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/},{token:"paren.start",regex:/\#{/,push:"start"},{token:"string.end",regex:/"/,next:"pop"},{defaultToken:"string"}]},{token:"string.start",regex:/`/,push:[{token:"constant.language.escape",regex:/\\(?:[nsrtvfbae'"\\]|c.|C-.|M-.(?:\\C-.)?|[0-7]{3}|x[\da-fA-F]{2}|u[\da-fA-F]{4})/},{token:"paren.start",regex:/\#{/,push:"start"},{token:"string.end",regex:/`/,next:"pop"},{defaultToken:"string"}]},{token:"string.start",regex:/'/,push:[{token:"constant.language.escape",regex:/\\['\\]/},{token:"string.end",regex:/'/,next:"pop"},{defaultToken:"string"}]}],{token:"text",regex:"::"},{token:"variable.instance",regex:"@{1,2}[a-zA-Z_\\d]+"},{token:"support.class",regex:"[A-Z][a-zA-Z_\\d]+"},s,f,l,{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"punctuation.separator.key-value",regex:"=>"},{stateName:"heredoc",onMatch:function(e,t,n){var r=e[2]=="-"?"indentedHeredoc":"heredoc",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:"constant",value:i[1]},{type:"string",value:i[2]},{type:"support.class",value:i[3]},{type:"string",value:i[4]}]},regex:"(<<-?)(['\"`]?)([\\w]+)(['\"`]?)",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}],indentedHeredoc:[{token:"string",regex:"^ +"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||"start","support.class"):(this.next="","string")},regex:".*$",next:"start"}]}},{regex:"$",token:"empty",next:function(e,t){return t[0]==="heredoc"||t[0]==="indentedHeredoc"?t[0]:e}},{token:"string.character",regex:"\\B\\?."},{token:"keyword.operator",regex:"!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"^=end(?:$|\\s.*$)",next:"start"},{token:"comment",regex:".+"}]},this.normalizeRules()};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return h(a,l,"{","}");if(p.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var d=u.substring(s.column,s.column+1);if(d=="}"){var v=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var m="";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat("}",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d==="}"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:"\n"+b+"\n"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return h(s,o,"(",")");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return h(s,o,"[","]");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\s;,.})\]\\]/.test(p))return null;y=!0}return{text:y?s+s:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("./fold_mode").FoldMode,s=e("../../range").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!="#")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++nl){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\S/),a=s.search(/\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],start:[i.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment_regex_allowed"},{token:"comment",regex:"\\/\\/",next:"line_comment_regex_allowed"},{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:r},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],comment:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:"comment",regex:"$|^",next:"start"},{defaultToken:"comment",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:"comment",regex:"$|^",next:"no_regex"},{defaultToken:"comment",caseInsensitive:!0}],qqstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:s},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)return n.unshift("start",t),"paren";if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:s},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return{text:"{"+l+"}",selection:!1};if(h.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(h.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var p=u.substring(s.column,s.column+1);if(p=="}"){var d=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(d!==null&&h.isAutoInsertedClosing(s,u,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var v="";h.isMaybeInsertedClosing(s,u)&&(v=o.stringRepeat("}",f.maybeInsertedBrackets),h.clearMaybeInsertedClosing());var p=u.substring(s.column,s.column+1);if(p==="}"){var m=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!m)return null;var g=this.$getIndent(r.getLine(m.row))}else{if(!v){h.clearMaybeInsertedClosing();return}var g=this.$getIndent(u)}var y=g+r.getTabString();return{text:"\n"+y+"\n"+g+v,selection:[1,y.length,1,y.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"("+o+")",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return{text:"["+o+"]",selection:!1};if(h.isSaneInsertion(n,r))return h.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&h.isAutoInsertedClosing(u,a,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return{text:s+u+s,selection:!1};var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),h=f.substring(a.column,a.column+1),p=r.getTokenAt(a.row,a.column),d=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&p&&/escape/.test(p.type))return null;var v=p&&/string/.test(p.type),m=!d||/string/.test(d.type),g;if(h==s)g=v!==m;else{if(v&&!m)return null;if(v&&m)return null;var y=r.$mode.tokenRe;y.lastIndex=0;var b=y.test(l);y.lastIndex=0;var w=y.test(l);if(b||w)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;g=!0}return{text:g?s+s:"",selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};h.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(h,i),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/)#(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("jslint",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/typescript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/javascript_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=function(){var e=[{token:["keyword.operator.ts","text","variable.parameter.function.ts","text"],regex:"\\b(module)(\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*\\{)"},{token:["storage.type.variable.ts","text","keyword.other.ts","text"],regex:"(super)(\\s*\\()([a-zA-Z0-9,_?.$\\s]+\\s*)(\\))"},{token:["entity.name.function.ts","paren.lparen","paren.rparen"],regex:"([a-zA-Z_?.$][\\w?.$]*)(\\()(\\))"},{token:["variable.parameter.function.ts","text","variable.parameter.function.ts"],regex:"([a-zA-Z0-9_?.$][\\w?.$]*)(\\s*:\\s*)([a-zA-Z0-9_?.$][\\w?.$]*)"},{token:["keyword.operator.ts"],regex:"(?:\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\b)"},{token:["storage.type.variable.ts"],regex:"(?:\\b(this\\.|string\\b|bool\\b|number)\\b)"},{token:["keyword.operator.ts","storage.type.variable.ts","keyword.operator.ts","storage.type.variable.ts"],regex:"(class)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)(extends)(\\s+[a-zA-Z0-9_?.$][\\w?.$]*\\s+)?"},{token:"keyword",regex:"(?:super|export|class|extends|import)\\b"}],t=(new i).getRules();t.start=e.concat(t.start),this.$rules=t};r.inherits(s,i),t.TypeScriptHighlightRules=s}),ace.define("ace/mode/typescript",["require","exports","module","ace/lib/oop","ace/mode/javascript","ace/mode/typescript_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/mode/matching_brace_outdent"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./javascript").Mode,s=e("./typescript_highlight_rules").TypeScriptHighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,u=e("./folding/cstyle").FoldMode,a=e("./matching_brace_outdent").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id="ace/mode/typescript"}.call(f.prototype),t.Mode=f}) \ No newline at end of file diff --git a/v3/js/ace/src-min-noconflict/worker-javascript.js b/v3/js/ace/src-min-noconflict/worker-javascript.js new file mode 100644 index 000000000..325821a3f --- /dev/null +++ b/v3/js/ace/src-min-noconflict/worker-javascript.js @@ -0,0 +1 @@ +"no use strict";(function(e){if(typeof e.window!="undefined"&&e.document)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:"error",data:{message:e,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf("!")!==-1){var r=n.split("!");return e.normalizeModule(t,r[0])+"!"+e.normalizeModule(t,r[1])}if(n.charAt(0)=="."){var i=t.split("/").slice(0,-1).join("/");n=(i?i+"/":"")+n;while(n.indexOf(".")!==-1&&s!=n){var s=n;n=n.replace(/^\.\//,"").replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return n},e.require=function(t,n){n||(n=t,t=null);if(!n.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");n=e.normalizeModule(t,n);var r=e.require.modules[n];if(r)return r.initialized||(r.initialized=!0,r.exports=r.factory().exports),r.exports;var i=n.split("/");if(!e.require.tlns)return console.log("unable to load "+n);i[0]=e.require.tlns[i[0]]||i[0];var s=i.join("/")+".js";return e.require.id=n,importScripts(s),e.require(t,n)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!="string"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!="function"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=["require","exports","module"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case"require":return i;case"exports":return e.exports;case"module":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},e.initBaseUrls=function(t){require.tlns=t},e.initSender=function(){var n=e.require("ace/lib/event_emitter").EventEmitter,r=e.require("ace/lib/oop"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(i.prototype),new i};var t=e.main=null,n=e.sender=null;e.onmessage=function(r){var i=r.data;if(i.command){if(!t[i.command])throw new Error("Unknown command:"+i.command);t[i.command].apply(t,i.args)}else if(i.init){initBaseUrls(i.tlns),require("ace/lib/es5-shim"),n=e.sender=initSender();var s=require(i.module)[i.classname];t=e.main=new s(n)}else i.event&&n&&n._signal(i.event,i.data)}})(this),ace.define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.rowthis.row)return;if(n.start.row==this.row&&n.start.column>this.column)return;var r=this.row,i=this.column,s=n.start,o=n.end;if(t.action==="insertText")if(s.row===r&&s.column<=i){if(s.column!==i||!this.$insertRight)s.row===o.row?i+=o.column-s.column:(i-=s.column,r+=o.row-s.row)}else s.row!==o.row&&s.row=i?i=s.column:i=Math.max(0,i-(o.column-s.column)):s.row!==o.row&&s.row=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,o=e("./anchor").Anchor,u=function(e){this.$lines=[],e.length===0?this.$lines=[""]:Array.isArray(e)?this._insertLines(0,e):this.insert({row:0,column:0},e)};(function(){r.implement(this,i),this.setValue=function(e){var t=this.getLength();this.remove(new s(0,0,t,this.getLine(t-1).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new o(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){if(e.start.row==e.end.row)return this.getLine(e.start.row).substring(e.start.column,e.end.column);var t=this.getLines(e.start.row,e.end.row);t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;return e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column)),t.join(this.getNewLineCharacter())},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):e.row<0&&(e.row=0),e},this.insert=function(e,t){if(!t||t.length===0)return e;e=this.$clipPosition(e),this.getLength()<=1&&this.$detectNewLine(t);var n=this.$split(t),r=n.splice(0,1)[0],i=n.length==0?null:n.splice(n.length-1,1)[0];return e=this.insertInLine(e,r),i!==null&&(e=this.insertNewLine(e),e=this._insertLines(e.row,n),e=this.insertInLine(e,i||"")),e},this.insertLines=function(e,t){return e>=this.getLength()?this.insert({row:e,column:0},"\n"+t.join("\n")):this._insertLines(Math.max(e,0),t)},this._insertLines=function(e,t){if(t.length==0)return{row:e,column:0};while(t.length>61440){var n=this._insertLines(e,t.slice(0,61440));t=t.slice(61440),e=n.row}var r=[e,0];r.push.apply(r,t),this.$lines.splice.apply(this.$lines,r);var i=new s(e,0,e+t.length,0),o={action:"insertLines",range:i,lines:t};return this._signal("change",{data:o}),i.end},this.insertNewLine=function(e){e=this.$clipPosition(e);var t=this.$lines[e.row]||"";this.$lines[e.row]=t.substring(0,e.column),this.$lines.splice(e.row+1,0,t.substring(e.column,t.length));var n={row:e.row+1,column:0},r={action:"insertText",range:s.fromPoints(e,n),text:this.getNewLineCharacter()};return this._signal("change",{data:r}),n},this.insertInLine=function(e,t){if(t.length==0)return e;var n=this.$lines[e.row]||"";this.$lines[e.row]=n.substring(0,e.column)+t+n.substring(e.column);var r={row:e.row,column:e.column+t.length},i={action:"insertText",range:s.fromPoints(e,r),text:t};return this._signal("change",{data:i}),r},this.remove=function(e){e instanceof s||(e=s.fromPoints(e.start,e.end)),e.start=this.$clipPosition(e.start),e.end=this.$clipPosition(e.end);if(e.isEmpty())return e.start;var t=e.start.row,n=e.end.row;if(e.isMultiLine()){var r=e.start.column==0?t:t+1,i=n-1;e.end.column>0&&this.removeInLine(n,0,e.end.column),i>=r&&this._removeLines(r,i),r!=t&&(this.removeInLine(t,e.start.column,this.getLine(t).length),this.removeNewLine(e.start.row))}else this.removeInLine(t,e.start.column,e.end.column);return e.start},this.removeInLine=function(e,t,n){if(t==n)return;var r=new s(e,t,e,n),i=this.getLine(e),o=i.substring(t,n),u=i.substring(0,t)+i.substring(n,i.length);this.$lines.splice(e,1,u);var a={action:"removeText",range:r,text:o};return this._signal("change",{data:a}),r.start},this.removeLines=function(e,t){return e<0||t>=this.getLength()?this.remove(new s(e,0,t+1,0)):this._removeLines(e,t)},this._removeLines=function(e,t){var n=new s(e,0,t+1,0),r=this.$lines.splice(e,t-e+1),i={action:"removeLines",range:n,nl:this.getNewLineCharacter(),lines:r};return this._signal("change",{data:i}),r},this.removeNewLine=function(e){var t=this.getLine(e),n=this.getLine(e+1),r=new s(e,t.length,e+1,0),i=t+n;this.$lines.splice(e,2,i);var o={action:"removeText",range:r,text:this.getNewLineCharacter()};this._signal("change",{data:o})},this.replace=function(e,t){e instanceof s||(e=s.fromPoints(e.start,e.end));if(t.length==0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);if(t)var n=this.insert(e.start,t);else n=e.start;return n},this.applyDeltas=function(e){for(var t=0;t=0;t--){var n=e[t],r=s.fromPoints(n.range.start,n.range.end);n.action=="insertLines"?this._removeLines(r.start.row,r.end.row-1):n.action=="insertText"?this.remove(r):n.action=="removeLines"?this._insertLines(r.start.row,n.lines):n.action=="removeText"&&this.insert(r.start,n.text)}},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n=65&&i<=90||i===95||i>=97&&i<=122;var s=[];for(var i=0;i<128;i++)s[i]=r[i]||i>=48&&i<=57;t.exports={asciiIdentifierStartTable:r,asciiIdentifierPartTable:s}},{}],2:[function(e,t,n){(function(){var e=this,r=e._,i={},s=Array.prototype,o=Object.prototype,u=Function.prototype,a=s.push,f=s.slice,l=s.concat,c=o.toString,h=o.hasOwnProperty,p=s.forEach,d=s.map,v=s.reduce,m=s.reduceRight,g=s.filter,y=s.every,b=s.some,w=s.indexOf,E=s.lastIndexOf,S=Array.isArray,x=Object.keys,T=u.bind,N=function(e){if(e instanceof N)return e;if(!(this instanceof N))return new N(e);this._wrapped=e};typeof n!="undefined"?(typeof t!="undefined"&&t.exports&&(n=t.exports=N),n._=N):e._=N,N.VERSION="1.6.0";var C=N.each=N.forEach=function(e,t,n){if(e==null)return e;if(p&&e.forEach===p)e.forEach(t,n);else if(e.length===+e.length){for(var r=0,s=e.length;r2;e==null&&(e=[]);if(v&&e.reduce===v)return r&&(t=N.bind(t,r)),i?e.reduce(t,n):e.reduce(t);C(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError(k);return n},N.reduceRight=N.foldr=function(e,t,n,r){var i=arguments.length>2;e==null&&(e=[]);if(m&&e.reduceRight===m)return r&&(t=N.bind(t,r)),i?e.reduceRight(t,n):e.reduceRight(t);var s=e.length;if(s!==+s){var o=N.keys(e);s=o.length}C(e,function(u,a,f){a=o?o[--s]:--s,i?n=t.call(r,n,e[a],a,f):(n=e[a],i=!0)});if(!i)throw new TypeError(k);return n},N.find=N.detect=function(e,t,n){var r;return L(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},N.filter=N.select=function(e,t,n){var r=[];return e==null?r:g&&e.filter===g?e.filter(t,n):(C(e,function(e,i,s){t.call(n,e,i,s)&&r.push(e)}),r)},N.reject=function(e,t,n){return N.filter(e,function(e,r,i){return!t.call(n,e,r,i)},n)},N.every=N.all=function(e,t,n){t||(t=N.identity);var r=!0;return e==null?r:y&&e.every===y?e.every(t,n):(C(e,function(e,s,o){if(!(r=r&&t.call(n,e,s,o)))return i}),!!r)};var L=N.some=N.any=function(e,t,n){t||(t=N.identity);var r=!1;return e==null?r:b&&e.some===b?e.some(t,n):(C(e,function(e,s,o){if(r||(r=t.call(n,e,s,o)))return i}),!!r)};N.contains=N.include=function(e,t){return e==null?!1:w&&e.indexOf===w?e.indexOf(t)!=-1:L(e,function(e){return e===t})},N.invoke=function(e,t){var n=f.call(arguments,2),r=N.isFunction(t);return N.map(e,function(e){return(r?t:e[t]).apply(e,n)})},N.pluck=function(e,t){return N.map(e,N.property(t))},N.where=function(e,t){return N.filter(e,N.matches(t))},N.findWhere=function(e,t){return N.find(e,N.matches(t))},N.max=function(e,t,n){if(!t&&N.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);var r=-Infinity,i=-Infinity;return C(e,function(e,s,o){var u=t?t.call(n,e,s,o):e;u>i&&(r=e,i=u)}),r},N.min=function(e,t,n){if(!t&&N.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);var r=Infinity,i=Infinity;return C(e,function(e,s,o){var u=t?t.call(n,e,s,o):e;ur||n===void 0)return 1;if(n>>1;n.call(r,e[u])=0;n--)t=[e[n].apply(this,t)];return t[0]}},N.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},N.keys=function(e){if(!N.isObject(e))return[];if(x)return x(e);var t=[];for(var n in e)N.has(e,n)&&t.push(n);return t},N.values=function(e){var t=N.keys(e),n=t.length,r=new Array(n);for(var i=0;i":">",'"':""","'":"'"}};P.unescape=N.invert(P.escape);var H={escape:new RegExp("["+N.keys(P.escape).join("")+"]","g"),unescape:new RegExp("("+N.keys(P.unescape).join("|")+")","g")};N.each(["escape","unescape"],function(e){N[e]=function(t){return t==null?"":(""+t).replace(H[e],function(t){return P[e][t]})}}),N.result=function(e,t){if(e==null)return void 0;var n=e[t];return N.isFunction(n)?n.call(e):n},N.mixin=function(e){C(N.functions(e),function(t){var n=N[t]=e[t];N.prototype[t]=function(){var e=[this._wrapped];return a.apply(e,arguments),q.call(this,n.apply(N,e))}})};var B=0;N.uniqueId=function(e){var t=++B+"";return e?e+t:t},N.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var j=/(.)^/,F={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},I=/\\|'|\r|\n|\t|\u2028|\u2029/g;N.template=function(e,t,n){var r;n=N.defaults({},n,N.templateSettings);var i=new RegExp([(n.escape||j).source,(n.interpolate||j).source,(n.evaluate||j).source].join("|")+"|$","g"),s=0,o="__p+='";e.replace(i,function(t,n,r,i,u){return o+=e.slice(s,u).replace(I,function(e){return"\\"+F[e]}),n&&(o+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),r&&(o+="'+\n((__t=("+r+"))==null?'':__t)+\n'"),i&&(o+="';\n"+i+"\n__p+='"),s=u+t.length,t}),o+="';\n",n.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{r=new Function(n.variable||"obj","_",o)}catch(u){throw u.source=o,u}if(t)return r(t,N);var a=function(e){return r.call(this,e,N)};return a.source="function("+(n.variable||"obj")+"){\n"+o+"}",a},N.chain=function(e){return N(e).chain()};var q=function(e){return this._chain?N(e).chain():e};N.mixin(N),C(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=s[e];N.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e=="shift"||e=="splice")&&n.length===0&&delete n[0],q.call(this,n)}}),C(["concat","join","slice"],function(e){var t=s[e];N.prototype[e]=function(){return q.call(this,t.apply(this._wrapped,arguments))}}),N.extend(N.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),typeof define=="function"&&define.amd&&ace.define("underscore",[],function(){return N})}).call(this)},{}],3:[function(e,t,n){var r=e("underscore"),i=e("events"),s=e("./vars.js"),o=e("./messages.js"),u=e("./lex.js").Lexer,a=e("./reg.js"),f=e("./state.js").state,l=e("./style.js"),c=function(){"use strict";function I(e,t){return e=e.trim(),/^[+-]W\d{3}$/g.test(e)?!0:p[e]===undefined&&h[e]===undefined&&t.type!=="jslint"&&!m[e]?(G("E001",t,e),!1):!0}function q(e){return Object.prototype.toString.call(e)==="[object String]"}function R(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function U(e){if(!e.reserved)return!1;var t=e.meta;if(t&&t.isFutureReservedWord&&f.option.inES5()){if(!t.es5)return!1;if(t.strictOnly&&!f.option.strict&&!f.directive["use strict"])return!1;if(e.isProperty)return!1}return!0}function z(e,t){return e.replace(/\{([^{}]*)\}/g,function(e,n){var r=t[n];return typeof r=="string"||typeof r=="number"?r:e})}function W(e,t){Object.keys(t).forEach(function(n){if(r.has(c.blacklist,n))return;e[n]=t[n]})}function X(){f.option.esnext&&W(M,s.newEcmaIdentifiers),f.option.couch&&W(M,s.couch),f.option.qunit&&W(M,s.qunit),f.option.rhino&&W(M,s.rhino),f.option.shelljs&&(W(M,s.shelljs),W(M,s.node)),f.option.typed&&W(M,s.typed),f.option.phantom&&W(M,s.phantom),f.option.prototypejs&&W(M,s.prototypejs),f.option.node&&(W(M,s.node),W(M,s.typed)),f.option.devel&&W(M,s.devel),f.option.dojo&&W(M,s.dojo),f.option.browser&&(W(M,s.browser),W(M,s.typed)),f.option.nonstandard&&W(M,s.nonstandard),f.option.jasmine&&W(M,s.jasmine),f.option.jquery&&W(M,s.jquery),f.option.mootools&&W(M,s.mootools),f.option.worker&&W(M,s.worker),f.option.wsh&&W(M,s.wsh),f.option.globalstrict&&f.option.strict!==!1&&(f.option.strict=!0),f.option.yui&&W(M,s.yui),f.option.mocha&&W(M,s.mocha),f.option.inMoz=function(e){return f.option.moz},f.option.inESNext=function(e){return f.option.moz||f.option.esnext},f.option.inES5=function(){return!f.option.es3},f.option.inES3=function(e){return e?!f.option.moz&&!f.option.esnext&&f.option.es3:f.option.es3}}function V(e,t,n){var r=Math.floor(t/f.lines.length*100),i=o.errors[e].desc;throw{name:"JSHintError",line:t,character:n,message:i+" ("+r+"% scanned).",raw:i,code:e}}function $(e,t,n,r){return c.undefs.push([e,t,n,r])}function J(){var e=f.ignoredLines;if(r.isEmpty(e))return;c.errors=r.reject(c.errors,function(t){return e[t.line]})}function K(e,t,n,r,i,s){var u,a,l,h;if(/^W\d{3}$/.test(e)){if(f.ignored[e])return;h=o.warnings[e]}else/E\d{3}/.test(e)?h=o.errors[e]:/I\d{3}/.test(e)&&(h=o.info[e]);return t=t||f.tokens.next,t.id==="(end)"&&(t=f.tokens.curr),a=t.line||0,u=t.from||0,l={id:"(error)",raw:h.desc,code:h.code,evidence:f.lines[a-1]||"",line:a,character:u,scope:c.scope,a:n,b:r,c:i,d:s},l.reason=z(h.desc,l),c.errors.push(l),J(),c.errors.length>=f.option.maxerr&&V("E043",a,u),l}function Q(e,t,n,r,i,s,o){return K(e,{line:t,from:n},r,i,s,o)}function G(e,t,n,r,i,s){K(e,t,n,r,i,s)}function Y(e,t,n,r,i,s,o){return G(e,{line:t,from:n},r,i,s,o)}function Z(e,t){var n;return n={id:"(internal)",elem:e,value:t},c.internals.push(n),n}function et(e,t){t=t||{};var n=t.type,i=t.token,s=t.islet;n==="exception"&&r.has(w["(context)"],e)&&w[e]!==!0&&!f.option.node&&K("W002",f.tokens.next,e),r.has(w,e)&&!w["(global)"]&&(w[e]===!0?f.option.latedef&&(f.option.latedef===!0&&r.contains([w[e],n],"unction")||!r.contains([w[e],n],"unction"))&&K("W003",f.tokens.next,e):((!f.option.shadow||r.contains(["inner","outer"],f.option.shadow))&&n!=="exception"||w["(blockscope)"].getlabel(e))&&K("W004",f.tokens.next,e)),w["(context)"]&&r.has(w["(context)"],e)&&n!=="function"&&f.option.shadow==="outer"&&K("W123",f.tokens.next,e),s?w["(blockscope)"].current.add(e,n,f.tokens.curr):(w["(blockscope)"].shadow(e),w[e]=n,i&&(w["(tokens)"][e]=i),Xt(w,e,{unused:t.unused||!1}),w["(global)"]?(S[e]=w,r.has(x,e)&&(f.option.latedef&&(f.option.latedef===!0&&r.contains([w[e],n],"unction")||!r.contains([w[e],n],"unction"))&&K("W003",f.tokens.next,e),delete x[e])):D[e]=w)}function tt(){var e=f.tokens.next,t=e.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g)||[],n={};if(e.type==="globals"){t.forEach(function(e){e=e.split(":");var t=(e[0]||"").trim(),r=(e[1]||"").trim();t.charAt(0)==="-"?(t=t.slice(1),r=!1,c.blacklist[t]=t,delete M[t]):n[t]=r==="true"}),W(M,n);for(var i in n)r.has(n,i)&&(g[i]=e)}e.type==="exported"&&t.forEach(function(e){y[e]=!0}),e.type==="members"&&(A=A||{},t.forEach(function(e){var t=e.charAt(0),n=e.charAt(e.length-1);t===n&&(t==='"'||t==="'")&&(e=e.substr(1,e.length-2).replace('\\"','"')),A[e]=!1}));var s=["maxstatements","maxparams","maxdepth","maxcomplexity","maxerr","maxlen","indent"];if(e.type==="jshint"||e.type==="jslint")t.forEach(function(t){t=t.split(":");var n=(t[0]||"").trim(),r=(t[1]||"").trim();if(!I(n,e))return;if(s.indexOf(n)>=0){if(r!=="false"){r=+r;if(typeof r!="number"||!isFinite(r)||r<=0||Math.floor(r)!==r){G("E032",e,t[1].trim());return}f.option[n]=r}else f.option[n]=n==="indent"?4:!1;return}if(n==="validthis"){if(w["(global)"])return void G("E009");if(r!=="true"&&r!=="false")return void G("E002",e);f.option.validthis=r==="true";return}if(n==="quotmark"){switch(r){case"true":case"false":f.option.quotmark=r==="true";break;case"double":case"single":f.option.quotmark=r;break;default:G("E002",e)}return}if(n==="shadow"){switch(r){case"true":f.option.shadow=!0;break;case"outer":f.option.shadow="outer";break;case"false":case"inner":f.option.shadow="inner";break;default:G("E002",e)}return}if(n==="unused"){switch(r){case"true":f.option.unused=!0;break;case"false":f.option.unused=!1;break;case"vars":case"strict":f.option.unused=r;break;default:G("E002",e)}return}if(n==="latedef"){switch(r){case"true":f.option.latedef=!0;break;case"false":f.option.latedef=!1;break;case"nofunc":f.option.latedef="nofunc";break;default:G("E002",e)}return}if(n==="ignore"){switch(r){case"start":f.ignoreLinterErrors=!0;break;case"end":f.ignoreLinterErrors=!1;break;case"line":f.ignoredLines[e.line]=!0,J();break;default:G("E002",e)}return}var i=/^([+-])(W\d{3})$/g.exec(n);if(i){f.ignored[i[2]]=i[1]==="-";return}var o;if(r==="true"||r==="false"){e.type==="jslint"?(o=v[n]||n,f.option[o]=r==="true",d[o]!==undefined&&(f.option[o]=!f.option[o])):f.option[n]=r==="true",n==="newcap"&&(f.option["(explicitNewcap)"]=!0);return}G("E002",e)}),X()}function nt(e){var t=e||0,n=0,r;while(n<=t)r=C[n],r||(r=C[n]=k.token()),n+=1;return r}function rt(t,n){switch(f.tokens.curr.id){case"(number)":f.tokens.next.id==="."&&K("W005",f.tokens.curr);break;case"-":(f.tokens.next.id==="-"||f.tokens.next.id==="--")&&K("W006");break;case"+":(f.tokens.next.id==="+"||f.tokens.next.id==="++")&&K("W007")}if(f.tokens.curr.type==="(string)"||f.tokens.curr.identifier)e=f.tokens.curr.value;t&&f.tokens.next.id!==t&&(n?f.tokens.next.id==="(end)"?G("E019",n,n.id):G("E020",f.tokens.next,t,n.id,n.line,f.tokens.next.value):(f.tokens.next.type!=="(identifier)"||f.tokens.next.value!==t)&&K("W116",f.tokens.next,t,f.tokens.next.value)),f.tokens.prev=f.tokens.curr,f.tokens.curr=f.tokens.next;for(;;){f.tokens.next=C.shift()||k.token(),f.tokens.next||V("E041",f.tokens.curr.line);if(f.tokens.next.id==="(end)"||f.tokens.next.id==="(error)")return;f.tokens.next.check&&f.tokens.next.check();if(f.tokens.next.isSpecial)tt();else if(f.tokens.next.id!=="(endline)")break}}function it(e){return e.infix||!e.identifier&&!!e.led}function st(){var e=f.tokens.curr,t=f.tokens.next;return t.id===";"||t.id==="}"||t.id===":"?!0:it(t)===it(e)||e.id==="yield"&&f.option.inMoz(!0)?e.line!==t.line:!1}function ot(t,n){var i,s=!1,o=!1,u=!1;!n&&f.tokens.next.value==="let"&&nt(0).value==="("&&(f.option.inMoz(!0)||K("W118",f.tokens.next,"let expressions"),u=!0,w["(blockscope)"].stack(),rt("let"),rt("("),f.syntax.let.fud.call(f.syntax.let.fud,!1),rt(")")),f.tokens.next.id==="(end)"&&G("E006",f.tokens.curr);var a=f.option.asi&&f.tokens.prev.line="a"&&t<="z"||t>="A"&&t<="Z")e.identifier=e.reserved=!0;return e}function mt(e,t){var n=ct(e,150);return vt(n),n.nud=typeof t=="function"?t:function(){this.right=ot(150),this.arity="unary";if(this.id==="++"||this.id==="--")f.option.plusplus?K("W016",this,this.id):this.right&&(!this.right.identifier||U(this.right))&&this.right.id!=="."&&this.right.id!=="["&&K("W017",this);return this},n}function gt(e,t){var n=ht(e);return n.type=e,n.nud=t,n}function yt(e,t){var n=gt(e,t);return n.identifier=!0,n.reserved=!0,n}function bt(e,t){var n=gt(e,t&&t.nud||function(){return this});return t=t||{},t.isFutureReservedWord=!0,n.value=e,n.identifier=!0,n.reserved=!0,n.meta=t,n}function wt(e,t){return yt(e,function(){return typeof t=="function"&&t(this),this})}function Et(e,t,n,r){var i=ct(e,n);return vt(i),i.infix=!0,i.led=function(i){return r||ut(f.tokens.prev,f.tokens.curr),e==="in"&&i.id==="!"&&K("W018",i,"!"),typeof t=="function"?t(i,this):(this.left=i,this.right=ot(n),this)},i}function St(e){var t=ct(e,42);return t.led=function(e){return f.option.inESNext()||K("W104",f.tokens.curr,"arrow function syntax (=>)"),ut(f.tokens.prev,f.tokens.curr),this.left=e,this.right=Jt(undefined,undefined,!1,e),this},t}function xt(e,t){var n=ct(e,100);return n.led=function(e){ut(f.tokens.prev,f.tokens.curr);var n=ot(100);return R(e,"NaN")||R(n,"NaN")?K("W019",this):t&&t.apply(this,[e,n]),(!e||!n)&&V("E041",f.tokens.curr.line),e.id==="!"&&K("W018",e,"!"),n.id==="!"&&K("W018",n,"!"),this.left=e,this.right=n,this},n}function Tt(e){return e&&(e.type==="(number)"&&+e.value===0||e.type==="(string)"&&e.value===""||e.type==="null"&&!f.option.eqnull||e.type==="true"||e.type==="false"||e.type==="undefined")}function Nt(e,t){if(f.option.notypeof)return!1;if(!e||!t)return!1;var n=["undefined","object","boolean","number","string","function","xml","object","unknown"];return t.type==="(identifier)"&&t.value==="typeof"&&e.type==="(string)"?!r.contains(n,e.value):!1}function Ct(e){function n(e){if(typeof e!="object")return;return e.right==="prototype"?e:n(e.left)}function r(e){while(!e.identifier&&typeof e.left=="object")e=e.left;if(e.identifier&&t.indexOf(e.value)>=0)return e.value}var t=["Array","ArrayBuffer","Boolean","Collator","DataView","Date","DateTimeFormat","Error","EvalError","Float32Array","Float64Array","Function","Infinity","Intl","Int16Array","Int32Array","Int8Array","Iterator","Number","NumberFormat","Object","RangeError","ReferenceError","RegExp","StopIteration","String","SyntaxError","TypeError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","URIError"],i=n(e);if(i)return r(i)}function kt(e,t,n){var r=Et(e,typeof t=="function"?t:function(e,t){t.left=e;if(e){if(f.option.freeze){var n=Ct(e);n&&K("W121",e,n)}M[e.value]===!1&&D[e.value]["(global)"]===!0?K("W020",e):e["function"]&&K("W021",e,e.value),w[e.value]==="const"&&G("E013",e,e.value);if(e.id===".")return e.left?e.left.value==="arguments"&&!f.directive["use strict"]&&K("E031",t):K("E031",t),t.right=ot(10),t;if(e.id==="[")return f.tokens.curr.left.first?f.tokens.curr.left.first.forEach(function(e){e&&w[e.value]==="const"&&G("E013",e,e.value)}):e.left?e.left.value==="arguments"&&!f.directive["use strict"]&&K("E031",t):K("E031",t),t.right=ot(10),t;if(e.identifier&&!U(e))return w[e.value]==="exception"&&K("W022",e),t.right=ot(10),t;e===f.syntax["function"]&&K("W023",f.tokens.curr)}G("E031",t)},n);return r.exps=!0,r.assign=!0,r}function Lt(e,t,n){var r=ct(e,n);return vt(r),r.led=typeof t=="function"?t:function(e){return f.option.bitwise&&K("W016",this,this.id),this.left=e,this.right=ot(n),this},r}function At(e){return kt(e,function(e,t){f.option.bitwise&&K("W016",t,t.id);if(e)return e.id==="."||e.id==="["||e.identifier&&!U(e)?(ot(10),t):(e===f.syntax["function"]&&K("W023",f.tokens.curr),t);G("E031",t)},20)}function Ot(e){var t=ct(e,150);return t.led=function(e){return f.option.plusplus?K("W016",this,this.id):(!e.identifier||U(e))&&e.id!=="."&&e.id!=="["&&K("W017",this),this.left=e,this},t}function Mt(e,t){if(!f.tokens.next.identifier)return;rt();var n=f.tokens.curr,r=f.tokens.curr.value;return U(n)?t&&f.option.inES5()?r:e&&r==="undefined"?r:(K("W024",f.tokens.curr,f.tokens.curr.id),r):r}function _t(e,t){var n=Mt(e,t);if(n)return n;f.tokens.curr.id==="function"&&f.tokens.next.id==="("?K("W025"):G("E030",f.tokens.next,f.tokens.next.value)}function Dt(e){var t=0,n;if(f.tokens.next.id!==";"||O)return;for(;;){do n=nt(t),t+=1;while(n.id!="(end)"&&n.id==="(comment)");if(n.reach)return;if(n.id!=="(endline)"){if(n.id==="function"){f.option.latedef===!0&&K("W026",n);break}K("W027",n,n.value,e);break}}}function Pt(){f.tokens.next.id!==";"?f.option.asi||(!f.option.lastsemic||f.tokens.next.id!=="}"||f.tokens.next.line!==f.tokens.curr.line)&&Q("W033",f.tokens.curr.line,f.tokens.curr.character):rt(";")}function Ht(){var e,t=N,n,i=D,s=f.tokens.next;if(s.id===";"){rt(";");return}var o=U(s);o&&s.meta&&s.meta.isFutureReservedWord&&nt().id===":"&&(K("W024",s,s.id),o=!1);if(s.value==="module"&&s.type==="(identifier)"&&nt().type==="(identifier)"){f.option.inESNext()||K("W119",f.tokens.curr,"module"),rt("module");var u=_t();et(u,{type:"unused",token:f.tokens.curr}),rt("from"),rt("(string)"),Pt();return}if(r.has(["[","{"],s.value)&&on().isDestAssign){f.option.inESNext()||K("W104",f.tokens.curr,"destructuring expression"),e=Yt(),e.forEach(function(e){$(w,"W117",e.token,e.id)}),rt("="),Zt(e,ot(10,!0)),rt(";");return}s.identifier&&!o&&nt().id===":"&&(rt(),rt(":"),D=Object.create(i),et(s.value,{type:"label"}),!f.tokens.next.labelled&&f.tokens.next.value!=="{"&&K("W028",f.tokens.next,s.value,f.tokens.next.value),f.tokens.next.label=s.value,s=f.tokens.next);if(s.id==="{"){var a=w["(verb)"]==="case"&&f.tokens.curr.value===":";Ft(!0,!0,!1,!1,a);return}return n=ot(0,!0),n&&(!n.identifier||n.value!=="function")&&n.type!=="(punctuator)"&&!f.directive["use strict"]&&f.option.globalstrict&&f.option.strict&&K("E007"),s.block||(!f.option.expr&&(!n||!n.exps)?K("W030",f.tokens.curr):f.option.nonew&&n&&n.left&&n.id==="("&&n.left.id==="new"&&K("W031",s),Pt()),N=t,D=i,n}function Bt(e){var t=[],n;while(!f.tokens.next.reach&&f.tokens.next.id!=="(end)")f.tokens.next.id===";"?(n=nt(),(!n||n.id!=="("&&n.id!=="[")&&K("W032"),rt(";")):t.push(Ht(e===f.tokens.next.line));return t}function jt(){var e,t,n;for(;;){if(f.tokens.next.id==="(string)"){t=nt(0);if(t.id==="(endline)"){e=1;do n=nt(e),e+=1;while(n.id==="(endline)");if(n.id!==";"){if(n.id!=="(string)"&&n.id!=="(number)"&&n.id!=="(regexp)"&&n.identifier!==!0&&n.id!=="}")break;K("W033",f.tokens.next)}else t=n}else if(t.id==="}")K("W033",t);else if(t.id!==";")break;rt(),f.directive[f.tokens.curr.value]&&K("W034",f.tokens.curr,f.tokens.curr.value),f.tokens.curr.value==="use strict"&&(f.option["(explicitNewcap)"]||(f.option.newcap=!0),f.option.undef=!0),f.directive[f.tokens.curr.value]=!0,t.id===";"&&rt(";");continue}break}}function Ft(e,t,n,i,s){var o,u=T,a=N,l,c=D,h,p,d;T=e;if(!e||!f.option.funcscope)D=Object.create(D);h=f.tokens.next;var v=w["(metrics)"];v.nestedBlockDepth+=1,v.verifyMaxNestedBlockDepthPerFunction();if(f.tokens.next.id==="{"){rt("{"),w["(blockscope)"].stack(),p=f.tokens.curr.line;if(f.tokens.next.id!=="}"){N+=f.option.indent;while(!e&&f.tokens.next.from>N)N+=f.option.indent;if(n){l={};for(d in f.directive)r.has(f.directive,d)&&(l[d]=f.directive[d]);jt(),f.option.strict&&w["(context)"]["(global)"]&&!l["use strict"]&&!f.directive["use strict"]&&K("E007")}o=Bt(p),v.statementCount+=o.length,n&&(f.directive=l),N-=f.option.indent}rt("}",h),w["(blockscope)"].unstack(),N=a}else if(!e)if(n){l={},t&&!i&&!f.option.inMoz(!0)&&G("W118",f.tokens.curr,"function closure expressions");if(!t)for(d in f.directive)r.has(f.directive,d)&&(l[d]=f.directive[d]);ot(10),f.option.strict&&w["(context)"]["(global)"]&&!l["use strict"]&&!f.directive["use strict"]&&K("E007")}else G("E021",f.tokens.next,"{",f.tokens.next.value);else w["(nolet)"]=!0,(!t||f.option.curly)&&K("W116",f.tokens.next,"{",f.tokens.next.value),O=!0,N+=f.option.indent,o=[Ht()],N-=f.option.indent,O=!1,delete w["(nolet)"];switch(w["(verb)"]){case"break":case"continue":case"return":case"throw":if(s)break;default:w["(verb)"]=null}if(!e||!f.option.funcscope)D=c;return T=u,e&&f.option.noempty&&(!o||o.length===0)&&K("W035"),v.nestedBlockDepth-=1,o}function It(e){A&&typeof A[e]!="boolean"&&K("W036",f.tokens.curr,e),typeof L[e]=="number"?L[e]+=1:L[e]=1}function qt(e){var t=e.value,n=Object.getOwnPropertyDescriptor(x,t);n?n.value.push(e.line):x[t]=[e.line]}function Ut(){var e={};e.exps=!0,w["(comparray)"].stack();var t=!1;return f.tokens.next.value!=="for"&&(t=!0,f.option.inMoz(!0)||K("W116",f.tokens.next,"for",f.tokens.next.value),w["(comparray)"].setState("use"),e.right=ot(10)),rt("for"),f.tokens.next.value==="each"&&(rt("each"),f.option.inMoz(!0)||K("W118",f.tokens.curr,"for each")),rt("("),w["(comparray)"].setState("define"),e.left=ot(130),r.contains(["in","of"],f.tokens.next.value)?rt():G("E045",f.tokens.curr),w["(comparray)"].setState("generate"),ot(10),rt(")"),f.tokens.next.value==="if"&&(rt("if"),rt("("),w["(comparray)"].setState("filter"),e.filter=ot(10),rt(")")),t||(w["(comparray)"].setState("use"),e.right=ot(10)),rt("]"),w["(comparray)"].unstack(),e}function zt(){var e=Mt(!1,!0);return e||(f.tokens.next.id==="(string)"?(e=f.tokens.next.value,rt()):f.tokens.next.id==="(number)"&&(e=f.tokens.next.value.toString(),rt())),e==="hasOwnProperty"&&K("W001"),e}function Wt(e){var t,n,i=[],s,o=[],u,a=!1;if(e){if(Array.isArray(e)){for(var l in e){t=e[l];if(t.value==="..."){f.option.inESNext()||K("W104",t,"spread/rest operator");continue}t.value!==","&&(i.push(t.value),et(t.value,{type:"unused",token:t}))}return i}if(e.identifier===!0)return et(e.value,{type:"unused",token:e}),[e]}n=f.tokens.next,rt("(");if(f.tokens.next.id===")"){rt(")");return}for(;;){if(r.contains(["{","["],f.tokens.next.id)){o=Yt();for(u in o)u=o[u],u.id&&(i.push(u.id),et(u.id,{type:"unused",token:u.token}))}else f.tokens.next.value==="..."?(f.option.inESNext()||K("W104",f.tokens.next,"spread/rest operator"),rt("..."),s=_t(!0),i.push(s),et(s,{type:"unused",token:f.tokens.curr})):(s=_t(!0),i.push(s),et(s,{type:"unused",token:f.tokens.curr}));a&&f.tokens.next.id!=="="&&G("E051",f.tokens.current),f.tokens.next.id==="="&&(f.option.inESNext()||K("W119",f.tokens.next,"default parameters"),rt("="),a=!0,ot(10));if(f.tokens.next.id!==",")return rt(")",n),i;lt()}}function Xt(e,t,n){e["(properties)"][t]||(e["(properties)"][t]={unused:!1}),r.extend(e["(properties)"][t],n)}function Vt(e,t,n){return e["(properties)"][t]?e["(properties)"][t][n]||null:null}function $t(e,t,n,i){var s={"(name)":e,"(breakage)":0,"(loopage)":0,"(scope)":n,"(tokens)":{},"(properties)":{},"(catch)":!1,"(global)":!1,"(line)":null,"(character)":null,"(metrics)":null,"(statement)":null,"(context)":null,"(blockscope)":null,"(comparray)":null,"(generator)":null,"(params)":null};return t&&r.extend(s,{"(line)":t.line,"(character)":t.character,"(metrics)":Kt(t)}),r.extend(s,i),s["(context)"]&&(s["(blockscope)"]=s["(context)"]["(blockscope)"],s["(comparray)"]=s["(context)"]["(comparray)"]),s}function Jt(t,n,i,s){var o,u=f.option,a=f.ignored,l=D;return f.option=Object.create(f.option),f.ignored=Object.create(f.ignored),D=Object.create(D),w=$t(t||'"'+e+'"',f.tokens.next,D,{"(statement)":n,"(context)":w,"(generator)":i?!0:null}),o=w,f.tokens.curr.funct=w,E.push(w),t&&et(t,{type:"function"}),w["(params)"]=Wt(s),w["(metrics)"].verifyMaxParametersPerFunction(w["(params)"]),c.undefs=r.filter(c.undefs,function(e){return!r.contains(r.union(s),e[2])}),Ft(!1,!0,!0,s?!0:!1),!f.option.noyield&&i&&w["(generator)"]!=="yielded"&&K("W124",f.tokens.curr),w["(metrics)"].verifyMaxStatementsPerFunction(),w["(metrics)"].verifyMaxComplexityPerFunction(),w["(unusedOption)"]=f.option.unused,D=l,f.option=u,f.ignored=a,w["(last)"]=f.tokens.curr.line,w["(lastcharacter)"]=f.tokens.curr.character,r.map(Object.keys(w),function(e){if(e[0]==="(")return;w["(blockscope)"].unshadow(e)}),w=w["(context)"],o}function Kt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,verifyMaxStatementsPerFunction:function(){f.option.maxstatements&&this.statementCount>f.option.maxstatements&&K("W071",e,this.statementCount)},verifyMaxParametersPerFunction:function(t){t=t||[],f.option.maxparams&&t.length>f.option.maxparams&&K("W072",e,t.length)},verifyMaxNestedBlockDepthPerFunction:function(){f.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===f.option.maxdepth+1&&K("W073",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var t=f.option.maxcomplexity,n=this.ComplexityCount;t&&n>t&&K("W074",e,n)}}}function Qt(){w["(metrics)"].ComplexityCount+=1}function Gt(e){var t,n;e&&(t=e.id,n=e.paren,t===","&&(e=e.exprs[e.exprs.length-1])&&(t=e.id,n=n||e.paren));switch(t){case"=":case"+=":case"-=":case"*=":case"%=":case"&=":case"|=":case"^=":case"/=":!n&&!f.option.boss&&K("W084")}}function Yt(){var e,t,n=[];f.option.inESNext()||K("W104",f.tokens.curr,"destructuring expression");var i=function(){var e;if(r.contains(["[","{"],f.tokens.next.value)){t=Yt();for(var s in t)s=t[s],n.push({id:s.id,token:s.token})}else f.tokens.next.value===","?n.push({id:null,token:f.tokens.curr}):f.tokens.next.value==="("?(rt("("),i(),rt(")")):(e=_t(),e&&n.push({id:e,token:f.tokens.curr}))};if(f.tokens.next.value==="["){rt("["),i();while(f.tokens.next.value!=="]")rt(","),i();rt("]")}else if(f.tokens.next.value==="{"){rt("{"),e=_t(),f.tokens.next.value===":"?(rt(":"),i()):n.push({id:e,token:f.tokens.curr});while(f.tokens.next.value!=="}")rt(","),e=_t(),f.tokens.next.value===":"?(rt(":"),i()):n.push({id:e,token:f.tokens.curr});rt("}")}return n}function Zt(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[n]).forEach(function(e){var t=e[0],n=e[1];t&&n?t.first=n:t&&t.first&&!n&&K("W080",t.first,t.first.value)})}function rn(e){return f.option.inESNext()||K("W104",f.tokens.curr,"class"),e?(this.name=_t(),et(this.name,{type:"unused",token:f.tokens.curr})):f.tokens.next.identifier&&f.tokens.next.value!=="extends"&&(this.name=_t()),sn(this),this}function sn(e){var t=f.directive["use strict"];f.tokens.next.value==="extends"&&(rt("extends"),e.heritage=ot(10)),f.directive["use strict"]=!0,rt("{"),e.body=f.syntax["{"].nud(!0),f.directive["use strict"]=t}function un(){var e=on();e.notJson?(!f.option.inESNext()&&e.isDestAssign&&K("W104",f.tokens.curr,"destructuring assignment"),Bt()):(f.option.laxbreak=!0,f.jsonMode=!0,fn())}function fn(){function e(){var e={},t=f.tokens.next;rt("{");if(f.tokens.next.id!=="}")for(;;){if(f.tokens.next.id==="(end)")G("E026",f.tokens.next,t.line);else{if(f.tokens.next.id==="}"){K("W094",f.tokens.curr);break}f.tokens.next.id===","?G("E028",f.tokens.next):f.tokens.next.id!=="(string)"&&K("W095",f.tokens.next,f.tokens.next.value)}e[f.tokens.next.value]===!0?K("W075",f.tokens.next,f.tokens.next.value):f.tokens.next.value==="__proto__"&&!f.option.proto||f.tokens.next.value==="__iterator__"&&!f.option.iterator?K("W096",f.tokens.next,f.tokens.next.value):e[f.tokens.next.value]=!0,rt(),rt(":"),fn();if(f.tokens.next.id!==",")break;rt(",")}rt("}")}function t(){var e=f.tokens.next;rt("[");if(f.tokens.next.id!=="]")for(;;){if(f.tokens.next.id==="(end)")G("E027",f.tokens.next,e.line);else{if(f.tokens.next.id==="]"){K("W094",f.tokens.curr);break}f.tokens.next.id===","&&G("E028",f.tokens.next)}fn();if(f.tokens.next.id!==",")break;rt(",")}rt("]")}switch(f.tokens.next.id){case"{":e();break;case"[":t();break;case"true":case"false":case"null":case"(number)":case"(string)":rt();break;case"-":rt("-"),rt("(number)");break;default:G("E003",f.tokens.next)}}var e,t,n={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},h={asi:!0,bitwise:!0,boss:!0,browser:!0,camelcase:!0,couch:!0,curly:!0,debug:!0,devel:!0,dojo:!0,eqeqeq:!0,eqnull:!0,notypeof:!0,es3:!0,es5:!0,esnext:!0,moz:!0,evil:!0,expr:!0,forin:!0,funcscope:!0,globalstrict:!0,immed:!0,iterator:!0,jasmine:!0,jquery:!0,lastsemic:!0,laxbreak:!0,laxcomma:!0,loopfunc:!0,mootools:!0,multistr:!0,freeze:!0,newcap:!0,noarg:!0,node:!0,noempty:!0,nonbsp:!0,nonew:!0,nonstandard:!0,phantom:!0,plusplus:!0,proto:!0,prototypejs:!0,qunit:!0,rhino:!0,shelljs:!0,typed:!0,undef:!0,scripturl:!0,strict:!0,sub:!0,supernew:!0,validthis:!0,withstmt:!0,worker:!0,wsh:!0,yui:!0,mocha:!0,noyield:!0,onecase:!0,regexp:!0,regexdash:!0},p={maxlen:!1,indent:!1,maxerr:!1,predef:!1,globals:!1,quotmark:!1,scope:!1,maxstatements:!1,maxdepth:!1,maxparams:!1,maxcomplexity:!1,shadow:!1,unused:!0,latedef:!1,ignore:!1},d={bitwise:!0,forin:!0,newcap:!0,plusplus:!0,regexp:!0,undef:!0,eqeqeq:!0,strict:!0},v={eqeq:"eqeqeq",windows:"wsh",sloppy:"strict"},m={nomen:!0,onevar:!0,passfail:!0,white:!0,gcl:!0,smarttabs:!0,trailing:!0},g,y,b=["closure","exception","global","label","outer","unused","var"],w,E,S,x,T,N,C,k,L,A,O,M,D,P,H,B,j=[],F=new i.EventEmitter;gt("(number)",function(){return this}),gt("(string)",function(){return this}),gt("(template)",function(){return this}),f.syntax["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var t=this.value,n=D[t],r,i;typeof n=="function"?n=undefined:!w["(blockscope)"].current.has(t)&&typeof n=="boolean"&&(r=w,w=E[0],et(t,{type:"var"}),n=w,w=r),i=w["(blockscope)"].getlabel(t);if(w===n||i)switch(i?i[t]["(type)"]:w[t]){case"unused":i?i[t]["(type)"]="var":w[t]="var";break;case"unction":i?i[t]["(type)"]="function":w[t]="function",this["function"]=!0;break;case"const":Xt(w,t,{unused:!1});break;case"function":this["function"]=!0;break;case"label":K("W037",f.tokens.curr,t)}else if(w["(global)"])typeof M[t]!="boolean"&&(e!=="typeof"&&e!=="delete"||f.tokens.next&&(f.tokens.next.value==="."||f.tokens.next.value==="["))&&(w["(comparray)"].check(t)||$(w,"W117",f.tokens.curr,t)),qt(f.tokens.curr);else switch(w[t]){case"closure":case"function":case"var":case"unused":K("W038",f.tokens.curr,t);break;case"label":K("W037",f.tokens.curr,t);break;case"outer":case"global":break;default:if(n===!0)w[t]=!0;else if(n===null)K("W039",f.tokens.curr,t),qt(f.tokens.curr);else if(typeof n!="object")(e!=="typeof"&&e!=="delete"||f.tokens.next&&(f.tokens.next.value==="."||f.tokens.next.value==="["))&&$(w,"W117",f.tokens.curr,t),w[t]=!0,qt(f.tokens.curr);else switch(n[t]){case"function":case"unction":this["function"]=!0,n[t]="closure",w[t]=n["(global)"]?"global":"outer";break;case"var":case"unused":n[t]="closure",w[t]=n["(global)"]?"global":"outer";break;case"const":Xt(n,t,{unused:!1});break;case"closure":w[t]=n["(global)"]?"global":"outer";break;case"label":K("W037",f.tokens.curr,t)}}return this},led:function(){G("E033",f.tokens.next,f.tokens.next.value)}},gt("(regexp)",function(){return this}),ht("(endline)"),ht("(begin)"),ht("(end)").reach=!0,ht("(error)").reach=!0,ht("}").reach=!0,ht(")"),ht("]"),ht('"').reach=!0,ht("'").reach=!0,ht(";"),ht(":").reach=!0,ht("#"),yt("else"),yt("case").reach=!0,yt("catch"),yt("default").reach=!0,yt("finally"),wt("arguments",function(e){f.directive["use strict"]&&w["(global)"]&&K("E008",e)}),wt("eval"),wt("false"),wt("Infinity"),wt("null"),wt("this",function(e){f.directive["use strict"]&&!f.option.validthis&&(w["(statement)"]&&w["(name)"].charAt(0)>"Z"||w["(global)"])&&K("W040",e)}),wt("true"),wt("undefined"),kt("=","assign",20),kt("+=","assignadd",20),kt("-=","assignsub",20),kt("*=","assignmult",20),kt("/=","assigndiv",20).nud=function(){G("E014")},kt("%=","assignmod",20),At("&=","assignbitand",20),At("|=","assignbitor",20),At("^=","assignbitxor",20),At("<<=","assignshiftleft",20),At(">>=","assignshiftright",20),At(">>>=","assignshiftrightunsigned",20),Et(",",function(e,t){var n;t.exprs=[e];if(!lt({peek:!0}))return t;for(;;){if(!(n=ot(10)))break;t.exprs.push(n);if(f.tokens.next.value!==","||!lt())break}return t},10,!0),Et("?",function(e,t){return Qt(),t.left=e,t.right=ot(10),rt(":"),t["else"]=ot(10),t},30);var Rt=40;Et("||",function(e,t){return Qt(),t.left=e,t.right=ot(Rt),t},Rt),Et("&&","and",50),Lt("|","bitor",70),Lt("^","bitxor",80),Lt("&","bitand",90),xt("==",function(e,t){var n=f.option.eqnull&&(e.value==="null"||t.value==="null");switch(!0){case!n&&f.option.eqeqeq:this.from=this.character,K("W116",this,"===","==");break;case Tt(e):K("W041",this,"===",e.value);break;case Tt(t):K("W041",this,"===",t.value);break;case Nt(t,e):K("W122",this,t.value);break;case Nt(e,t):K("W122",this,e.value)}return this}),xt("===",function(e,t){return Nt(t,e)?K("W122",this,t.value):Nt(e,t)&&K("W122",this,e.value),this}),xt("!=",function(e,t){var n=f.option.eqnull&&(e.value==="null"||t.value==="null");return!n&&f.option.eqeqeq?(this.from=this.character,K("W116",this,"!==","!=")):Tt(e)?K("W041",this,"!==",e.value):Tt(t)?K("W041",this,"!==",t.value):Nt(t,e)?K("W122",this,t.value):Nt(e,t)&&K("W122",this,e.value),this}),xt("!==",function(e,t){return Nt(t,e)?K("W122",this,t.value):Nt(e,t)&&K("W122",this,e.value),this}),xt("<"),xt(">"),xt("<="),xt(">="),Lt("<<","shiftleft",120),Lt(">>","shiftright",120),Lt(">>>","shiftrightunsigned",120),Et("in","in",120),Et("instanceof","instanceof",120),Et("+",function(e,t){var n=ot(130);return e&&n&&e.id==="(string)"&&n.id==="(string)"?(e.value+=n.value,e.character=n.character,!f.option.scripturl&&a.javascriptURL.test(e.value)&&K("W050",e),e):(t.left=e,t.right=n,t)},130),mt("+","num"),mt("+++",function(){return K("W007"),this.right=ot(150),this.arity="unary",this}),Et("+++",function(e){return K("W007"),this.left=e,this.right=ot(130),this},130),Et("-","sub",130),mt("-","neg"),mt("---",function(){return K("W006"),this.right=ot(150),this.arity="unary",this}),Et("---",function(e){return K("W006"),this.left=e,this.right=ot(130),this},130),Et("*","mult",140),Et("/","div",140),Et("%","mod",140),Ot("++","postinc"),mt("++","preinc"),f.syntax["++"].exps=!0,Ot("--","postdec"),mt("--","predec"),f.syntax["--"].exps=!0,mt("delete",function(){var e=ot(10);return(!e||e.id!=="."&&e.id!=="[")&&K("W051"),this.first=e,this}).exps=!0,mt("~",function(){return f.option.bitwise&&K("W052",this,"~"),ot(150),this}),mt("...",function(){return f.option.inESNext()||K("W104",this,"spread/rest operator"),f.tokens.next.identifier||G("E030",f.tokens.next,f.tokens.next.value),ot(150),this}),mt("!",function(){return this.right=ot(150),this.arity="unary",this.right||V("E041",this.line||0),n[this.right.id]===!0&&K("W018",this,"!"),this}),mt("typeof","typeof"),mt("new",function(){var e=ot(155),t;if(e&&e.id!=="function")if(e.identifier){e["new"]=!0;switch(e.value){case"Number":case"String":case"Boolean":case"Math":case"JSON":K("W053",f.tokens.prev,e.value);break;case"Function":f.option.evil||K("W054");break;case"Date":case"RegExp":case"this":break;default:e.id!=="function"&&(t=e.value.substr(0,1),f.option.newcap&&(t<"A"||t>"Z")&&!r.has(S,e.value)&&K("W055",f.tokens.curr))}}else e.id!=="."&&e.id!=="["&&e.id!=="("&&K("W056",f.tokens.curr);else f.option.supernew||K("W057",this);return f.tokens.next.id!=="("&&!f.option.supernew&&K("W058",f.tokens.curr,f.tokens.curr.value),this.first=e,this}),f.syntax["new"].exps=!0,mt("void").exps=!0,Et(".",function(e,t){var n=_t(!1,!0);return typeof n=="string"&&It(n),t.left=e,t.right=n,n&&n==="hasOwnProperty"&&f.tokens.next.value==="="&&K("W001"),!e||e.value!=="arguments"||n!=="callee"&&n!=="caller"?!f.option.evil&&e&&e.value==="document"&&(n==="write"||n==="writeln")&&K("W060",e):f.option.noarg?K("W059",e,n):f.directive["use strict"]&&G("E008"),!f.option.evil&&(n==="eval"||n==="execScript")&&K("W061"),t},160,!0),Et("(",function(e,t){f.option.immed&&e&&!e.immed&&e.id==="function"&&K("W062");var n=0,r=[];e&&e.type==="(identifier)"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&"Number String Boolean Date Object Error".indexOf(e.value)===-1&&(e.value==="Math"?K("W063",e):f.option.newcap&&K("W064",e));if(f.tokens.next.id!==")")for(;;){r[r.length]=ot(10),n+=1;if(f.tokens.next.id!==",")break;lt()}return rt(")"),typeof e=="object"&&(f.option.inES3()&&e.value==="parseInt"&&n===1&&K("W065",f.tokens.curr),f.option.evil||(e.value==="eval"||e.value==="Function"||e.value==="execScript"?(K("W061",e),r[0]&&[0].id==="(string)"&&Z(e,r[0].value)):!r[0]||r[0].id!=="(string)"||e.value!=="setTimeout"&&e.value!=="setInterval"?r[0]&&r[0].id==="(string)"&&e.value==="."&&e.left.value==="window"&&(e.right==="setTimeout"||e.right==="setInterval")&&(K("W066",e),Z(e,r[0].value)):(K("W066",e),Z(e,r[0].value))),!e.identifier&&e.id!=="."&&e.id!=="["&&e.id!=="("&&e.id!=="&&"&&e.id!=="||"&&e.id!=="?"&&K("W067",e)),t.left=e,t},155,!0).exps=!0,mt("(",function(){var e,t=[],n,i,s=0,o,u=1;do n=nt(s),n.value==="("?u+=1:n.value===")"&&(u-=1),s+=1,i=nt(s);while((u!==0||n.value!==")")&&i.value!=="=>"&&i.value!==";"&&i.type!=="(end)");f.tokens.next.id==="function"&&(f.tokens.next.immed=!0);var a=[];if(f.tokens.next.id!==")")for(;;){if(i.value==="=>"&&r.contains(["{","["],f.tokens.next.value)){e=f.tokens.next,e.left=Yt(),t.push(e);for(var l in e.left)a.push(e.left[l].token)}else a.push(ot(10));if(f.tokens.next.id!==",")break;lt()}rt(")",this),f.option.immed&&a[0]&&a[0].id==="function"&&f.tokens.next.id!=="("&&(f.tokens.next.id!=="."||nt().value!=="call"&&nt().value!=="apply")&&K("W068",this);if(f.tokens.next.value==="=>")return a;if(!a.length)return;return a.length>1?(o=Object.create(f.syntax[","]),o.exprs=a):o=a[0],o&&(o.paren=!0),o}),St("=>"),Et("[",function(e,t){var n=ot(10),r;return n&&n.type==="(string)"&&(!f.option.evil&&(n.value==="eval"||n.value==="execScript")&&K("W061",t),It(n.value),!f.option.sub&&a.identifier.test(n.value)&&(r=f.syntax[n.value],(!r||!U(r))&&K("W069",f.tokens.prev,n.value))),rt("]",t),n&&n.value==="hasOwnProperty"&&f.tokens.next.value==="="&&K("W001"),t.left=e,t.right=n,t},160,!0),mt("[",function(){var e=on(!0);if(e.isCompArray)return f.option.inESNext()||K("W119",f.tokens.curr,"array comprehension"),Ut();e.isDestAssign&&!f.option.inESNext()&&K("W104",f.tokens.curr,"destructuring assignment");var t=f.tokens.curr.line!==f.tokens.next.line;this.first=[],t&&(N+=f.option.indent,f.tokens.next.from===N+f.option.indent&&(N+=f.option.indent));while(f.tokens.next.id!=="(end)"){while(f.tokens.next.id===",")f.option.inES5()||K("W070"),rt(",");if(f.tokens.next.id==="]")break;this.first.push(ot(10));if(f.tokens.next.id!==",")break;lt({allowTrailing:!0});if(f.tokens.next.id==="]"&&!f.option.inES5(!0)){K("W070",f.tokens.curr);break}}return t&&(N-=f.option.indent),rt("]",this),this},160),function(e){e.nud=function(e){function c(e,t){a[e]&&r.has(a,e)?K("W075",f.tokens.next,i):a[e]={},a[e].basic=!0,a[e].basictkn=t}function h(e,t){a[e]&&r.has(a,e)?(a[e].basic||a[e].setter)&&K("W075",f.tokens.next,i):a[e]={},a[e].setter=!0,a[e].setterToken=t}function p(e){a[e]&&r.has(a,e)?(a[e].basic||a[e].getter)&&K("W075",f.tokens.next,i):a[e]={},a[e].getter=!0,a[e].getterToken=f.tokens.curr}var t,n,i,s,o,u,a={},l="";t=f.tokens.curr.line!==f.tokens.next.line,t&&(N+=f.option.indent,f.tokens.next.from===N+f.option.indent&&(N+=f.option.indent));for(;;){if(f.tokens.next.id==="}")break;e&&f.tokens.next.value==="static"&&(rt("static"),l="static ");if(f.tokens.next.value==="get"&&nt().id!==":")rt("get"),f.option.inES5(!e)||G("E034"),i=zt(),!i&&!f.option.inESNext()&&G("E035"),e&&i==="constructor"&&G("E049",f.tokens.next,"class getter method",i),i&&p(l+i),o=f.tokens.next,n=Jt(),s=n["(params)"],i&&s&&K("W076",o,s[0],i);else if(f.tokens.next.value==="set"&&nt().id!==":")rt("set"),f.option.inES5(!e)||G("E034"),i=zt(),!i&&!f.option.inESNext()&&G("E035"),e&&i==="constructor"&&G("E049",f.tokens.next,"class setter method",i),i&&h(l+i,f.tokens.next),o=f.tokens.next,n=Jt(),s=n["(params)"],i&&(!s||s.length!==1)&&K("W077",o,i);else{u=!1,f.tokens.next.value==="*"&&f.tokens.next.type==="(punctuator)"&&(f.option.inESNext()||K("W104",f.tokens.next,"generator functions"),rt("*"),u=!0),i=zt(),c(l+i,f.tokens.next);if(typeof i!="string")break;f.tokens.next.value==="("?(f.option.inESNext()||K("W104",f.tokens.curr,"concise methods"),Jt(i,undefined,u)):e||(rt(":"),ot(10))}e&&i==="prototype"&&G("E049",f.tokens.next,"class method",i),It(i);if(e){l="";continue}if(f.tokens.next.id!==",")break;lt({allowTrailing:!0,property:!0}),f.tokens.next.id===","?K("W070",f.tokens.curr):f.tokens.next.id==="}"&&!f.option.inES5(!0)&&K("W070",f.tokens.curr)}t&&(N-=f.option.indent),rt("}",this);if(f.option.inES5())for(var d in a)r.has(a,d)&&a[d].setter&&!a[d].getter&&K("W078",a[d].setterToken);return this},e.fud=function(){G("E036",f.tokens.curr)}}(ht("{"));var en=pt("const",function(e){var t,n,i;f.option.inESNext()||K("W104",f.tokens.curr,"const"),this.first=[];for(;;){var s=[];r.contains(["{","["],f.tokens.next.value)?(t=Yt(),i=!1):(t=[{id:_t(),token:f.tokens.curr}],i=!0);for(var o in t)t.hasOwnProperty(o)&&(o=t[o],w[o.id]==="const"&&K("E011",null,o.id),w["(global)"]&&M[o.id]===!1&&K("W079",o.token,o.id),o.id&&(et(o.id,{token:o.token,type:"const",unused:!0}),s.push(o.token)));if(e)break;this.first=this.first.concat(s),f.tokens.next.id!=="="&&K("E012",f.tokens.curr,f.tokens.curr.value),f.tokens.next.id==="="&&(rt("="),f.tokens.next.id==="undefined"&&K("W080",f.tokens.prev,f.tokens.prev.value),nt(0).id==="="&&f.tokens.next.identifier&&K("W120",f.tokens.next,f.tokens.next.value),n=ot(10),i?t[0].first=n:Zt(s,n));if(f.tokens.next.id!==",")break;lt()}return this});en.exps=!0;var tn=pt("var",function(e){var t,n,i;this.first=[];for(;;){var s=[];r.contains(["{","["],f.tokens.next.value)?(t=Yt(),n=!1):(t=[{id:_t(),token:f.tokens.curr}],n=!0);for(var o in t)t.hasOwnProperty(o)&&(o=t[o],f.option.inESNext()&&w[o.id]==="const"&&K("E011",null,o.id),w["(global)"]&&M[o.id]===!1&&K("W079",o.token,o.id),o.id&&(et(o.id,{type:"unused",token:o.token}),s.push(o.token)));if(e)break;this.first=this.first.concat(s),f.tokens.next.id==="="&&(rt("="),f.tokens.next.id==="undefined"&&K("W080",f.tokens.prev,f.tokens.prev.value),nt(0).id==="="&&f.tokens.next.identifier&&K("W120",f.tokens.next,f.tokens.next.value),i=ot(10),n?t[0].first=i:Zt(s,i));if(f.tokens.next.id!==",")break;lt()}return this});tn.exps=!0;var nn=pt("let",function(e){var t,n,i,s;f.option.inESNext()||K("W104",f.tokens.curr,"let"),f.tokens.next.value==="("?(f.option.inMoz(!0)||K("W118",f.tokens.next,"let block"),rt("("),w["(blockscope)"].stack(),s=!0):w["(nolet)"]&&G("E048",f.tokens.curr),this.first=[];for(;;){var o=[];r.contains(["{","["],f.tokens.next.value)?(t=Yt(),n=!1):(t=[{id:_t(),token:f.tokens.curr.value}],n=!0);for(var u in t)t.hasOwnProperty(u)&&(u=t[u],f.option.inESNext()&&w[u.id]==="const"&&K("E011",null,u.id),w["(global)"]&&M[u.id]===!1&&K("W079",u.token,u.id),u.id&&!w["(nolet)"]&&(et(u.id,{type:"unused",token:u.token,islet:!0}),o.push(u.token)));if(e)break;this.first=this.first.concat(o),f.tokens.next.id==="="&&(rt("="),f.tokens.next.id==="undefined"&&K("W080",f.tokens.prev,f.tokens.prev.value),nt(0).id==="="&&f.tokens.next.identifier&&K("W120",f.tokens.next,f.tokens.next.value),i=ot(10),n?t[0].first=i:Zt(o,i));if(f.tokens.next.id!==",")break;lt()}return s&&(rt(")"),Ft(!0,!0),this.block=!0,w["(blockscope)"].unstack()),this});nn.exps=!0,dt("class",function(){return rn.call(this,!0)}),dt("function",function(){var e=!1;f.tokens.next.value==="*"&&(rt("*"),f.option.inESNext(!0)?e=!0:K("W119",f.tokens.curr,"function*")),T&&K("W082",f.tokens.curr);var t=_t();return w[t]==="const"&&K("E011",null,t),et(t,{type:"unction",token:f.tokens.curr}),Jt(t,{statement:!0},e),f.tokens.next.id==="("&&f.tokens.next.line===f.tokens.curr.line&&G("E039"),this}),mt("function",function(){var e=!1;f.tokens.next.value==="*"&&(f.option.inESNext()||K("W119",f.tokens.curr,"function*"),rt("*"),e=!0);var t=Mt();return Jt(t,undefined,e),!f.option.loopfunc&&w["(loopage)"]&&K("W083"),this}),dt("if",function(){var e=f.tokens.next;return Qt(),f.condition=!0,rt("("),Gt(ot(0)),rt(")",e),f.condition=!1,Ft(!0,!0),f.tokens.next.id==="else"&&(rt("else"),f.tokens.next.id==="if"||f.tokens.next.id==="switch"?Ht(!0):Ft(!0,!0)),this}),dt("try",function(){function t(){var e=D,t;rt("catch"),rt("("),D=Object.create(e),t=f.tokens.next.value,f.tokens.next.type!=="(identifier)"&&(t=null,K("E030",f.tokens.next,t)),rt(),w=$t("(catch)",f.tokens.next,D,{"(context)":w,"(breakage)":w["(breakage)"],"(loopage)":w["(loopage)"],"(statement)":!1,"(catch)":!0}),t&&et(t,{type:"exception"}),f.tokens.next.value==="if"&&(f.option.inMoz(!0)||K("W118",f.tokens.curr,"catch filter"),rt("if"),ot(0)),rt(")"),f.tokens.curr.funct=w,E.push(w),Ft(!1),D=e,w["(last)"]=f.tokens.curr.line,w["(lastcharacter)"]=f.tokens.curr.character,w=w["(context)"]}var e;Ft(!0);while(f.tokens.next.id==="catch")Qt(),e&&!f.option.inMoz(!0)&&K("W118",f.tokens.next,"multiple catch blocks"),t(),e=!0;if(f.tokens.next.id==="finally"){rt("finally"),Ft(!0);return}return e||G("E021",f.tokens.next,"catch",f.tokens.next.value),this}),dt("while",function(){var e=f.tokens.next;return w["(breakage)"]+=1,w["(loopage)"]+=1,Qt(),rt("("),Gt(ot(0)),rt(")",e),Ft(!0,!0),w["(breakage)"]-=1,w["(loopage)"]-=1,this}).labelled=!0,dt("with",function(){var e=f.tokens.next;return f.directive["use strict"]?G("E010",f.tokens.curr):f.option.withstmt||K("W085",f.tokens.curr),rt("("),ot(0),rt(")",e),Ft(!0,!0),this}),dt("switch",function(){var e=f.tokens.next,t=!1,n=!1;w["(breakage)"]+=1,rt("("),Gt(ot(0)),rt(")",e),e=f.tokens.next,rt("{"),f.tokens.next.from===N&&(n=!0),n||(N+=f.option.indent),this.cases=[];for(;;)switch(f.tokens.next.id){case"case":switch(w["(verb)"]){case"yield":case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:a.fallsThrough.test(f.lines[f.tokens.next.line-2])||K("W086",f.tokens.curr,"case")}rt("case"),this.cases.push(ot(0)),Qt(),t=!0,rt(":"),w["(verb)"]="case";break;case"default":switch(w["(verb)"]){case"yield":case"break":case"continue":case"return":case"throw":break;default:this.cases.length&&(a.fallsThrough.test(f.lines[f.tokens.next.line-2])||K("W086",f.tokens.curr,"default"))}rt("default"),t=!0,rt(":");break;case"}":n||(N-=f.option.indent),rt("}",e),w["(breakage)"]-=1,w["(verb)"]=undefined;return;case"(end)":G("E023",f.tokens.next,"}");return;default:N+=f.option.indent;if(t)switch(f.tokens.curr.id){case",":G("E040");return;case":":t=!1,Bt();break;default:G("E025",f.tokens.curr);return}else{if(f.tokens.curr.id!==":"){G("E021",f.tokens.next,"case",f.tokens.next.value);return}rt(":"),G("E024",f.tokens.curr,":"),Bt()}N-=f.option.indent}}).labelled=!0,pt("debugger",function(){return f.option.debug||K("W087",this),this}).exps=!0,function(){var e=pt("do",function(){w["(breakage)"]+=1,w["(loopage)"]+=1,Qt(),this.first=Ft(!0,!0),rt("while");var e=f.tokens.next;return rt("("),Gt(ot(0)),rt(")",e),w["(breakage)"]-=1,w["(loopage)"]-=1,this});e.labelled=!0,e.exps=!0}(),dt("for",function(){var e,t=f.tokens.next,n=!1,i=null;t.value==="each"&&(i=t,rt("each"),f.option.inMoz(!0)||K("W118",f.tokens.curr,"for each")),w["(breakage)"]+=1,w["(loopage)"]+=1,Qt(),rt("(");var s,o=0,u=["in","of"];do s=nt(o),++o;while(!r.contains(u,s.value)&&s.value!==";"&&s.type!=="(end)");if(r.contains(u,s.value)){!f.option.inESNext()&&s.value==="of"&&G("W104",s,"for of");if(f.tokens.next.id==="var")rt("var"),f.syntax["var"].fud.call(f.syntax["var"].fud,!0);else if(f.tokens.next.id==="let")rt("let"),n=!0,w["(blockscope)"].stack(),f.syntax.let.fud.call(f.syntax.let.fud,!0);else if(!f.tokens.next.identifier)G("E030",f.tokens.next,f.tokens.next.type),rt();else{switch(w[f.tokens.next.value]){case"unused":w[f.tokens.next.value]="var";break;case"var":break;default:w["(blockscope)"].getlabel(f.tokens.next.value)||K("W088",f.tokens.next,f.tokens.next.value)}rt()}rt(s.value),ot(20),rt(")",t),e=Ft(!0,!0),f.option.forin&&e&&(e.length>1||typeof e[0]!="object"||e[0].value!=="if")&&K("W089",this),w["(breakage)"]-=1,w["(loopage)"]-=1}else{i&&G("E045",i);if(f.tokens.next.id!==";")if(f.tokens.next.id==="var")rt("var"),f.syntax["var"].fud.call(f.syntax["var"].fud);else if(f.tokens.next.id==="let")rt("let"),n=!0,w["(blockscope)"].stack(),f.syntax.let.fud.call(f.syntax.let.fud);else for(;;){ot(0,"for");if(f.tokens.next.id!==",")break;lt()}at(f.tokens.curr),rt(";"),f.tokens.next.id!==";"&&Gt(ot(0)),at(f.tokens.curr),rt(";"),f.tokens.next.id===";"&&G("E021",f.tokens.next,")",";");if(f.tokens.next.id!==")")for(;;){ot(0,"for");if(f.tokens.next.id!==",")break;lt()}rt(")",t),Ft(!0,!0),w["(breakage)"]-=1,w["(loopage)"]-=1}return n&&w["(blockscope)"].unstack(),this}).labelled=!0,pt("break",function(){var e=f.tokens.next.value;return w["(breakage)"]===0&&K("W052",f.tokens.next,this.value),f.option.asi||at(this),f.tokens.next.id!==";"&&!f.tokens.next.reach&&f.tokens.curr.line===f.tokens.next.line&&(w[e]!=="label"?K("W090",f.tokens.next,e):D[e]!==w&&K("W091",f.tokens.next,e),this.first=f.tokens.next,rt()),Dt("break"),this}).exps=!0,pt("continue",function(){var e=f.tokens.next.value;return w["(breakage)"]===0&&K("W052",f.tokens.next,this.value),f.option.asi||at(this),f.tokens.next.id!==";"&&!f.tokens.next.reach?f.tokens.curr.line===f.tokens.next.line&&(w[e]!=="label"?K("W090",f.tokens.next,e):D[e]!==w&&K("W091",f.tokens.next,e),this.first=f.tokens.next,rt()):w["(loopage)"]||K("W052",f.tokens.next,this.value),Dt("continue"),this}).exps=!0,pt("return",function(){return this.line===f.tokens.next.line?f.tokens.next.id!==";"&&!f.tokens.next.reach&&(this.first=ot(0),this.first&&this.first.type==="(punctuator)"&&this.first.value==="="&&!this.first.paren&&!f.option.boss&&Q("W093",this.first.line,this.first.character)):f.tokens.next.type==="(punctuator)"&&["[","{","+","-"].indexOf(f.tokens.next.value)>-1&&at(this),Dt("return"),this}).exps=!0,function(e){e.exps=!0,e.lbp=25}(mt("yield",function(){var e=f.tokens.prev;return f.option.inESNext(!0)&&!w["(generator)"]?("(catch)"!==w["(name)"]||!w["(context)"]["(generator)"])&&G("E046",f.tokens.curr,"yield"):f.option.inESNext()||K("W104",f.tokens.curr,"yield"),w["(generator)"]="yielded",this.line===f.tokens.next.line||!f.option.inMoz(!0)?(f.tokens.next.id!==";"&&!f.tokens.next.reach&&f.tokens.next.nud&&(ut(f.tokens.curr,f.tokens.next),this.first=ot(10),this.first.type==="(punctuator)"&&this.first.value==="="&&!this.first.paren&&!f.option.boss&&Q("W093",this.first.line,this.first.character)),f.option.inMoz(!0)&&f.tokens.next.id!==")"&&(e.lbp>30||!e.assign&&!st()||e.id==="yield")&&G("E050",this)):f.option.asi||at(this),this})),pt("throw",function(){return at(this),this.first=ot(20),Dt("throw"),this}).exps=!0,pt("import",function(){f.option.inESNext()||K("W119",f.tokens.curr,"import");if(f.tokens.next.type==="(string)")return rt("(string)"),this;if(f.tokens.next.identifier)this.name=_t(),et(this.name,{type:"unused",token:f.tokens.curr});else{rt("{");for(;;){if(f.tokens.next.value==="}"){rt("}");break}var e;f.tokens.next.type==="default"?(e="default",rt("default")):e=_t(),f.tokens.next.value==="as"&&(rt("as"),e=_t()),et(e,{type:"unused",token:f.tokens.curr});if(f.tokens.next.value!==","){if(f.tokens.next.value==="}"){rt("}");break}G("E024",f.tokens.next,f.tokens.next.value);break}rt(",")}}return rt("from"),rt("(string)"),this}).exps=!0,pt("export",function(){f.option.inESNext()||K("W119",f.tokens.curr,"export");if(f.tokens.next.type==="default"){rt("default");if(f.tokens.next.id==="function"||f.tokens.next.id==="class")this.block=!0;return this.exportee=ot(10),this}if(f.tokens.next.value==="{"){rt("{");for(;;){y[_t()]=!0;if(f.tokens.next.value!==","){if(f.tokens.next.value==="}"){rt("}");break}G("E024",f.tokens.next,f.tokens.next.value);break}rt(",")}return this}return f.tokens.next.id==="var"?(rt("var"),y[f.tokens.next.value]=!0,f.syntax["var"].fud.call(f.syntax["var"].fud)):f.tokens.next.id==="let"?(rt("let"),y[f.tokens.next.value]=!0,f.syntax.let.fud.call(f.syntax.let.fud)):f.tokens.next.id==="const"?(rt("const"),y[f.tokens.next.value]=!0,f.syntax["const"].fud.call(f.syntax["const"].fud)):f.tokens.next.id==="function"?(this.block=!0,rt("function"),y[f.tokens.next.value]=!0,f.syntax["function"].fud()):f.tokens.next.id==="class"?(this.block=!0,rt("class"),y[f.tokens.next.value]=!0,f.syntax["class"].fud()):G("E024",f.tokens.next,f.tokens.next.value),this}).exps=!0,bt("abstract"),bt("boolean"),bt("byte"),bt("char"),bt("class",{es5:!0,nud:rn}),bt("double"),bt("enum",{es5:!0}),bt("export",{es5:!0}),bt("extends",{es5:!0}),bt("final"),bt("float"),bt("goto"),bt("implements",{es5:!0,strictOnly:!0}),bt("import",{es5:!0}),bt("int"),bt("interface",{es5:!0,strictOnly:!0}),bt("long"),bt("native"),bt("package",{es5:!0,strictOnly:!0}),bt("private",{es5:!0,strictOnly:!0}),bt("protected",{es5:!0,strictOnly:!0}),bt("public",{es5:!0,strictOnly:!0}),bt("short"),bt("static",{es5:!0,strictOnly:!0}),bt("super",{es5:!0}),bt("synchronized"),bt("transient"),bt("volatile");var on=function(){var e,t,n=-1,i=0,s={};r.contains(["[","{"],f.tokens.curr.value)&&(i+=1);do{e=n===-1?f.tokens.next:nt(n),t=nt(n+1),n+=1,r.contains(["[","{"],e.value)?i+=1:r.contains(["]","}"],e.value)&&(i-=1);if(e.identifier&&e.value==="for"&&i===1){s.isCompArray=!0,s.notJson=!0;break}if(r.contains(["}","]"],e.value)&&t.value==="="&&i===0){s.isDestAssign=!0,s.notJson=!0;break}e.value===";"&&(s.isBlock=!0,s.notJson=!0)}while(i>0&&e.id!=="(end)"&&n<15);return s},an=function(){function i(e){var t=n.variables.filter(function(t){if(t.value===e)return t.undef=!1,e}).length;return t!==0}function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.undef)return t.unused===!0&&(t.unused=!1),e}).length;return t===0}var e=function(){this.mode="use",this.variables=[]},t=[],n;return{stack:function(){n=new e,t.push(n)},unstack:function(){n.variables.filter(function(e){e.unused&&K("W098",e.token,e.value),e.undef&&$(e.funct,"W117",e.token,e.value)}),t.splice(-1,1),n=t[t.length-1]},setState:function(e){r.contains(["use","define","generate","filter"],e)&&(n.mode=e)},check:function(e){if(!n)return;return n&&n.mode==="use"?(s(e)&&n.variables.push({funct:w,token:f.tokens.curr,value:e,undef:!0,unused:!1}),!0):n&&n.mode==="define"?(i(e)||n.variables.push({funct:w,token:f.tokens.curr,value:e,undef:!1,unused:!0}),!0):n&&n.mode==="generate"?($(w,"W117",f.tokens.curr,e),!0):n&&n.mode==="filter"?(s(e)&&$(w,"W117",f.tokens.curr,e),!0):!1}}},ln=function(){function n(){for(var t in e)if(e[t]["(type)"]==="unused"&&f.option.unused){var n=e[t]["(token)"],r=n.line,i=n.character;Q("W098",r,i,t)}}var e={},t=[e];return{stack:function(){e={},t.push(e)},unstack:function(){n(),t.splice(t.length-1,1),e=r.last(t)},getlabel:function(e){for(var n=t.length-1;n>=0;--n)if(r.has(t[n],e)&&!t[n][e]["(shadowed)"])return t[n]},shadow:function(e){for(var n=t.length-1;n>=0;n--)r.has(t[n],e)&&(t[n][e]["(shadowed)"]=!0)},unshadow:function(e){for(var n=t.length-1;n>=0;n--)r.has(t[n],e)&&(t[n][e]["(shadowed)"]=!1)},current:{has:function(t){return r.has(e,t)},add:function(t,n,r){e[t]={"(type)":n,"(token)":r,"(shadowed)":!1}}}}},cn=function(e,n,i){function v(e,t){if(!e)return;!Array.isArray(e)&&typeof e=="object"&&(e=Object.keys(e)),e.forEach(t)}var o,a,l,h,p={},d={};n=r.clone(n),f.reset(),n&&n.scope?c.scope=n.scope:(c.errors=[],c.undefs=[],c.internals=[],c.blacklist={},c.scope="(main)"),M=Object.create(null),W(M,s.ecmaIdentifiers),W(M,s.reservedVars),W(M,i||{}),g=Object.create(null),y=Object.create(null);if(n){v(n.predef||null,function(e){var t,r;e[0]==="-"?(t=e.slice(1),c.blacklist[t]=t):(r=Object.getOwnPropertyDescriptor(n.predef,e),M[e]=r?r.value:!1)}),v(n.exported||null,function(e){y[e]=!0}),delete n.predef,delete n.exported,h=Object.keys(n);for(l=0;l0&&(e.implieds=t),B.length>0&&(e.urls=B),l=Object.keys(D),l.length>0&&(e.globals=l);for(o=1;o0&&(e.unused=H),n=[];for(a in L)if(typeof L[a]=="number"){e.member=L;break}return e},cn.jshint=cn,cn}();typeof n=="object"&&n&&(n.JSHINT=c)},{"./lex.js":4,"./messages.js":5,"./reg.js":6,"./state.js":7,"./style.js":8,"./vars.js":9,events:10,underscore:2}],4:[function(e,t,n){"use strict";function c(){var e=[];return{push:function(t){e.push(t)},check:function(){for(var t=0;t"&&t===">"&&n===">"&&r==="="?{type:l.Punctuator,value:">>>="}:e==="="&&t==="="&&n==="="?{type:l.Punctuator,value:"==="}:e==="!"&&t==="="&&n==="="?{type:l.Punctuator,value:"!=="}:e===">"&&t===">"&&n===">"?{type:l.Punctuator,value:">>>"}:e==="<"&&t==="<"&&n==="="?{type:l.Punctuator,value:"<<="}:e===">"&&t===">"&&n==="="?{type:l.Punctuator,value:">>="}:e==="="&&t===">"?{type:l.Punctuator,value:e+t}:e===t&&"+-<>&|".indexOf(e)>=0?{type:l.Punctuator,value:e+t}:"<>=!+-*%&|^".indexOf(e)>=0?t==="="?{type:l.Punctuator,value:e+t}:{type:l.Punctuator,value:e}:e==="/"?t==="="&&/\/=(?!(\S*\/[gim]?))/.test(this.input)?{type:l.Punctuator,value:"/="}:{type:l.Punctuator,value:"/"}:null},scanComments:function(){function s(e,t,n){var r=["jshint","jslint","members","member","globals","global","exported"],i=!1,s=e+t,o="plain";return n=n||{},n.isMultiline&&(s+="*/"),r.forEach(function(n){if(i)return;if(e==="//"&&n!=="jshint")return;t.substr(0,n.length)===n&&(i=!0,e+=n,t=t.substr(n.length)),!i&&t.charAt(0)===" "&&t.substr(1,n.length)===n&&(i=!0,e=e+" "+n,t=t.substr(n.length+1));if(!i)return;switch(n){case"member":o="members";break;case"global":o="globals";break;default:o=n}}),{type:l.Comment,commentType:o,value:s,body:t,isSpecial:i,isMultiline:n.isMultiline||!1,isMalformed:n.isMalformed||!1}}var e=this.peek(),t=this.peek(1),n=this.input.substr(2),r=this.line,i=this.char;if(e==="*"&&t==="/")return this.trigger("error",{code:"E018",line:r,character:i}),this.skip(2),null;if(e!=="/"||t!=="*"&&t!=="/")return null;if(t==="/")return this.skip(this.input.length),s("//",n);var o="";if(t==="*"){this.inComment=!0,this.skip(2);while(this.peek()!=="*"||this.peek(1)!=="/")if(this.peek()===""){o+="\n";if(!this.nextLine())return this.trigger("error",{code:"E017",line:r,character:i}),this.inComment=!1,s("/*",o,{isMultiline:!0,isMalformed:!0})}else o+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,s("/*",o,{isMultiline:!0})}},scanKeyword:function(){var e=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),t=["if","in","do","var","for","new","try","let","this","else","case","void","with","enum","while","break","catch","throw","const","yield","class","super","return","typeof","delete","switch","export","import","default","finally","extends","function","continue","debugger","instanceof"];return e&&t.indexOf(e[0])>=0?{type:l.Keyword,value:e[0]}:null},scanIdentifier:function(){function i(e){return e>256}function s(e){return e>256}function o(e){return/^[0-9a-fA-F]$/.test(e)}var e="",t=0,n,r,u=function(){t+=1;if(this.peek(t)!=="u")return null;var e=this.peek(t+1),n=this.peek(t+2),r=this.peek(t+3),i=this.peek(t+4),u;return o(e)&&o(n)&&o(r)&&o(i)?(u=parseInt(e+n+r+i,16),f[u]||s(u)?(t+=5,"\\u"+e+n+r+i):null):null}.bind(this),c=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?a[n]?(t+=1,e):null:i(n)?(t+=1,e):null}.bind(this),h=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?f[n]?(t+=1,e):null:s(n)?(t+=1,e):null}.bind(this);r=c();if(r===null)return null;e=r;for(;;){r=h();if(r===null)break;e+=r}switch(e){case"true":case"false":n=l.BooleanLiteral;break;case"null":n=l.NullLiteral;break;default:n=l.Identifier}return{type:n,value:e}},scanNumericLiteral:function(){function s(e){return/^[0-9]$/.test(e)}function o(e){return/^[0-7]$/.test(e)}function u(e){return/^[0-9a-fA-F]$/.test(e)}function a(e){return e==="$"||e==="_"||e==="\\"||e>="a"&&e<="z"||e>="A"&&e<="Z"}var e=0,t="",n=this.input.length,r=this.peek(e),i;if(r!=="."&&!s(r))return null;if(r!=="."){t=this.peek(e),e+=1,r=this.peek(e);if(t==="0"){if(r==="x"||r==="X"){e+=1,t+=r;while(e"]});if(u==="\\"){this.skip(),u=this.peek();switch(u){case"'":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\'"]},e,function(){return o.jsonMode});break;case"b":u="\\b";break;case"f":u="\\f";break;case"n":u="\\n";break;case"r":u="\\r";break;case"t":u="\\t";break;case"0":u="\\0";var f=parseInt(this.peek(1),10);this.triggerAsync("warning",{code:"W115",line:this.line,character:this.char},e,function(){return f>=0&&f<=7&&o.directive["use strict"]});break;case"u":u=String.fromCharCode(parseInt(this.input.substr(1,4),16)),a=5;break;case"v":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\v"]},e,function(){return o.jsonMode}),u=" ";break;case"x":var c=parseInt(this.input.substr(1,2),16);this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\x-"]},e,function(){return o.jsonMode}),u=String.fromCharCode(c),a=3;break;case"\\":u="\\\\";break;case'"':u='\\"';break;case"/":break;case"":s=!0,u="";break;case"!":if(n.slice(n.length-2)==="<")break;default:this.trigger("warning",{code:"W044",line:this.line,character:this.char})}}n+=u,this.skip(a)}return this.skip(),{type:l.StringLiteral,value:n,isUnclosed:!1,quote:t}},scanRegExp:function(){var e=0,t=this.input.length,n=this.peek(),r=n,i="",s=[],o=!1,u=!1,a,f=function(){n<" "&&(o=!0,this.trigger("warning",{code:"W048",line:this.line,character:this.char})),n==="<"&&(o=!0,this.trigger("warning",{code:"W049",line:this.line,character:this.char,data:[n]}))}.bind(this);if(!this.prereg||n!=="/")return null;e+=1,a=!1;while(e=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var t=this.input.trim(),n=function(){return r.some(arguments,function(e){return t.indexOf(e)===0})},i=function(){return r.some(arguments,function(e){return t.indexOf(e,t.length-e.length)!==-1})};o.ignoreLinterErrors===!0&&!n("/*","//")&&!i("*/")&&(this.input=""),e=this.scanNonBreakingSpaces(),e>=0&&this.trigger("warning",{code:"W125",line:this.line,character:e+1}),this.input=this.input.replace(/\t/g,o.tab),e=this.scanUnsafeChars(),e>=0&&this.trigger("warning",{code:"W100",line:this.line,character:e});if(o.option.maxlen&&o.option.maxlen-1&&!n.name.match(/^[A-Z0-9_]*$/)&&e.warn("W106",{line:n.line,"char":n.from,data:[n.name]})}),e.on("String",function(n){var r=e.getOption("quotmark"),i;if(!r)return;r==="single"&&n.quote!=="'"&&(i="W109"),r==="double"&&n.quote!=='"'&&(i="W108"),r===!0&&(e.getCache("quotmark")||e.setCache("quotmark",n.quote),e.getCache("quotmark")!==n.quote&&(i="W110")),i&&e.warn(i,{line:n.line,"char":n.char})}),e.on("Number",function(n){n.value.charAt(0)==="."&&e.warn("W008",{line:n.line,"char":n.char,data:[n.value]}),n.value.substr(n.value.length-1)==="."&&e.warn("W047",{line:n.line,"char":n.char,data:[n.value]}),/^00+/.test(n.value)&&e.warn("W046",{line:n.line,"char":n.char,data:[n.value]})}),e.on("String",function(n){var r=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i;if(e.getOption("scripturl"))return;r.test(n.value)&&e.warn("W107",{line:n.line,"char":n.char})})}},{}],9:[function(e,t,n){"use strict";n.reservedVars={arguments:!1,NaN:!1},n.ecmaIdentifiers={Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,JSON:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},n.newEcmaIdentifiers={Set:!1,Map:!1,WeakMap:!1,WeakSet:!1,Proxy:!1,Promise:!1},n.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,document:!1,Element:!1,ElementTimeControl:!1,event:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,print:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,TimeEvent:!1,top:!1,URL:!1,WebSocket:!1,window:!1,Worker:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},n.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},n.worker={importScripts:!0,postMessage:!0,self:!0},n.nonstandard={escape:!1,unescape:!1},n.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},n.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,require:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},n.phantom={phantom:!0,require:!0,WebPage:!0,console:!0,exports:!0},n.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,"throws":!1},n.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},n.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},n.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},n.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},n.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},n.jquery={$:!1,jQuery:!1},n.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},n.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},n.yui={YUI:!1,Y:!1,YUI_config:!1},n.mocha={describe:!1,it:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1},n.jasmine={jasmine:!1,describe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1}},{}],10:[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e=="function"}function s(e){return typeof e=="number"}function o(e){return typeof e=="object"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e==="error")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified "error" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError("listener must be a function");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t==="removeListener")continue;this.removeAllListeners(t)}return this.removeAllListeners("removeListener"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}]},{},[3])(3)}),ace.define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"],function(require,exports,module){"use strict";function startRegex(e){return RegExp("^("+e.join("|")+")")}var oop=require("../lib/oop"),Mirror=require("../worker/mirror").Mirror,lint=require("./javascript/jshint").JSHINT,disabledWarningsRe=startRegex(["Bad for in variable '(.+)'.",'Missing "use strict"']),errorsRe=startRegex(["Unexpected","Expected ","Confusing (plus|minus)","\\{a\\} unterminated regular expression","Unclosed ","Unmatched ","Unbegun comment","Bad invocation","Missing space after","Missing operator at"]),infoRe=startRegex(["Expected an assignment","Bad escapement of EOL","Unexpected comma","Unexpected space","Missing radix parameter.","A leading decimal point can","\\['{a}'\\] is better written in dot notation.","'{a}' used out of scope"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval("throw 0;"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\n/,"\n");if(!e){this.sender.emit("jslint",[]);return}var t=[],n=this.isValidJS(e)?"warning":"error";lint(e,this.options);var r=lint.errors,i=!1;for(var s=0;s0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n= 15) { presto = false; webkit = true; } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || (ie && !ie_upto8); + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // EDITOR CONSTRUCTOR + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options || {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + setGuttersForLineNumbers(options); + + var doc = options.value; + if (typeof doc == "string") doc = new Doc(doc, options.mode); + this.doc = doc; + + var display = this.display = new Display(place, doc); + display.wrapper.CodeMirror = this; + updateGutters(this); + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + if (options.autofocus && !mobile) focusInput(this); + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput + draggingText: false, + highlight: new Delayed() // stores highlight worker timeout + }; + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie_upto10) setTimeout(bind(resetInput, this, true), 20); + + registerEventHandlers(this); + + var cm = this; + runInOp(this, function() { + cm.curOp.forceUpdate = true; + attachDoc(cm, doc); + + if ((options.autofocus && !mobile) || activeElt() == display.input) + setTimeout(bind(onFocus, cm), 20); + else + onBlur(cm); + + for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) + optionHandlers[opt](cm, options[opt], Init); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](cm); + }); + } + + // DISPLAY CONSTRUCTOR + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc) { + var d = this; + + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) input.style.width = "1000px"; + else input.setAttribute("wrap", "off"); + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) input.style.border = "1px solid black"; + input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false"); + + // Wraps and hides input textarea + d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The fake scrollbar elements. + d.scrollbarH = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + d.scrollbarV = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = elt("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV, + d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie_upto7) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + // Needed to hide big blue blinking cursor on Mobile Safari + if (ios) input.style.width = "0px"; + if (!webkit) d.scroller.draggable = true; + // Needed to handle Tab key in KHTML + if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie_upto7) d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = "18px"; + + if (place.appendChild) place.appendChild(d.wrapper); + else place(d.wrapper); + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + // Information about the rendered lines. + d.view = []; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastSizeC = 0; + d.updateLineNumbers = null; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // See readInput and resetInput + d.prevInput = ""; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + d.pollingFast = false; + // Self-resetting timeout for the poller + d.poll = new Delayed(); + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks when resetInput has punted to just putting a short + // string into the textarea instead of the full selection. + d.inaccurateSelection = false; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + + function resetModeState(cm) { + cm.doc.iter(function(line) { + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + }); + cm.doc.frontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) regChange(cm); + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm);}, 100); + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function(line) { + if (lineIsHidden(cm.doc, line)) return 0; + + var widgetsHeight = 0; + if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; + } + + if (wrapping) + return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; + else + return widgetsHeight + th; + }; + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function(line) { + var estHeight = est(line); + if (estHeight != line.height) updateLineHeight(line, estHeight); + }); + } + + function keyMapChanged(cm) { + var map = keyMap[cm.options.keyMap], style = map.style; + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + setTimeout(function(){alignHorizontally(cm);}, 20); + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + updateGutterSpace(cm); + } + + function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth; + cm.display.sizer.style.marginLeft = width + "px"; + cm.display.scrollbarH.style.left = cm.options.fixedGutter ? width + "px" : 0; + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(0, true); + len -= cur.text.length - found.from.ch; + cur = found.to.line; + len += cur.text.length - found.to.ch; + } + return len; + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function(line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers"); + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0); + options.gutters.splice(found, 1); + } + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var scroll = cm.display.scroller; + return { + clientHeight: scroll.clientHeight, + barHeight: cm.display.scrollbarV.clientHeight, + scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth, + barWidth: cm.display.scrollbarH.clientWidth, + docHeight: Math.round(cm.doc.height + paddingVert(cm.display)) + }; + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbars(cm, measure) { + if (!measure) measure = measureForScrollbars(cm); + var d = cm.display; + var scrollHeight = measure.docHeight + scrollerCutOff; + var needsH = measure.scrollWidth > measure.clientWidth; + var needsV = scrollHeight > measure.clientHeight; + if (needsV) { + d.scrollbarV.style.display = "block"; + d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0"; + // A bug in IE8 can cause this value to be negative, so guard it. + d.scrollbarV.firstChild.style.height = + Math.max(0, scrollHeight - measure.clientHeight + (measure.barHeight || d.scrollbarV.clientHeight)) + "px"; + } else { + d.scrollbarV.style.display = ""; + d.scrollbarV.firstChild.style.height = "0"; + } + if (needsH) { + d.scrollbarH.style.display = "block"; + d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarH.firstChild.style.width = + (measure.scrollWidth - measure.clientWidth + (measure.barWidth || d.scrollbarH.clientWidth)) + "px"; + } else { + d.scrollbarH.style.display = ""; + d.scrollbarH.firstChild.style.width = "0"; + } + if (needsH && needsV) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px"; + } else d.scrollbarFiller.style.display = ""; + if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px"; + d.gutterFiller.style.width = d.gutters.offsetWidth + "px"; + } else d.gutterFiller.style.display = ""; + + if (!cm.state.checkedOverlayScrollbar && measure.clientHeight > 0) { + if (scrollbarWidth(d.measure) === 0) { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = w; + var barMouseDown = function(e) { + if (e_target(e) != d.scrollbarV && e_target(e) != d.scrollbarH) + operation(cm, onMouseDown)(e); + }; + on(d.scrollbarV, "mousedown", barMouseDown); + on(d.scrollbarH, "mousedown", barMouseDown); + } + cm.state.checkedOverlayScrollbar = true; + } + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewPort may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewPort) { + var top = viewPort && viewPort.top != null ? viewPort.top : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewPort && viewPort.bottom != null ? viewPort.bottom : top + display.wrapper.clientHeight; + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewPort && viewPort.ensure) { + var ensureFrom = viewPort.ensure.from.line, ensureTo = viewPort.ensure.to.line; + if (ensureFrom < from) + return {from: ensureFrom, + to: lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)}; + if (Math.min(ensureTo, doc.lastLine()) >= to) + return {from: lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight), + to: ensureTo}; + } + return {from: from, to: to}; + } + + // LINE NUMBERS + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, left = comp + "px"; + for (var i = 0; i < view.length; i++) if (!view[i].hidden) { + if (cm.options.fixedGutter && view[i].gutter) + view[i].gutter.style.left = left; + var align = view[i].alignable; + if (align) for (var j = 0; j < align.length; j++) + align[j].style.left = left; + } + if (cm.options.fixedGutter) + display.gutters.style.left = (comp + gutterW) + "px"; + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm); + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // DISPLAY DRAWING + + // Updates the display, selection, and scrollbars, using the + // information in display.view to find out which nodes are no longer + // up-to-date. Tries to bail out early when no changes are needed, + // unless forced is true. + // Returns true if an actual update happened, false otherwise. + function updateDisplay(cm, viewPort, forced) { + var oldFrom = cm.display.viewFrom, oldTo = cm.display.viewTo, updated; + var visible = visibleLines(cm.display, cm.doc, viewPort); + for (var first = true;; first = false) { + var oldWidth = cm.display.scroller.clientWidth; + if (!updateDisplayInner(cm, visible, forced)) break; + updated = true; + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + if (cm.display.maxLineChanged && !cm.options.lineWrapping) + adjustContentWidth(cm); + + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + setDocumentHeight(cm, barMeasure); + updateScrollbars(cm, barMeasure); + if (webkit && cm.options.lineWrapping) + checkForWebkitWidthBug(cm, barMeasure); // (Issue #2420) + if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) { + forced = true; + continue; + } + forced = false; + + // Clip forced viewport to actual scrollable area. + if (viewPort && viewPort.top != null) + viewPort = {top: Math.min(barMeasure.docHeight - scrollerCutOff - barMeasure.clientHeight, viewPort.top)}; + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + visible = visibleLines(cm.display, cm.doc, viewPort); + if (visible.from >= cm.display.viewFrom && visible.to <= cm.display.viewTo) + break; + } + + cm.display.updateLineNumbers = null; + if (updated) { + signalLater(cm, "update", cm); + if (cm.display.viewFrom != oldFrom || cm.display.viewTo != oldTo) + signalLater(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + } + return updated; + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayInner(cm, visible, forced) { + var display = cm.display, doc = cm.doc; + if (!display.wrapper.offsetWidth) { + resetView(cm); + return; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!forced && visible.from >= display.viewFrom && visible.to <= display.viewTo && + countDirtyView(cm) == 0) + return; + + if (maybeUpdateLineNumberWidth(cm)) + resetView(cm); + var dims = getDimensions(cm); + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); + if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastSizeC != display.wrapper.clientHeight; + adjustView(cm, from, to); + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !forced) return; + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var focused = activeElt(); + if (toUpdate > 4) display.lineDiv.style.display = "none"; + patchDisplay(cm, display.updateLineNumbers, dims); + if (toUpdate > 4) display.lineDiv.style.display = ""; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); + + // Prevent selection and cursors from interfering with the scroll + // width. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + + if (different) { + display.lastSizeC = display.wrapper.clientHeight; + startWorker(cm, 400); + } + + updateHeightsInViewport(cm); + + return true; + } + + function adjustContentWidth(cm) { + var display = cm.display; + var width = measureChar(cm, display.maxLine, display.maxLine.text.length).left; + display.maxLineChanged = false; + var minWidth = Math.max(0, width + 3); + var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + minWidth + scrollerCutOff - display.scroller.clientWidth); + display.sizer.style.minWidth = minWidth + "px"; + if (maxScrollLeft < cm.doc.scrollLeft) + setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true); + } + + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = Math.max(measure.docHeight, measure.clientHeight - scrollerCutOff) + "px"; + } + + + function checkForWebkitWidthBug(cm, measure) { + // Work around Webkit bug where it sometimes reserves space for a + // non-existing phantom scrollbar in the scroller (Issue #2420) + if (cm.display.sizer.offsetWidth + cm.display.gutters.offsetWidth < cm.display.scroller.clientWidth - 1) { + cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = "0px"; + cm.display.gutters.style.height = measure.docHeight + "px"; + } + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height; + if (cur.hidden) continue; + if (ie_upto7) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + } + var diff = cur.line.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) { + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) for (var j = 0; j < cur.rest.length; j++) + updateWidgetHeight(cur.rest[j]); + } + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) + line.widgets[i].height = line.widgets[i].node.offsetHeight; + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft; + width[cm.options.gutters[i]] = n.offsetWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + node.style.display = "none"; + else + node.parentNode.removeChild(node); + return next; + } + + var view = display.view, lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) { + } else if (!lineView.node) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { // Already drawn + while (cur != lineView.node) cur = rm(cur); + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) cur = rm(cur); + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") updateLineText(cm, lineView); + else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); + else if (type == "class") updateLineClasses(lineView); + else if (type == "widget") updateLineWidgets(lineView, dims); + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) + lineView.text.parentNode.replaceChild(lineView.node, lineView.text); + lineView.node.appendChild(lineView.text); + if (ie_upto7) lineView.node.style.zIndex = 2; + } + return lineView.node; + } + + function updateLineBackground(lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) cls += " CodeMirror-linebackground"; + if (lineView.background) { + if (cls) lineView.background.className = cls; + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built; + } + return buildLineContent(cm, lineView); + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) lineView.node = built.pre; + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + + function updateLineClasses(lineView) { + updateLineBackground(lineView); + if (lineView.line.wrapClass) + ensureLineWrapped(lineView).className = lineView.line.wrapClass; + else if (lineView.node != lineView.text) + lineView.node.className = ""; + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = + wrap.insertBefore(elt("div", null, "CodeMirror-gutter-wrapper", "position: absolute; left: " + + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"), + lineView.text); + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + cm.display.lineNumInnerWidth + "px")); + if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + } + + function updateLineWidgets(lineView, dims) { + if (lineView.alignable) lineView.alignable = null; + for (var node = lineView.node.firstChild, next; node; node = next) { + var next = node.nextSibling; + if (node.className == "CodeMirror-linewidget") + lineView.node.removeChild(node); + } + insertLineWidgets(lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) lineView.bgClass = built.bgClass; + if (built.textClass) lineView.textClass = built.textClass; + + updateLineClasses(lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(lineView, dims); + return lineView.node; + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(lineView, dims) { + insertLineWidgetsFor(lineView.line, lineView, dims, true); + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + insertLineWidgetsFor(lineView.rest[i], lineView, dims, false); + } + + function insertLineWidgetsFor(line, lineView, dims, allowAbove) { + if (!line.widgets) return; + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + if (!widget.handleMouseEvents) node.ignoreEvents = true; + positionLineWidget(widget, node, lineView, dims); + if (allowAbove && widget.above) + wrap.insertBefore(node, lineView.gutter || lineView.text); + else + wrap.appendChild(node); + signalLater(widget, "redraw"); + } + } + + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + + // POSITION OBJECT + + // A Pos instance represents a position within the text. + var Pos = CodeMirror.Pos = function(line, ch) { + if (!(this instanceof Pos)) return new Pos(line, ch); + this.line = line; this.ch = ch; + }; + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; + + function copyPos(x) {return Pos(x.line, x.ch);} + function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } + function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } + + // SELECTION / CURSOR + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + function Selection(ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + } + + Selection.prototype = { + primary: function() { return this.ranges[this.primIndex]; }, + equals: function(other) { + if (other == this) return true; + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], there = other.ranges[i]; + if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; + } + return true; + }, + deepCopy: function() { + for (var out = [], i = 0; i < this.ranges.length; i++) + out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); + return new Selection(out, this.primIndex); + }, + somethingSelected: function() { + for (var i = 0; i < this.ranges.length; i++) + if (!this.ranges[i].empty()) return true; + return false; + }, + contains: function(pos, end) { + if (!end) end = pos; + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + return i; + } + return -1; + } + }; + + function Range(anchor, head) { + this.anchor = anchor; this.head = head; + } + + Range.prototype = { + from: function() { return minPos(this.anchor, this.head); }, + to: function() { return maxPos(this.anchor, this.head); }, + empty: function() { + return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; + } + }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex]; + ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1]; + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) --primIndex; + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex); + } + + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0); + } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} + function clipPos(doc, pos) { + if (pos.line < doc.first) return Pos(doc.first, 0); + var last = doc.first + doc.size - 1; + if (pos.line > last) return Pos(last, getLine(doc, last).text.length); + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) return Pos(pos.line, linelen); + else if (ch < 0) return Pos(pos.line, 0); + else return pos; + } + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} + function clipPosArray(doc, array) { + for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); + return out; + } + + // SELECTION UPDATES + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(doc, range, head, other) { + if (doc.cm && doc.cm.display.shift || doc.extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head; + head = other; + } else if (posBefore != (cmp(head, other) < 0)) { + head = other; + } + } + return new Range(anchor, head); + } else { + return new Range(other || head, head); + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options) { + setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + for (var out = [], i = 0; i < doc.sel.ranges.length; i++) + out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); + var newSel = normalizeSelection(out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) + this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)); + } + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); + else return sel; + } + + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + sel = filterSelectionChange(doc, sel); + + var bias = cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1; + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + + if (!(options && options.scroll === false) && doc.cm) + ensureCursorVisible(doc.cm); + } + + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) return; + + doc.sel = sel; + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) out = sel.ranges.slice(0, i); + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel; + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, bias, mayClear) { + var flipped = false, curPos = pos; + var dir = bias || 1; + doc.cantEdit = false; + search: for (;;) { + var line = getLine(doc, curPos.line); + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) break; + else {--i; continue;} + } + } + if (!m.atomic) continue; + var newPos = m.find(dir < 0 ? -1 : 1); + if (cmp(newPos, curPos) == 0) { + newPos.ch += dir; + if (newPos.ch < 0) { + if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); + else newPos = null; + } else if (newPos.ch > line.text.length) { + if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); + else newPos = null; + } + if (!newPos) { + if (flipped) { + // Driven in a corner -- no valid cursor position found at all + // -- try again *with* clearing, if we didn't already + if (!mayClear) return skipAtomic(doc, pos, bias, true); + // Otherwise, turn off editing until further notice, and return the start of the doc + doc.cantEdit = true; + return Pos(doc.first, 0); + } + flipped = true; newPos = pos; dir = -dir; + } + } + curPos = newPos; + continue search; + } + } + } + return curPos; + } + } + + // SELECTION DRAWING + + // Redraw the selection and/or cursor + function updateSelection(cm) { + var display = cm.display, doc = cm.doc; + var curFragment = document.createDocumentFragment(); + var selFragment = document.createDocumentFragment(); + + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + var collapsed = range.empty(); + if (collapsed || cm.options.showCursorWhenSelecting) + drawSelectionCursor(cm, range, curFragment); + if (!collapsed) + drawSelectionRange(cm, range, selFragment); + } + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); + var top = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)); + var left = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)); + display.inputDiv.style.top = top + "px"; + display.inputDiv.style.left = left + "px"; + } + + removeChildrenAndAdd(display.cursorDiv, curFragment); + removeChildrenAndAdd(display.selectionDiv, selFragment); + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, range, output) { + var pos = cursorCoords(cm, range.head, "div"); + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), leftSide = padding.left, rightSide = display.lineSpace.offsetWidth - padding.right; + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right; + if (from == to) { + rightPos = leftPos; + left = right = leftPos.left; + } else { + rightPos = coords(to - 1, "right"); + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } + left = leftPos.left; + right = rightPos.right; + } + if (fromArg == null && from == 0) left = leftSide; + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = leftSide; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = rightSide; + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + start = leftPos; + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + end = rightPos; + if (left < leftSide + 1) left = leftSide; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return {start: start, end: end}; + } + + var sFrom = range.from(), sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) + add(leftSide, leftEnd.bottom, null, rightStart.top); + } + + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) return; + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) + display.blinker = setInterval(function() { + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.frontier < doc.first) doc.frontier = doc.first; + if (doc.frontier >= cm.display.viewTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); + + runInOp(cm, function() { + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { + if (doc.frontier >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles; + var highlighted = highlightLine(cm, line, state, true); + line.styles = highlighted.styles; + if (highlighted.classes) line.styleClasses = highlighted.classes; + else if (line.styleClasses) line.styleClasses = null; + var ischange = !oldStyles || oldStyles.length != line.styles.length; + for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; + if (ischange) regLineChange(cm, doc.frontier, "text"); + line.stateAfter = copyState(doc.mode, state); + } else { + processLine(cm, line.text, state); + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; + } + ++doc.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + }); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) return doc.first; + var line = getLine(doc, search - 1); + if (line.stateAfter && (!precise || search <= doc.frontier)) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) return true; + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; + if (!state) state = startState(doc.mode); + else state = copyState(doc.mode, state); + doc.iter(pos, n, function(line) { + processLine(cm, line.text, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; + line.stateAfter = save ? copyState(doc.mode, state) : null; + ++pos; + }); + if (precise) doc.frontier = pos; + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} + function paddingH(display) { + if (display.cachedPaddingH) return display.cachedPaddingH; + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; + if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; + return data; + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && cm.display.scroller.clientWidth; + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) + heights.push((cur.bottom + next.top) / 2 - rect.top); + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + return {map: lineView.measure.map, cache: lineView.measure.cache}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineView.rest[i] == line) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; + for (var i = 0; i < lineView.rest.length; i++) + if (lineNo(lineView.rest[i]) > lineN) + return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view; + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + return cm.display.view[findViewIndex(cm, lineN)]; + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + return ext; + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) + view = null; + else if (view && view.changes) + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + if (!view) + view = updateExternalMeasurement(cm, line); + + var info = mapFromLineView(view, line, lineN); + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + }; + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias) { + if (prepared.before) ch = -1; + var key = ch + (bias || ""), found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) + prepared.rect = prepared.view.text.getBoundingClientRect(); + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) prepared.cache[key] = found; + } + return {left: found.left, right: found.right, top: found.top, bottom: found.bottom}; + } + + var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; + + function measureCharInner(cm, prepared, ch, bias) { + var map = prepared.map; + + var node, start, end, collapse; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + var mStart = map[i], mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) collapse = "right"; + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + collapse = bias; + if (bias == "left" && start == 0) + while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } + if (bias == "right" && start == mEnd - mStart) + while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } + break; + } + } + + var rect; + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start; + while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end; + if (ie_upto8 && start == 0 && end == mEnd - mStart) { + rect = node.parentNode.getBoundingClientRect(); + } else if (ie && cm.options.lineWrapping) { + var rects = range(node, start, end).getClientRects(); + if (rects.length) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = nullRect; + } else { + rect = range(node, start, end).getBoundingClientRect(); + } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) collapse = bias = "right"; + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + rect = rects[bias == "right" ? rects.length - 1 : 0]; + else + rect = node.getBoundingClientRect(); + } + if (ie_upto8 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) + rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; + else + rect = nullRect; + } + + var top, bot = (rect.bottom + rect.top) / 2 - prepared.rect.top; + var heights = prepared.view.measure.heights; + for (var i = 0; i < heights.length - 1; i++) + if (bot < heights[i]) break; + top = i ? heights[i - 1] : 0; bot = heights[i]; + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot}; + if (!rect.left && !rect.right) result.bogus = true; + return result; + } + + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) + lineView.measure.caches[i] = {}; + } + } + + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) + clearLineMeasurementCacheFor(cm.display.view[i]); + } + + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; + cm.display.lineNumChars = null; + } + + function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } + function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"/null (editor), or "page". + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]); + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(lineObj); + if (context == "local") yOff += paddingTop(cm.display); + else yOff -= cm.display.viewOffset; + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"/null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") return coords; + var left = coords.left, top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; + } + + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) lineObj = getLine(cm.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left"); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + function getBidi(ch, partPos) { + var part = order[partPos], right = part.level % 2; + if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { + part = order[--partPos]; + ch = bidiRight(part) - (part.level % 2 ? 0 : 1); + right = true; + } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { + part = order[++partPos]; + ch = bidiLeft(part) - part.level % 2; + right = false; + } + if (right && ch == part.to && ch > part.from) return get(ch - 1); + return get(ch, right); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var partPos = getBidiPartAt(order, ch); + var val = getBidi(ch, partPos); + if (bidiOther != null) val.other = getBidi(ch, bidiOther); + return val; + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0, pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return {left: left, right: left, top: top, bottom: top + lineObj.height}; + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, outside, xRel) { + var pos = Pos(line, ch); + pos.xRel = xRel; + if (outside) pos.outside = true; + return pos; + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) return PosWithInfo(doc.first, 0, true, -1); + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineN > last) + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); + if (x < 0) x = 0; + + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var merged = collapsedSpanAtEnd(lineObj); + var mergedPos = merged && merged.find(0, true); + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + lineN = lineNo(lineObj = mergedPos.to.line); + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(lineObj); + var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); + wrongLine = true; + if (innerOff > sp.bottom) return sp.left - adjust; + else if (innerOff < sp.top) return sp.left + adjust; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; + + if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var ch = x < fromX || x - fromX <= toX - x ? from : to; + var xDiff = x - (ch == from ? fromX : toX); + while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; + var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, + xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); + return pos; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} + else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} + } + } + + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + id: ++nextOpId // Unique ID + }; + if (!delayedCallbackDepth++) delayedCallbacks = []; + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp, doc = cm.doc, display = cm.display; + cm.curOp = null; + + if (op.updateMaxLine) findMaxLine(cm); + + // If it looks like an update might be needed, call updateDisplay + if (op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping) { + var updated = updateDisplay(cm, {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); + if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop; + } + // If no update was run, but the selection changed, redraw that. + if (!updated && op.selectionChanged) updateSelection(cm); + if (!updated && op.startHeight != cm.doc.height) updateScrollbars(cm); + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null && display.scroller.scrollTop != op.scrollTop) { + var top = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); + display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = top; + } + if (op.scrollLeft != null && display.scroller.scrollLeft != op.scrollLeft) { + var left = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); + display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = left; + alignHorizontally(cm); + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var coords = scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos.from), + clipPos(cm.doc, op.scrollToPos.to), op.scrollToPos.margin); + if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); + } + + if (op.selectionChanged) restartBlink(cm); + + if (cm.state.focused && op.updateInput) + resetInput(cm, op.typing); + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) for (var i = 0; i < hidden.length; ++i) + if (!hidden[i].lines.length) signal(hidden[i], "hide"); + if (unhidden) for (var i = 0; i < unhidden.length; ++i) + if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); + + var delayed; + if (!--delayedCallbackDepth) { + delayed = delayedCallbacks; + delayedCallbacks = null; + } + // Fire change events, and delayed event handlers + if (op.changeObjs) + signal(cm, "changes", cm, op.changeObjs); + if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i](); + if (op.cursorActivityHandlers) + for (var i = 0; i < op.cursorActivityHandlers.length; i++) + op.cursorActivityHandlers[i](cm); + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) return f(); + startOperation(cm); + try { return f(); } + finally { endOperation(cm); } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function() { + if (cm.curOp) return f.apply(cm, arguments); + startOperation(cm); + try { return f.apply(cm, arguments); } + finally { endOperation(cm); } + }; + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function() { + if (this.curOp) return f.apply(this, arguments); + startOperation(this); + try { return f.apply(this, arguments); } + finally { endOperation(this); } + }; + } + function docMethodOp(f) { + return function() { + var cm = this.cm; + if (!cm || cm.curOp) return f.apply(this, arguments); + startOperation(cm); + try { return f.apply(this, arguments); } + finally { endOperation(cm); } + }; + } + + // VIEW TRACKING + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array; + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) from = cm.doc.first; + if (to == null) to = cm.doc.first + cm.doc.size; + if (!lendiff) lendiff = 0; + + var display = cm.display; + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + display.updateLineNumbers = from; + + cm.curOp.viewChanged = true; + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + resetView(cm); + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut = viewCuttingPoint(cm, from, from, -1); + if (cut) { + display.view = display.view.slice(0, cut.index); + display.viewTo = cut.lineN; + } else { + resetView(cm); + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) + ext.lineN += lendiff; + else if (from < ext.lineN + ext.size) + display.externalMeasured = null; + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + display.externalMeasured = null; + + if (line < display.viewFrom || line >= display.viewTo) return; + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) return; + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) arr.push(type); + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) return null; + n -= cm.display.viewFrom; + if (n < 0) return null; + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) return i; + } + } + + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view; + if (!sawCollapsedSpans) return {index: index, lineN: newN}; + for (var i = 0, n = cm.display.viewFrom; i < index; i++) + n += view[i].size; + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) return null; + diff = (n + view[index].size) - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) return null; + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return {index: index, lineN: newN}; + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) + display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); + else if (display.viewFrom < from) + display.view = display.view.slice(findViewIndex(cm, from)); + display.viewFrom = from; + if (display.viewTo < to) + display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); + else if (display.viewTo > to) + display.view = display.view.slice(0, findViewIndex(cm, to)); + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; + } + return dirty; + } + + // INPUT HANDLING + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + function slowPoll(cm) { + if (cm.display.pollingFast) return; + cm.display.poll.set(cm.options.pollInterval, function() { + readInput(cm); + if (cm.state.focused) slowPoll(cm); + }); + } + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + function fastPoll(cm) { + var missed = false; + cm.display.pollingFast = true; + function p() { + var changed = readInput(cm); + if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);} + else {cm.display.pollingFast = false; slowPoll(cm);} + } + cm.display.poll.set(20, p); + } + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + function readInput(cm) { + var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput) + return false; + // See paste handler for more on the fakedLastChar kludge + if (cm.state.pasteIncoming && cm.state.fakedLastChar) { + input.value = input.value.substring(0, input.value.length - 1); + cm.state.fakedLastChar = false; + } + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) return false; + // Work around nonsensical selection resetting in IE9/10 + if (ie && !ie_upto8 && cm.display.inputHasSelection === text) { + resetInput(cm); + return false; + } + + var withOp = !cm.curOp; + if (withOp) startOperation(cm); + cm.display.shift = false; + + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; + var inserted = text.slice(same), textLines = splitLines(inserted); + + // When pasing N lines into N selections, insert one line per selection + var multiPaste = cm.state.pasteIncoming && textLines.length > 1 && doc.sel.ranges.length == textLines.length; + + // Normal behavior is to insert the new text into every selection + for (var i = doc.sel.ranges.length - 1; i >= 0; i--) { + var range = doc.sel.ranges[i]; + var from = range.from(), to = range.to(); + // Handle deletion + if (same < prevInput.length) + from = Pos(from.line, from.ch - (prevInput.length - same)); + // Handle overwrite + else if (cm.state.overwrite && range.empty() && !cm.state.pasteIncoming) + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); + var updateInput = cm.curOp.updateInput; + var changeEvent = {from: from, to: to, text: multiPaste ? [textLines[i]] : textLines, + origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + // When an 'electric' character is inserted, immediately trigger a reindent + if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && + cm.options.smartIndent && range.head.ch < 100 && + (!i || doc.sel.ranges[i - 1].head.line != range.head.line)) { + var mode = cm.getModeAt(range.head); + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indentLine(cm, range.head.line, "smart"); + break; + } + } else if (mode.electricInput) { + var end = changeEnd(changeEvent); + if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) + indentLine(cm, range.head.line, "smart"); + } + } + } + ensureCursorVisible(cm); + cm.curOp.updateInput = updateInput; + cm.curOp.typing = true; + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = ""; + else cm.display.prevInput = text; + if (withOp) endOperation(cm); + cm.state.pasteIncoming = cm.state.cutIncoming = false; + return true; + } + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + function resetInput(cm, typing) { + var minimal, selected, doc = cm.doc; + if (cm.somethingSelected()) { + cm.display.prevInput = ""; + var range = doc.sel.primary(); + minimal = hasCopyEvent && + (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); + var content = minimal ? "-" : selected || cm.getSelection(); + cm.display.input.value = content; + if (cm.state.focused) selectInput(cm.display.input); + if (ie && !ie_upto8) cm.display.inputHasSelection = content; + } else if (!typing) { + cm.display.prevInput = cm.display.input.value = ""; + if (ie && !ie_upto8) cm.display.inputHasSelection = null; + } + cm.display.inaccurateSelection = minimal; + } + + function focusInput(cm) { + if (cm.options.readOnly != "nocursor" && (!mobile || activeElt() != cm.display.input)) + cm.display.input.focus(); + } + + function ensureFocus(cm) { + if (!cm.state.focused) { focusInput(cm); onFocus(cm); } + } + + function isReadOnly(cm) { + return cm.options.readOnly || cm.doc.cantEdit; + } + + // EVENT HANDLERS + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie_upto10) + on(d.scroller, "dblclick", operation(cm, function(e) { + if (signalDOMEvent(cm, e)) return; + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; + e_preventDefault(e); + var word = findWordAt(cm.doc, pos); + extendSelection(cm.doc, word.anchor, word.head); + })); + else + on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); + // Prevent normal selection in the editor (we handle our own) + on(d.lineSpace, "selectstart", function(e) { + if (!eventInWidget(d, e)) e_preventDefault(e); + }); + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function() { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + on(d.scrollbarV, "scroll", function() { + if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop); + }); + on(d.scrollbarH, "scroll", function() { + if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft); + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + // Prevent clicks in the scrollbars from killing focus + function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); } + on(d.scrollbarH, "mousedown", reFocus); + on(d.scrollbarV, "mousedown", reFocus); + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + // When the window resizes, we need to refresh active editors. + var resizeTimer; + function onResize() { + if (resizeTimer == null) resizeTimer = setTimeout(function() { + resizeTimer = null; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = knownScrollbarWidth = null; + cm.setSize(); + }, 100); + } + on(window, "resize", onResize); + // The above handler holds on to the editor and its data + // structures. Here we poll to unregister it when the editor is no + // longer in the document, so that it can be garbage-collected. + function unregister() { + if (contains(document.body, d.wrapper)) setTimeout(unregister, 5000); + else off(window, "resize", onResize); + } + setTimeout(unregister, 5000); + + on(d.input, "keyup", operation(cm, onKeyUp)); + on(d.input, "input", function() { + if (ie && !ie_upto8 && cm.display.inputHasSelection) cm.display.inputHasSelection = null; + fastPoll(cm); + }); + on(d.input, "keydown", operation(cm, onKeyDown)); + on(d.input, "keypress", operation(cm, onKeyPress)); + on(d.input, "focus", bind(onFocus, cm)); + on(d.input, "blur", bind(onBlur, cm)); + + function drag_(e) { + if (!signalDOMEvent(cm, e)) e_stop(e); + } + if (cm.options.dragDrop) { + on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); + on(d.scroller, "dragenter", drag_); + on(d.scroller, "dragover", drag_); + on(d.scroller, "drop", operation(cm, onDrop)); + } + on(d.scroller, "paste", function(e) { + if (eventInWidget(d, e)) return; + cm.state.pasteIncoming = true; + focusInput(cm); + fastPoll(cm); + }); + on(d.input, "paste", function() { + // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 + // Add a char to the end of textarea before paste occur so that + // selection doesn't span to the end of textarea. + if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { + var start = d.input.selectionStart, end = d.input.selectionEnd; + d.input.value += "$"; + d.input.selectionStart = start; + d.input.selectionEnd = end; + cm.state.fakedLastChar = true; + } + cm.state.pasteIncoming = true; + fastPoll(cm); + }); + + function prepareCopyCut(e) { + if (cm.somethingSelected()) { + if (d.inaccurateSelection) { + d.prevInput = ""; + d.inaccurateSelection = false; + d.input.value = cm.getSelection(); + selectInput(d.input); + } + } else { + var text = "", ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; + ranges.push(lineRange); + text += cm.getRange(lineRange.anchor, lineRange.head); + } + if (e.type == "cut") { + cm.setSelections(ranges, null, sel_dontScroll); + } else { + d.prevInput = ""; + d.input.value = text; + selectInput(d.input); + } + } + if (e.type == "cut") cm.state.cutIncoming = true; + } + on(d.input, "cut", prepareCopyCut); + on(d.input, "copy", prepareCopyCut); + + // Needed to handle Tab key in KHTML + if (khtml) on(d.sizer, "mouseup", function() { + if (activeElt() == d.input) d.input.blur(); + focusInput(cm); + }); + } + + // MOUSE EVENTS + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true; + } + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal) { + var target = e_target(e); + if (target == display.scrollbarH || target == display.scrollbarV || + target == display.scrollbarFiller || target == display.gutterFiller) return null; + } + var x, y, space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top; } + catch (e) { return null; } + var coords = coordsChar(cm, x, y), line; + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords; + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + if (signalDOMEvent(this, e)) return; + var cm = this, display = cm.display; + display.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + window.focus(); + + switch (e_button(e)) { + case 1: + if (start) + leftButtonDown(cm, e, start); + else if (e_target(e) == display.scroller) + e_preventDefault(e); + break; + case 2: + if (webkit) cm.state.lastMiddleDown = +new Date; + if (start) extendSelection(cm.doc, start); + setTimeout(bind(focusInput, cm), 20); + e_preventDefault(e); + break; + case 3: + if (captureRightClick) onContextMenu(cm, e); + break; + } + } + + var lastClick, lastDoubleClick; + function leftButtonDown(cm, e, start) { + setTimeout(bind(ensureFocus, cm), 0); + + var now = +new Date, type; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { + type = "triple"; + } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + } else { + type = "single"; + lastClick = {time: now, pos: start}; + } + + var sel = cm.doc.sel, addNew = mac ? e.metaKey : e.ctrlKey; + if (cm.options.dragDrop && dragAndDrop && !addNew && !isReadOnly(cm) && + type == "single" && sel.contains(start) > -1 && sel.somethingSelected()) + leftButtonStartDrag(cm, e, start); + else + leftButtonSelect(cm, e, start, type, addNew); + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, e, start) { + var display = cm.display; + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + cm.state.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + extendSelection(cm.doc, start); + focusInput(cm); + // Work around unexplainable focus problem in IE9 (#2127) + if (ie_upto10 && !ie_upto8) + setTimeout(function() {document.body.focus(); focusInput(cm);}, 20); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + cm.state.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, e, start, type, addNew) { + var display = cm.display, doc = cm.doc; + e_preventDefault(e); + + var ourRange, ourIndex, startSel = doc.sel; + if (addNew && !e.shiftKey) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) + ourRange = doc.sel.ranges[ourIndex]; + else + ourRange = new Range(start, start); + } else { + ourRange = doc.sel.primary(); + } + + if (e.altKey) { + type = "rect"; + if (!addNew) ourRange = new Range(start, start); + start = posFromMouse(cm, e, true, true); + ourIndex = -1; + } else if (type == "double") { + var word = findWordAt(doc, start); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, word.anchor, word.head); + else + ourRange = word; + } else if (type == "triple") { + var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); + if (cm.display.shift || doc.extend) + ourRange = extendRange(doc, ourRange, line.anchor, line.head); + else + ourRange = line; + } else { + ourRange = extendRange(doc, ourRange, start); + } + + if (!addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex > -1) { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } else { + ourIndex = doc.sel.ranges.length; + setSelection(doc, normalizeSelection(doc.sel.ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}); + } + + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) return; + lastPos = pos; + + if (type == "rect") { + var ranges = [], tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); + if (left == right) + ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); + else if (text.length > leftPos) + ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); + } + if (!ranges.length) ranges.push(new Range(start, start)); + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), sel_mouse); + } else { + var oldRange = ourRange; + var anchor = oldRange.anchor, head = pos; + if (type != "single") { + if (type == "double") + var range = findWordAt(doc, pos); + else + var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + } + var ranges = startSel.ranges.slice(0); + ranges[ourIndex] = new Range(clipPos(doc, anchor), head); + setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); + } + } + + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, type == "rect"); + if (!cur) return; + if (cmp(cur, lastPos) != 0) { + ensureFocus(cm); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + counter = Infinity; + e_preventDefault(e); + focusInput(cm); + off(document, "mousemove", move); + off(document, "mouseup", up); + doc.history.lastSelOrigin = null; + } + + var move = operation(cm, function(e) { + if ((ie && !ie_upto9) ? !e.buttons : !e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent, signalfn) { + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; + if (prevent) e_preventDefault(e); + + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + + if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signalfn(cm, type, cm, line, gutter, e); + return e_defaultPrevented(e); + } + } + } + + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true, signalLater); + } + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + + function onDrop(e) { + var cm = this; + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + return; + e_preventDefault(e); + if (ie) lastDrop = +new Date; + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || isReadOnly(cm)) return; + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = operation(cm, function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(cm.doc, pos); + var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); + } + }); + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(bind(focusInput, cm), 20); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + var selected = cm.state.draggingText && cm.listSelections(); + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) for (var i = 0; i < selected.length; ++i) + replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); + cm.replaceSelection(text, "around", "paste"); + focusInput(cm); + } + } + catch(e){} + } + } + + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; + + e.dataTransfer.setData("Text", cm.getSelection()); + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) img.parentNode.removeChild(img); + } + } + + // SCROLL EVENTS + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return; + cm.doc.scrollTop = val; + if (!gecko) updateDisplay(cm, {top: val}); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val; + if (gecko) updateDisplay(cm); + startWorker(cm, 100); + } + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val; + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + function onScrollWheel(cm, e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + if (!(dx && scroll.scrollWidth > scroll.clientWidth || + dy && scroll.scrollHeight > scroll.clientHeight)) return; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer; + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + e_preventDefault(e); + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.doc.height, bot + pixels + 50); + updateDisplay(cm, {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function() { + if (display.wheelStartX == null) return; + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + // KEY EVENTS + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false; + var prevShift = cm.display.shift, done = false; + try { + if (isReadOnly(cm)) cm.state.suppressEdits = true; + if (dropShift) cm.display.shift = false; + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + + // Collect the currently active keymaps. + function allKeyMaps(cm) { + var maps = cm.state.keyMaps.slice(0); + if (cm.options.extraKeys) maps.push(cm.options.extraKeys); + maps.push(cm.options.keyMap); + return maps; + } + + var maybeTransition; + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + // Handle automatic keymap transitions + var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(cm.options.keyMap) == startMap) { + cm.options.keyMap = (next.call ? next.call(null, cm) : next); + keyMapChanged(cm); + } + }, 50); + + var name = keyName(e, true), handled = false; + if (!name) return false; + var keymaps = allKeyMaps(cm); + + if (e.shiftKey) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);}) + || lookupKey(name, keymaps, function(b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + return doHandleBinding(cm, b); + }); + } else { + handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); }); + } + + if (handled) { + e_preventDefault(e); + restartBlink(cm); + signalLater(cm, "keyHandled", cm, name, e); + } + return handled; + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + var handled = lookupKey("'" + ch + "'", allKeyMaps(cm), + function(b) { return doHandleBinding(cm, b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(cm); + signalLater(cm, "keyHandled", cm, "'" + ch + "'", e); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + ensureFocus(cm); + if (signalDOMEvent(cm, e)) return; + // IE does strange things with escape. + if (ie_upto10 && e.keyCode == 27) e.returnValue = false; + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + cm.replaceSelection("", null, "cut"); + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + showCrossHair(cm); + } + + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + + function onKeyUp(e) { + if (signalDOMEvent(this, e)) return; + if (e.keyCode == 16) this.doc.sel.shift = false; + } + + function onKeyPress(e) { + var cm = this; + if (signalDOMEvent(cm, e)) return; + var keyCode = e.keyCode, charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((presto && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (handleCharBinding(cm, e, ch)) return; + if (ie && !ie_upto8) cm.display.inputHasSelection = null; + fastPoll(cm); + } + + // FOCUS/BLUR EVENTS + + function onFocus(cm) { + if (cm.options.readOnly == "nocursor") return; + if (!cm.state.focused) { + signal(cm, "focus", cm); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // The prevInput test prevents this from firing when a context + // menu is closed (since the resetInput would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu == cm.doc.sel) { + resetInput(cm); + if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730 + } + } + slowPoll(cm); + restartBlink(cm); + } + function onBlur(cm) { + if (cm.state.focused) { + signal(cm, "blur", cm); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); + } + + // CONTEXT MENU HANDLING + + var detectingSelectAll; + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (signalDOMEvent(cm, e, "contextmenu")) return; + var display = cm.display; + if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return; + + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || presto) return; // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) + operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); + + var oldCSS = display.input.style.cssText; + display.inputDiv.style.position = "absolute"; + display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + focusInput(cm); + resetInput(cm); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) display.input.value = display.prevInput = " "; + display.selForContextMenu = cm.doc.sel; + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (display.input.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = display.input.value = "\u200b" + (selected ? display.input.value : ""); + display.prevInput = selected ? "" : "\u200b"; + display.input.selectionStart = 1; display.input.selectionEnd = extval.length; + } + } + function rehide() { + display.inputDiv.style.position = "relative"; + display.input.style.cssText = oldCSS; + if (ie_upto8) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos; + slowPoll(cm); + + // Try to detect the user choosing select-all + if (display.input.selectionStart != null) { + if (!ie || ie_upto8) prepareSelectAllHack(); + clearTimeout(detectingSelectAll); + var i = 0, poll = function() { + if (display.selForContextMenu == cm.doc.sel && display.input.selectionStart == 0) + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500); + else resetInput(cm); + }; + detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && !ie_upto8) prepareSelectAllHack(); + if (captureRightClick) { + e_stop(e); + var mouseup = function() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + } + + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) return false; + return gutterEvent(cm, e, "gutterContextMenu", false, signal); + } + + // UPDATING + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + var changeEnd = CodeMirror.changeEnd = function(change) { + if (!change.text) return change.to; + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + }; + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) return pos; + if (cmp(pos, change.to) <= 0) return changeEnd(change); + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; + return Pos(line, ch); + } + + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))); + } + return normalizeSelection(out, doc.sel.primIndex); + } + + function offsetPos(pos, old, nw) { + if (pos.line == old.line) + return Pos(nw.line, pos.ch - old.ch + nw.ch); + else + return Pos(nw.line + (pos.line - old.line), pos.ch); + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex); + } + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function() { this.canceled = true; } + }; + if (update) obj.update = function(from, to, text, origin) { + if (from) this.from = clipPos(doc, from); + if (to) this.to = clipPos(doc, to); + if (text) this.text = text; + if (origin !== undefined) this.origin = origin; + }; + signal(doc, "beforeChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); + + if (obj.canceled) return null; + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); + if (doc.cm.state.suppressEdits) return; + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) return; + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) + makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); + } else { + makeChangeInner(doc, change); + } + } + + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + if (doc.cm && doc.cm.state.suppressEdits) return; + + var hist = doc.history, event, selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + for (var i = 0; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + break; + } + if (i == source.length) return; + hist.lastOrigin = hist.lastSelOrigin = null; + + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}); + return; + } + selAfter = event; + } + else break; + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({changes: antiChanges, generation: hist.generation}); + hist.generation = event.generation || ++hist.maxGeneration; + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + + for (var i = event.changes.length - 1; i >= 0; --i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return; + } + + antiChanges.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change, null) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (doc.cm) ensureCursorVisible(doc.cm); + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function(range) { + return new Range(Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch)); + }), doc.sel.primIndex); + if (doc.cm) regChange(doc.cm, doc.first, doc.first - distance, distance); + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) return; + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) selAfter = computeSelAfterChange(doc, change, null); + if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); + else updateDoc(doc, change, spans); + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + + if (doc.sel.contains(change.from, change.to) > -1) + signalCursorActivity(cm); + + updateDoc(doc, change, spans, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function(line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + regLineChange(cm, from.line, "text"); + else + regChange(cm, from.line, to.line + 1, lendiff); + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) signalLater(cm, "change", cm, obj); + if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); + } + } + + function replaceRange(doc, code, from, to, origin) { + if (!to) to = from; + if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } + if (typeof code == "string") code = splitLines(code); + makeChange(doc, {from: from, to: to, text: code, origin: origin}); + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, coords) { + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; + if (coords.top + box.top < 0) doScroll = true; + else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + + (coords.bottom - coords.top + scrollerCutOff) + "px; left: " + + coords.left + "px; width: 2px;"); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) margin = 0; + for (;;) { + var changed = false, coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), + Math.min(coords.top, endCoords.top) - margin, + Math.max(coords.left, endCoords.left), + Math.max(coords.bottom, endCoords.bottom) + margin); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) return coords; + } + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, snapMargin = textHeight(cm.display); + if (y1 < 0) y1 = 0; + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = display.scroller.clientHeight - scrollerCutOff, result = {}; + var docBottom = cm.doc.height + paddingVert(display); + var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; + if (y1 < screentop) { + result.scrollTop = atTop ? 0 : y1; + } else if (y2 > screentop + screen) { + var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); + if (newTop != screentop) result.scrollTop = newTop; + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; + var screenw = display.scroller.clientWidth - scrollerCutOff; + x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth; + var gutterw = display.gutters.offsetWidth; + var atLeft = x1 < gutterw + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollPos(cm, left, top) { + if (left != null || top != null) resolveScrollToPos(cm); + if (left != null) + cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; + if (top != null) + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(), from = cur, to = cur; + if (!cm.options.lineWrapping) { + from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; + to = Pos(cur.line, cur.ch + 1); + } + cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); + var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), + Math.min(from.top, to.top) - range.margin, + Math.max(from.right, to.right), + Math.max(from.bottom, to.bottom) + range.margin); + cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + } + + // API UTILITIES + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state; + if (how == null) how = "add"; + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!cm.doc.mode.indent) how = "prev"; + else state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) line.stateAfter = null; + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) { + replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i, new Range(pos, pos)); + break; + } + } + } + line.stateAfter = null; + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(cm, handle, changeType, op) { + var no = handle, line = handle, doc = cm.doc; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) regLineChange(cm, no, changeType); + return line; + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break; + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function() { + for (var i = kill.length - 1; i >= 0; i--) + replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); + ensureCursorVisible(cm); + }); + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "char", "column" (like char, but doesn't + // cross line boundaries), "word" (across next word), or "group" (to + // the start of next group of word or non-word-non-whitespace + // chars). The visually param controls whether, in right-to-left + // text, direction 1 means to move towards the next index in the + // string, or towards the character to the right of the current + // position. The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var line = pos.line, ch = pos.ch, origDir = dir; + var lineObj = getLine(doc, line); + var possible = true; + function findNextLine() { + var l = line + dir; + if (l < doc.first || l >= doc.first + doc.size) return (possible = false); + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return (possible = false); + } else ch = next; + return true; + } + + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) break; + var cur = lineObj.text.charAt(ch) || "\n"; + var type = isWordChar(cur) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p"; + if (group && !first && !type) type = "s"; + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce();} + break; + } + + if (type) sawType = type; + if (dir > 0 && !moveOnce(!first)) break; + } + } + var result = skipAtomic(doc, Pos(line, ch), origDir, true); + if (!possible) result.hitSide = true; + return result; + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + for (;;) { + var target = coordsChar(cm, x, y); + if (!target.outside) break; + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } + y += dir * 5; + } + return target; + } + + // Find the word at the given position (as returned by coordsChar). + function findWordAt(doc, pos) { + var line = getLine(doc, pos.line).text; + var start = pos.ch, end = pos.ch; + if (line) { + if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar + : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} + : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)); + } + + // EDITOR METHODS + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); focusInput(this); fastPoll(this);}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + getDoc: function() {return this.doc;}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](map); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + if (maps[i] == map || (typeof maps[i] != "string" && maps[i].name == map)) { + maps.splice(i, 1); + return true; + } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) throw new Error("Overlays may not be stateful."); + this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); + }), + indentSelection: methodOp(function(how) { + var ranges = this.doc.sel.ranges, end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var start = Math.max(end, range.from().line); + var to = range.to(); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) + indentLine(this, j, how); + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) ensureCursorVisible(this); + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + var doc = this.doc; + pos = clipPos(doc, pos); + var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode; + var line = getLine(doc, pos.line); + var stream = new StringStream(line.text, this.options.tabSize); + while (stream.pos < pos.ch && !stream.eol()) { + stream.start = stream.pos; + var style = readToken(mode, stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + type: style || null, + state: state}; + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; + var type; + if (ch == 0) type = styles[2]; + else for (;;) { + var mid = (before + after) >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; + else if (styles[mid * 2 + 1] < ch) before = mid + 1; + else { type = styles[mid * 2 + 2]; break; } + } + var cut = type ? type.indexOf("cm-overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); + }, + + getModeAt: function(pos) { + var mode = this.doc.mode; + if (!mode.innerMode) return mode; + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0]; + }, + + getHelpers: function(pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) return helpers; + var help = helpers[type], mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) found.push(help[mode[type]]); + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) found.push(val); + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i = 0; i < help._global.length; i++) { + var cur = help._global[i]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) + found.push(cur.val); + } + return found; + }, + + getStateAfter: function(line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getStateBefore(this, line + 1, precise); + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary(); + if (start == null) pos = range.head; + else if (typeof start == "object") pos = clipPos(this.doc, start); + else pos = start ? range.from() : range.to(); + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function(line, mode) { + var end = false, last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) line = this.doc.first; + else if (line > last) { line = last; end = true; } + var lineObj = getLine(this.doc, line); + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + + (end ? this.doc.height - heightAtLine(lineObj) : 0); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + defaultCharWidth: function() { return charWidth(this.display); }, + + setGutterMarker: methodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: methodOp(function(gutterID) { + var cm = this, doc = cm.doc, i = doc.first; + doc.iter(function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regLineChange(cm, i, "gutter"); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + addLineClass: methodOp(function(handle, where, cls) { + return changeLine(this, handle, "class", function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + + removeLineClass: methodOp(function(handle, where, cls) { + return changeLine(this, handle, "class", function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)")); + if (!found) return false; + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + + addLineWidget: methodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + + removeLineWidget: function(widget) { widget.clear(); }, + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.doc, line)) return null; + var n = line; + line = getLine(this.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + else if (pos.bottom + node.offsetHeight <= vspace) + top = pos.bottom; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: methodOp(onKeyUp), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + return commands[cmd](this); + }, + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) break; + } + return cur; + }, + + moveH: methodOp(function(dir, unit) { + var cm = this; + cm.extendSelectionsBy(function(range) { + if (cm.display.shift || cm.doc.extend || range.empty()) + return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); + else + return dir < 0 ? range.from() : range.to(); + }, sel_move); + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc; + if (sel.somethingSelected()) + doc.replaceSelection("", null, "+delete"); + else + deleteNearSelection(this, function(range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; + }); + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) x = coords.left; + else coords.left = x; + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) break; + } + return cur; + }, + + moveV: methodOp(function(dir, unit) { + var cm = this, doc = this.doc, goals = []; + var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function(range) { + if (collapse) + return dir < 0 ? range.from() : range.to(); + var headPos = cursorCoords(cm, range.head, "div"); + if (range.goalColumn != null) headPos.left = range.goalColumn; + goals.push(headPos.left); + var pos = findPosV(cm, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) + addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); + return pos; + }, sel_move); + if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) + doc.sel.ranges[i].goalColumn = goals[i]; + }), + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) return; + if (this.state.overwrite = !this.state.overwrite) + addClass(this.display.cursorDiv, "CodeMirror-overwrite"); + else + rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); + + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function() { return activeElt() == this.display.input; }, + + scrollTo: methodOp(function(x, y) { + if (x != null || y != null) resolveScrollToPos(this); + if (x != null) this.curOp.scrollLeft = x; + if (y != null) this.curOp.scrollTop = y; + }), + getScrollInfo: function() { + var scroller = this.display.scroller, co = scrollerCutOff; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - co, width: scroller.scrollWidth - co, + clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co}; + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null}; + if (margin == null) margin = this.options.cursorScrollMargin; + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null}; + } else if (range.from == null) { + range = {from: range, to: null}; + } + if (!range.to) range.to = range.from; + range.margin = margin || 0; + + if (range.from.line != null) { + resolveScrollToPos(this); + this.curOp.scrollToPos = range; + } else { + var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), + Math.min(range.from.top, range.to.top) - range.margin, + Math.max(range.from.right, range.to.right), + Math.max(range.from.bottom, range.to.bottom) + range.margin); + this.scrollTo(sPos.scrollLeft, sPos.scrollTop); + } + }), + + setSize: methodOp(function(width, height) { + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) this.display.wrapper.style.width = interpret(width); + if (height != null) this.display.wrapper.style.height = interpret(height); + if (this.options.lineWrapping) clearLineMeasurementCache(this); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + + operation: function(f){return runInOp(this, f);}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + estimateLineHeights(this); + signal(this, "refresh", this); + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + resetInput(this); + this.scrollTo(doc.scrollLeft, doc.scrollTop); + signalLater(this, "swapDoc", this, old); + return old; + }), + + getInputField: function(){return this.display.input;}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + eventMixin(CodeMirror); + + // OPTION DEFAULTS + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + // Functions to run when options are changed. + var optionHandlers = CodeMirror.optionHandlers = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + // Passed to option handlers when there is no old value. + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) { + cm.setValue(val); + }, true); + option("mode", null, function(cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("specialChars", /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\ufeff]/g, function(cm, val) { + cm.options.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + cm.refresh(); + }, true); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); + option("electricChars", true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", keyMapChanged); + option("extraKeys", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function(cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, updateScrollbars, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("resetSelectionOnContextMenu", true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + cm.display.disabled = true; + } else { + cm.display.disabled = false; + if (!val) resetInput(cm); + } + }); + option("disableInput", false, function(cm, val) {if (!val) resetInput(cm);}, true); + option("dragDrop", true); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function(cm, val) { + if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0; + }); + + option("tabindex", null, function(cm, val) { + cm.display.input.tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") found = {name: found}; + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return CodeMirror.resolveMode("application/xml"); + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + CodeMirror.getMode = function(options, spec) { + var spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) modeObj.helperType = spec.helperType; + if (spec.modeProps) for (var prop in spec.modeProps) + modeObj[prop] = spec.modeProps[prop]; + + return modeObj; + }; + + // Minimal default mode. + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function(name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + var helpers = CodeMirror.helpers = {}; + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({pred: predicate, val: value}); + }; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because nested + // modes need to do this for their inner modes. + + var copyState = CodeMirror.copyState = function(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + }; + + var startState = CodeMirror.startState = function(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + }; + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + if (!info || info.mode == mode) break; + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, + singleSelection: function(cm) { + cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); + }, + killLine: function(cm) { + deleteNearSelection(cm, function(range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) + return {from: range.head, to: Pos(range.head.line + 1, 0)}; + else + return {from: range.head, to: Pos(range.head.line, len)}; + } else { + return {from: range.from(), to: range.to()}; + } + }); + }, + deleteLine: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; + }); + }, + delLineLeft: function(cm) { + deleteNearSelection(cm, function(range) { + return {from: Pos(range.from().line, 0), to: range.from()}; + }); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + undoSelection: function(cm) {cm.undoSelection();}, + redoSelection: function(cm) {cm.redoSelection();}, + goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, + goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, + goLineStart: function(cm) { + cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, sel_move); + }, + goLineStartSmart: function(cm) { + cm.extendSelectionsBy(function(range) { + var start = lineStart(cm, range.head.line); + var line = cm.getLineHandle(start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = range.head.line == start.line && range.head.ch <= firstNonWS && range.head.ch; + return Pos(start.line, inWS ? 0 : firstNonWS); + } + return start; + }, sel_move); + }, + goLineEnd: function(cm) { + cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, sel_move); + }, + goLineRight: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); + }, sel_move); + }, + goLineLeft: function(cm) { + cm.extendSelectionsBy(function(range) { + var top = cm.charCoords(range.head, "div").top + 5; + return cm.coordsChar({left: 0, top: top}, "div"); + }, sel_move); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goGroupRight: function(cm) {cm.moveH(1, "group");}, + goGroupLeft: function(cm) {cm.moveH(-1, "group");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, + delGroupAfter: function(cm) {cm.deleteH(1, "group");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t");}, + insertSoftTab: function(cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); + } + cm.replaceSelections(spaces); + }, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.execCommand("insertTab"); + }, + transposeChars: function(cm) { + runInOp(cm, function() { + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); + } + }); + }, + newlineAndIndent: function(cm) { + runInOp(cm, function() { + var len = cm.listSelections().length; + for (var i = 0; i < len; i++) { + var range = cm.listSelections()[i]; + cm.replaceRange("\n", range.anchor, range.head, "+input"); + cm.indentLine(range.from().line + 1, null, true); + ensureCursorVisible(cm); + } + }); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delLineLeft", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", + fallthrough: ["basic", "emacsy"] + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + + // Given an array of keymaps and a key name, call handle on any + // bindings found, until that returns a truthy value, at which point + // we consider the key handled. Implements things like binding a key + // to false stopping further handling and keymap fallthrough. + var lookupKey = CodeMirror.lookupKey = function(name, maps, handle) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) return "stop"; + if (found != null && handle(found)) return true; + if (map.nofallthrough) return "stop"; + + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0; i < fallthrough.length; ++i) { + var done = lookup(fallthrough[i]); + if (done) return done; + } + return false; + } + + for (var i = 0; i < maps.length; ++i) { + var done = lookup(maps[i]); + if (done) return done != "stop"; + } + }; + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + var isModifierKey = CodeMirror.isModifierKey = function(event) { + var name = keyNames[event.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + }; + + // Look up the name of a key as indicated by an event object. + var keyName = CodeMirror.keyName = function(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) return false; + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) return false; + if (event.altKey) name = "Alt-" + name; + if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name; + if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name; + if (!noShift && event.shiftKey) name = "Shift-" + name; + return name; + }; + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + if (!options.placeholder && textarea.placeholder) + options.placeholder = textarea.placeholder; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form, realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = CodeMirror.StringStream = function(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + }; + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == this.lineStart;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + indentation: function() { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);}, + hideFirstChars: function(n, inner) { + this.lineStart += n; + try { return inner(); } + finally { this.lineStart -= n; } + } + }; + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + var TextMarker = CodeMirror.TextMarker = function(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + }; + eventMixin(TextMarker); + + // Clear the marker. + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) startOperation(cm); + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) signalLater(this, "clear", found.from, found.to); + } + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); + else if (cm) { + if (span.to != null) max = lineNo(line); + if (span.from != null) min = lineNo(line); + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) + updateLineHeight(line, textHeight(cm.display)); + } + if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { + var visual = visualLine(this.lines[i]), len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + + if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) reCheckSelection(cm.doc); + } + if (cm) signalLater(cm, "markerCleared", cm, this); + if (withOp) endOperation(cm); + if (this.parent) this.parent.clear(); + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function(side, lineObj) { + if (side == null && this.type == "bookmark") side = 1; + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) return from; + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) return to; + } + } + return from && {from: from, to: to}; + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function() { + var pos = this.find(-1, true), widget = this, cm = this.doc.cm; + if (!pos || !cm) return; + runInOp(cm, function() { + var line = pos.line, lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) + updateLineHeight(line, line.height + dHeight); + } + }); + }; + + TextMarker.prototype.attachLine = function(line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function(line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) return markTextShared(doc, from, to, options, type); + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); + + var marker = new TextMarker(doc, type), diff = cmp(from, to); + if (options) copyObj(options, marker, false); + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + return marker; + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) marker.widgetNode.ignoreEvents = true; + if (options.insertLeft) marker.widgetNode.insertLeft = true; + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + throw new Error("Inserting collapsed marker partially overlapping an existing one"); + sawCollapsedSpans = true; + } + + if (marker.addToHistory) + addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); + + var curLine = from.line, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function(line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + updateMaxLine = true; + if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { + if (lineIsHidden(doc, line)) updateLineHeight(line, 0); + }); + + if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (doc.history.done.length || doc.history.undone.length) + doc.clearHistory(); + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) cm.curOp.updateMaxLine = true; + if (marker.collapsed) + regChange(cm, from.line, to.line + 1); + else if (marker.className || marker.title || marker.startStyle || marker.endStyle) + for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); + if (marker.atomic) reCheckSelection(cm.doc); + signalLater(cm, "markerAdded", cm, marker); + } + return marker; + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) + markers[i].parent = this; + }; + eventMixin(SharedTextMarker); + + SharedTextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + this.markers[i].clear(); + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function(side, lineObj) { + return this.primary.find(side, lineObj); + }; + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function(doc) { + if (widget) options.widgetNode = widget.cloneNode(true); + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + if (doc.linked[i].isParent) return; + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), + function(m) { return m.parent; }); + } + + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find(); + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + + function detachSharedMarkers(markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], linked = [marker.primary.doc];; + linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + } + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + // Add a span to a line. + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } + return nw; + } + function markedSpansAfter(old, endCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)); + } + } + return nw; + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) return null; + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + // Make sure we didn't create any zero-length spans + if (first) first = clearEmptySpans(first); + if (last && last != first) last = clearEmptySpans(last); + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); + for (var i = 0; i < gap; ++i) + newMarkers.push(gapMarkers); + newMarkers.push(last); + } + return newMarkers; + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + spans.splice(i--, 1); + } + if (!spans.length) return null; + return spans; + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) return stretched; + if (!stretched) return old; + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + if (oldCur[k].marker == span.marker) continue spans; + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + newParts.push({from: p.from, to: m.from}); + if (dto > 0 || !mk.inclusiveRight && !dto) + newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.detachLine(line); + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.attachLine(line); + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } + function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) return lenDiff; + var aPos = a.find(), bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) return -fromCmp; + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) return toCmp; + return b.id - a.id; + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } + function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) continue; + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; + if (fromCmp <= 0 && (cmp(found.to, from) || extraRight(sp.marker) - extraLeft(marker)) > 0 || + fromCmp >= 0 && (cmp(found.from, to) || extraLeft(sp.marker) - extraRight(marker)) < 0) + return true; + } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = merged.find(-1, true).line; + return line; + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + (lines || (lines = [])).push(line); + } + return lines; + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line); + if (line == vis) return lineN; + return lineNo(vis); + } + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) return lineN; + var line = getLine(doc, lineN), merged; + if (!lineIsHidden(doc, line)) return lineN; + while (merged = collapsedSpanAtEnd(line)) + line = merged.find(1, true).line; + return lineNo(line) + 1; + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.marker.widgetNode) continue; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + return true; + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) return true; + } + } + + // LINE WIDGETS + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = CodeMirror.LineWidget = function(cm, node, options) { + if (options) for (var opt in options) if (options.hasOwnProperty(opt)) + this[opt] = options[opt]; + this.cm = cm; + this.node = node; + }; + eventMixin(LineWidget); + + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + addToScrollPos(cm, null, diff); + } + + LineWidget.prototype.clear = function() { + var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); + if (no == null || !ws) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); + if (!ws.length) line.widgets = null; + var height = widgetHeight(this); + runInOp(cm, function() { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + updateLineHeight(line, Math.max(0, line.height - height)); + }); + }; + LineWidget.prototype.changed = function() { + var oldH = this.height, cm = this.cm, line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) return; + runInOp(cm, function() { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + updateLineHeight(line, line.height + diff); + }); + }; + + function widgetHeight(widget) { + if (widget.height != null) return widget.height; + if (!contains(document.body, widget.node)) + removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative")); + return widget.height = widget.node.offsetHeight; + } + + function addLineWidget(cm, handle, node, options) { + var widget = new LineWidget(cm, node, options); + if (widget.noHScroll) cm.display.alignWidgets = true; + changeLine(cm, handle, "widget", function(line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) widgets.push(widget); + else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); + widget.line = line; + if (!lineIsHidden(cm.doc, line)) { + var aboveVisible = heightAtLine(line) < cm.doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) addToScrollPos(cm, null, widget.height); + cm.curOp.forceUpdate = true; + } + return true; + }); + return widget; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + eventMixin(Line); + Line.prototype.lineNo = function() { return lineNo(this); }; + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) updateLineHeight(line, estHeight); + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + function extractLineClasses(type, output) { + if (type) for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) break; + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) + output[prop] = lineClass[2]; + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + output[prop] += " " + lineClass[2]; + } + return type; + } + + function callBlankLine(mode, state) { + if (mode.blankLine) return mode.blankLine(state); + if (!mode.innerMode) return; + var inner = CodeMirror.innerMode(mode, state); + if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); + } + + function readToken(mode, stream, state) { + var style = mode.token(stream, state); + if (stream.pos <= stream.start) + throw new Error("Mode " + mode.name + " failed to advance stream."); + return style; + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; + var curStart = 0, curStyle = null; + var stream = new StringStream(text, cm.options.tabSize), style; + if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) processLine(cm, text, state, stream.pos); + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, state), lineClasses); + } + if (cm.options.addModeClass) { + var mName = CodeMirror.innerMode(mode, state).mode.name; + if (mName) style = "m-" + (style ? mName + " " + style : mName); + } + if (!flattenSpans || curStyle != style) { + if (curStart < stream.start) f(stream.start, curStyle); + curStart = stream.start; curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 characters + var pos = Math.min(stream.pos, curStart + 50000); + f(pos, curStyle); + curStart = pos; + } + } + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, state, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function(end, style) { + st.push(end, style); + }, lineClasses, forceToEnd); + + // Run overlays, adjust style array. + for (var o = 0; o < cm.state.overlays.length; ++o) { + var overlay = cm.state.overlays[o], i = 1, at = 0; + runMode(cm, line.text, overlay.mode, true, function(end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) + st.splice(i, 1, end, st[i+1], i_end); + i += 2; + at = Math.min(end, i_end); + } + if (!style) return; + if (overlay.opaque) { + st.splice(start, i - start, end, "cm-overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; + } + } + }, lineClasses); + } + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; + } + + function getLineStyles(cm, line) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); + line.styles = result.styles; + if (result.classes) line.styleClasses = result.classes; + else if (line.styleClasses) line.styleClasses = null; + } + return line.styles; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, state, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize); + stream.start = stream.pos = startAt || 0; + if (text == "") callBlankLine(mode, state); + while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { + readToken(mode, stream, state); + stream.start = stream.pos; + } + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) return null; + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")); + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = {pre: elt("pre", [content]), content: content, col: 0, pos: 0, cm: cm}; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order; + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if ((ie || webkit) && cm.getOption("lineWrapping")) + builder.addToken = buildTokenSplitSpaces(builder.addToken); + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) + builder.addToken = buildTokenBadBidi(builder.addToken, order); + builder.map = []; + insertLineContent(line, builder, getLineStyles(cm, line)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) + builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); + if (line.styleClasses.textClass) + builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); + (lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre); + return builder; + } + + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + return token; + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, title) { + if (!text) return; + var special = builder.cm.options.specialChars, mustWrap = false; + if (!special.test(text)) { + builder.col += text.length; + var content = document.createTextNode(text); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie_upto8) mustWrap = true; + builder.pos += text.length; + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(text.slice(pos, pos + skipped)); + if (ie_upto8) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + builder.col += tabWidth; + } else { + var txt = builder.cm.options.specialCharPlaceholder(m[0]); + if (ie_upto8) content.appendChild(elt("span", [txt])); + else content.appendChild(txt); + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt); + builder.pos++; + } + } + if (style || startStyle || endStyle || mustWrap) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + var token = elt("span", [content], fullStyle); + if (title) token.title = title; + return builder.content.appendChild(token); + } + builder.content.appendChild(content); + } + + function buildTokenSplitSpaces(inner) { + function split(old) { + var out = " "; + for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; + out += " "; + return out; + } + return function(builder, text, style, startStyle, endStyle, title) { + inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title); + }; + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function(builder, text, style, startStyle, endStyle, title) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + for (var i = 0; i < order.length; i++) { + var part = order[i]; + if (part.to > start && part.from <= start) break; + } + if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title); + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + }; + } + + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { + builder.map.push(builder.pos, builder.pos + size, widget); + builder.content.appendChild(widget); + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0; + if (!spans) { + for (var i = 1; i < styles.length; i+=2) + builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); + return; + } + + var len = allText.length, pos = 0, i = 1, text = "", style; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = ""; + collapsed = null; nextChange = Infinity; + var foundBookmarks = []; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (sp.from <= pos && (sp.to == null || sp.to > pos)) { + if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } + if (m.className) spanStyle += " " + m.className; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; + if (m.title && !title) title = m.title; + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null); + if (collapsed.to == null) return; + } + if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) + buildCollapsedSpan(builder, 0, foundBookmarks[j]); + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore); + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null;} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // Adjust the line structure + if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + for (var i = 0, added = []; i < text.length - 1; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + update(lastLine, lastLine.text, lastSpans); + if (nlines) doc.remove(from.line, nlines); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + for (var added = [], i = 1; i < text.length - 1; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + for (var i = 1, added = []; i < text.length - 1; ++i) + added.push(new Line(text[i], spansFor(i), estimateHeight)); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1); + doc.insert(from.line + 1, added); + } + + signalLater(doc, "change", doc, change); + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, height = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + // Remove the n lines at offset 'at'. + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + // Helper used to collapse a small branch into a single leaf. + collapse: function(lines) { + lines.push.apply(lines, this.lines); + }, + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) lines[i].parent = this; + }, + // Used to iterate over a part of the tree. + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); + }, + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + // When a node has grown, check whether it should be split. + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function(at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + var nextDocId = 0; + var Doc = CodeMirror.Doc = function(text, mode, firstLine) { + if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); + if (firstLine == null) firstLine = 0; + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.frontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + + if (typeof text == "string") text = splitLines(text); + updateDoc(this, {from: start, to: start, text: text}); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) this.iterN(from - this.first, to - from, op); + else this.iterN(this.first, this.first + this.size, from); + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) height += lines[i].height; + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: splitLines(code), origin: "setValue"}, true); + setSelection(this, simpleSelection(top)); + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + + getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, + getLineNumber: function(line) {return lineNo(line);}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") line = getLine(this, line); + return visualLine(line); + }, + + lineCount: function() {return this.size;}, + firstLine: function() {return this.first;}, + lastLine: function() {return this.first + this.size - 1;}, + + clipPos: function(pos) {return clipPos(this, pos);}, + + getCursor: function(start) { + var range = this.sel.primary(), pos; + if (start == null || start == "head") pos = range.head; + else if (start == "anchor") pos = range.anchor; + else if (start == "end" || start == "to" || start === false) pos = range.to(); + else pos = range.from(); + return pos; + }, + listSelections: function() { return this.sel.ranges; }, + somethingSelected: function() {return this.sel.somethingSelected();}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads, options)); + }), + extendSelectionsBy: docMethodOp(function(f, options) { + extendSelections(this, map(this.sel.ranges, f), options); + }), + setSelections: docMethodOp(function(ranges, primary, options) { + if (!ranges.length) return; + for (var i = 0, out = []; i < ranges.length; i++) + out[i] = new Range(clipPos(this, ranges[i].anchor), + clipPos(this, ranges[i].head)); + if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); + setSelection(this, normalizeSelection(out, primary), options); + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); + }), + + getSelection: function(lineSep) { + var ranges = this.sel.ranges, lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) return lines; + else return lines.join(lineSep || "\n"); + }, + getSelections: function(lineSep) { + var parts = [], ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) sel = sel.join(lineSep || "\n"); + parts[i] = sel; + } + return parts; + }, + replaceSelection: function(code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) + dup[i] = code; + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var changes = [], sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i = changes.length - 1; i >= 0; i--) + makeChange(this, changes[i]); + if (newSel) setSelectionReplaceHistory(this, newSel); + else if (this.cm) ensureCursorVisible(this.cm); + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), + + setExtending: function(val) {this.extend = val;}, + getExtending: function() {return this.extend;}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0; + for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; + for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; + return {undo: done, redo: undone}; + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration);}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + this.history.lastOp = this.history.lastOrigin = null; + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)}; + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker.parent || span.marker); + } + return markers; + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to); + var found = [], lineNo = from.line; + this.iter(from.line, to.line + 1, function(line) { + var spans = line.markedSpans; + if (spans) for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(lineNo == from.line && from.ch > span.to || + span.from == null && lineNo != from.line|| + lineNo == to.line && span.from > to.ch) && + (!filter || filter(span.marker))) + found.push(span.marker.parent || span.marker); + } + ++lineNo; + }); + return found; + }, + getAllMarks: function() { + var markers = []; + this.iter(function(line) { + var sps = line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) + if (sps[i].from != null) markers.push(sps[i].marker); + }); + return markers; + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first; + this.iter(function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) return 0; + this.iter(this.first, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + + linkedDoc: function(options) { + if (!options) options = {}; + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) from = options.from; + if (options.to != null && options.to < to) to = options.to; + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); + if (options.sharedHist) copy.history = this.history; + (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy; + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) other = other.doc; + if (this.linked) for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) continue; + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break; + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode;}, + getEditor: function() {return this.cm;} + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor".split(" "); + for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments);}; + })(Doc.prototype[prop]); + + eventMixin(Doc); + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) continue; + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) continue; + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) throw new Error("This document is already in use."); + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + if (!cm.options.lineWrapping) findMaxLine(cm); + cm.options.mode = doc.modeOption; + regChange(cm); + } + + // LINE UTILITIES + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); + for (var chunk = doc; !chunk.lines;) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function(line) { + var text = line.text; + if (n == end.line) text = text.slice(0, end.ch); + if (n == start.line) text = text.slice(start.ch); + out.push(text); + ++n; + }); + return out; + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function(line) { out.push(line.text); }); + return out; + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) for (var n = line; n; n = n.parent) n.height += diff; + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i = 0; i < chunk.children.length; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = []; + this.undoDepth = Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); + return histChange; + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) array.pop(); + else break; + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done); + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done); + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done); + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, ore are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur; + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + var last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) + pushSelectionToHistory(doc.sel, hist.done); + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) hist.done.shift(); + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + + if (!last) signal(doc, "historyAdded"); + } + + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + hist.done[hist.done.length - 1] = sel; + else + pushSelectionToHistory(sel, hist.done); + + hist.lastSelTime = +new Date; + hist.lastSelOrigin = origin; + hist.lastOp = opId; + if (options && options.clearRedo !== false) + clearSelectionEvents(hist.undone); + } + + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) + dest.push(sel); + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { + if (line.markedSpans) + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) return null; + for (var i = 0, out; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) return null; + for (var i = 0, nw = []; i < change.text.length; ++i) + nw.push(removeClearedSpans(found[i])); + return nw; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + for (var i = 0, copy = []; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue; + } + var changes = event.changes, newChanges = []; + copy.push({changes: newChanges}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m; + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + return copy; + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue; + } + for (var j = 0; j < sub.changes.length; ++j) { + var cur = sub.changes[j]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // EVENT UTILITIES + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + var e_preventDefault = CodeMirror.e_preventDefault = function(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + }; + var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + }; + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var on = CodeMirror.on = function(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + }; + + var off = CodeMirror.off = function(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + for (var i = 0; i < arr.length; ++i) + if (arr[i] == f) { arr.splice(i, 1); break; } + } + }; + + var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); + }; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + var delayedCallbacks, delayedCallbackDepth = 0; + function signalLater(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + if (!delayedCallbacks) { + ++delayedCallbackDepth; + delayedCallbacks = []; + setTimeout(fireDelayed, 0); + } + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + delayedCallbacks.push(bnd(arr[i])); + } + + function fireDelayed() { + --delayedCallbackDepth; + var delayed = delayedCallbacks; + delayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) return; + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) + set.push(arr[i]); + } + + function hasHandler(emitter, type) { + var arr = emitter._handlers && emitter._handlers[type]; + return arr && arr.length > 0; + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f);}; + ctor.prototype.off = function(type, f) {off(this, type, f);}; + } + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerCutOff = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + // Reused option objects for setSelection & friends + var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; + + function Delayed() {this.id = null;} + Delayed.prototype.set = function(ms, f) { + clearTimeout(this.id); + this.id = setTimeout(f, ms); + }; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) + return n + (end - i); + n += nextTab - i; + n += tabSize - (n % tabSize); + i = nextTab + 1; + } + }; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) nextTab = string.length; + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) + return pos + Math.min(skipped, goal - col); + col += nextTab - pos; + col += tabSize - (col % tabSize); + pos = nextTab + 1; + if (col >= goal) return pos; + } + } + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + var selectInput = function(node) { node.select(); }; + if (ios) // Mobile Safari apparently has a bug where select() is broken. + selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; + else if (ie) // Suppress mysterious IE10 errors + selectInput = function(node) { try { node.select(); } catch(_e) {} }; + + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + if (array[i] == elt) return i; + return -1; + } + if ([].indexOf) indexOf = function(array, elt) { return array.indexOf(elt); }; + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); + return out; + } + if ([].map) map = function(array, f) { return array.map(f); }; + + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + var ctor = function() {}; + ctor.prototype = base; + inst = new ctor(); + } + if (props) copyObj(props, inst); + return inst; + }; + + function copyObj(obj, target, overwrite) { + if (!target) target = {}; + for (var prop in obj) + if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + target[prop] = obj[prop]; + return target; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u00df\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + var isWordChar = CodeMirror.isWordChar = function(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + }; + + function isEmpty(obj) { + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; + return true; + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") e.appendChild(document.createTextNode(content)); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + var range; + if (document.createRange) range = function(node, start, end) { + var r = document.createRange(); + r.setEnd(node, end); + r.setStart(node, start); + return r; + }; + else range = function(node, start, end) { + var r = document.body.createTextRange(); + r.moveToElementText(node.parentNode); + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r; + }; + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + e.removeChild(e.firstChild); + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + function contains(parent, child) { + if (parent.contains) + return parent.contains(child); + while (child = child.parentNode) + if (child == parent) return true; + } + + function activeElt() { return document.activeElement; } + // Older versions of IE throws unspecified error when touching + // document.activeElement in some cases (during loading, in iframe) + if (ie_upto10) activeElt = function() { + try { return document.activeElement; } + catch(e) { return document.body; } + }; + + function classTest(cls) { return new RegExp("\\b" + cls + "\\b\\s*"); } + function rmClass(node, cls) { + var test = classTest(cls); + if (test.test(node.className)) node.className = node.className.replace(test, ""); + } + function addClass(node, cls) { + if (!classTest(cls).test(node.className)) node.className += " " + cls; + } + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) + if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; + return b; + } + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_upto8) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + var knownScrollbarWidth; + function scrollbarWidth(measure) { + if (knownScrollbarWidth != null) return knownScrollbarWidth; + var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll"); + removeChildrenAndAdd(measure, test); + if (test.offsetWidth) + knownScrollbarWidth = test.offsetHeight - test.clientHeight; + return knownScrollbarWidth || 0; + } + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_upto7; + } + if (zwspSupported) return elt("span", "\u200b"); + else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) return badBidiRects; + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + if (r0.left == r0.right) return false; + var r1 = range(txt, 1, 2).getBoundingClientRect(); + return badBidiRects = (r1.right - r0.right < 3); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function"; + })(); + + // KEY NAMES + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + found = true; + } + } + if (!found) f(from, to, "ltr"); + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return Pos(lineN, ch); + } + function lineEnd(cm, lineN) { + var merged, line = getLine(cm.doc, lineN); + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + lineN = null; + } + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return Pos(lineN == null ? lineNo(line) : lineN, ch); + } + + function compareBidiLevel(order, a, b) { + var linedir = order[0].level; + if (a == linedir) return true; + if (b == linedir) return false; + return a < b; + } + var bidiOther; + function getBidiPartAt(order, pos) { + bidiOther = null; + for (var i = 0, found; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < pos && cur.to > pos) return i; + if ((cur.from == pos || cur.to == pos)) { + if (found == null) { + found = i; + } else if (compareBidiLevel(order, cur.level, order[found].level)) { + if (cur.from != cur.to) bidiOther = found; + return i; + } else { + if (cur.from != cur.to) bidiOther = i; + return found; + } + } + } + return found; + } + + function moveInLine(line, pos, dir, byUnit) { + if (!byUnit) return pos + dir; + do pos += dir; + while (pos > 0 && isExtendingChar(line.text.charAt(pos))); + return pos; + } + + // This is needed in order to move 'visually' through bi-directional + // text -- i.e., pressing left should make the cursor go left, even + // when in RTL text. The tricky part is the 'jumps', where RTL and + // LTR text touch each other. This often requires the cursor offset + // to move more than one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var pos = getBidiPartAt(bidi, start), part = bidi[pos]; + var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); + + for (;;) { + if (target > part.from && target < part.to) return target; + if (target == part.from || target == part.to) { + if (getBidiPartAt(bidi, target) == pos) return target; + part = bidi[pos += dir]; + return (dir > 0) == part.level % 2 ? part.to : part.from; + } else { + part = bidi[pos += dir]; + if (!part) return null; + if ((dir > 0) == part.level % 2) + target = moveInLine(line, part.to, -1, byUnit); + else + target = moveInLine(line, part.from, 1, byUnit); + } + } + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; + function charType(code) { + if (code <= 0xf7) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); + else if (0x6ee <= code && code <= 0x8ac) return "r"; + else if (0x2000 <= code && code <= 0x200b) return "w"; + else if (code == 0x200c) return "b"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + // Browsers seem to always treat the boundaries of block elements as being L. + var outerType = "L"; + + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; this.to = to; + } + + return function(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = []; + for (var i = 0, type; i < len; ++i) + types.push(type = charType(str.charCodeAt(i))); + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = outerType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : outerType) == "L"; + var after = (end < len ? types[end] : outerType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push(new BidiSpan(0, start, i)); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, new BidiSpan(2, nstart, j)); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + if (order[0].level != lst(order).level) + order.push(new BidiSpan(order[0].level, len, len)); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "4.1.0"; + + return CodeMirror; +}); diff --git a/v3/js/codemirror/python.js b/v3/js/codemirror/python.js new file mode 100644 index 000000000..f5530bcfd --- /dev/null +++ b/v3/js/codemirror/python.js @@ -0,0 +1,388 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + + +CodeMirror.defineMode("python", function(conf, parserConf) { + var ERRORCLASS = 'error'; + + function wordRegexp(words) { + return new RegExp("^((" + words.join(")|(") + "))\\b"); + } + + var singleOperators = parserConf.singleOperators || new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"); + var singleDelimiters = parserConf.singleDelimiters || new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); + var doubleOperators = parserConf.doubleOperators || new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); + var doubleDelimiters = parserConf.doubleDelimiters || new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); + var tripleDelimiters = parserConf.tripleDelimiters || new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); + var identifiers = parserConf.identifiers|| new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); + var hangingIndent = parserConf.hangingIndent || parserConf.indentUnit; + + var wordOperators = wordRegexp(['and', 'or', 'not', 'is', 'in']); + var commonkeywords = ['as', 'assert', 'break', 'class', 'continue', + 'def', 'del', 'elif', 'else', 'except', 'finally', + 'for', 'from', 'global', 'if', 'import', + 'lambda', 'pass', 'raise', 'return', + 'try', 'while', 'with', 'yield']; + var commonBuiltins = ['abs', 'all', 'any', 'bin', 'bool', 'bytearray', 'callable', 'chr', + 'classmethod', 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', + 'enumerate', 'eval', 'filter', 'float', 'format', 'frozenset', + 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', + 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', + 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', + 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', + 'type', 'vars', 'zip', '__import__', 'NotImplemented', + 'Ellipsis', '__debug__']; + var py2 = {'builtins': ['apply', 'basestring', 'buffer', 'cmp', 'coerce', 'execfile', + 'file', 'intern', 'long', 'raw_input', 'reduce', 'reload', + 'unichr', 'unicode', 'xrange', 'False', 'True', 'None'], + 'keywords': ['exec', 'print']}; + var py3 = {'builtins': ['ascii', 'bytes', 'exec', 'print'], + 'keywords': ['nonlocal', 'False', 'True', 'None']}; + + if(parserConf.extra_keywords != undefined){ + commonkeywords = commonkeywords.concat(parserConf.extra_keywords); + } + if(parserConf.extra_builtins != undefined){ + commonBuiltins = commonBuiltins.concat(parserConf.extra_builtins); + } + if (!!parserConf.version && parseInt(parserConf.version, 10) === 3) { + commonkeywords = commonkeywords.concat(py3.keywords); + commonBuiltins = commonBuiltins.concat(py3.builtins); + var stringPrefixes = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i"); + } else { + commonkeywords = commonkeywords.concat(py2.keywords); + commonBuiltins = commonBuiltins.concat(py2.builtins); + var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); + } + var keywords = wordRegexp(commonkeywords); + var builtins = wordRegexp(commonBuiltins); + + var indentInfo = null; + + // tokenizers + function tokenBase(stream, state) { + // Handle scope changes + if (stream.sol()) { + var scopeOffset = state.scopes[0].offset; + if (stream.eatSpace()) { + var lineOffset = stream.indentation(); + if (lineOffset > scopeOffset) { + indentInfo = 'indent'; + } else if (lineOffset < scopeOffset) { + indentInfo = 'dedent'; + } + return null; + } else { + if (scopeOffset > 0) { + dedent(stream, state); + } + } + } + if (stream.eatSpace()) { + return null; + } + + var ch = stream.peek(); + + // Handle Comments + if (ch === '#') { + stream.skipToEnd(); + return 'comment'; + } + + // Handle Number Literals + if (stream.match(/^[0-9\.]/, false)) { + var floatLiteral = false; + // Floats + if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } + if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } + if (stream.match(/^\.\d+/)) { floatLiteral = true; } + if (floatLiteral) { + // Float literals may be "imaginary" + stream.eat(/J/i); + return 'number'; + } + // Integers + var intLiteral = false; + // Hex + if (stream.match(/^0x[0-9a-f]+/i)) { intLiteral = true; } + // Binary + if (stream.match(/^0b[01]+/i)) { intLiteral = true; } + // Octal + if (stream.match(/^0o[0-7]+/i)) { intLiteral = true; } + // Decimal + if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { + // Decimal literals may be "imaginary" + stream.eat(/J/i); + // TODO - Can you have imaginary longs? + intLiteral = true; + } + // Zero by itself with no other piece of number. + if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } + if (intLiteral) { + // Integer literals may be "long" + stream.eat(/L/i); + return 'number'; + } + } + + // Handle Strings + if (stream.match(stringPrefixes)) { + state.tokenize = tokenStringFactory(stream.current()); + return state.tokenize(stream, state); + } + + // Handle operators and Delimiters + if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { + return null; + } + if (stream.match(doubleOperators) + || stream.match(singleOperators) + || stream.match(wordOperators)) { + return 'operator'; + } + if (stream.match(singleDelimiters)) { + return null; + } + + if (stream.match(keywords)) { + return 'keyword'; + } + + if (stream.match(builtins)) { + return 'builtin'; + } + + if (stream.match(/^(self|cls)\b/)) { + return "variable-2"; + } + + if (stream.match(identifiers)) { + if (state.lastToken == 'def' || state.lastToken == 'class') { + return 'def'; + } + return 'variable'; + } + + // Handle non-detected items + stream.next(); + return ERRORCLASS; + } + + function tokenStringFactory(delimiter) { + while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { + delimiter = delimiter.substr(1); + } + var singleline = delimiter.length == 1; + var OUTCLASS = 'string'; + + function tokenString(stream, state) { + while (!stream.eol()) { + stream.eatWhile(/[^'"\\]/); + if (stream.eat('\\')) { + stream.next(); + if (singleline && stream.eol()) { + return OUTCLASS; + } + } else if (stream.match(delimiter)) { + state.tokenize = tokenBase; + return OUTCLASS; + } else { + stream.eat(/['"]/); + } + } + if (singleline) { + if (parserConf.singleLineStringErrors) { + return ERRORCLASS; + } else { + state.tokenize = tokenBase; + } + } + return OUTCLASS; + } + tokenString.isString = true; + return tokenString; + } + + function indent(stream, state, type) { + type = type || 'py'; + var indentUnit = 0; + if (type === 'py') { + if (state.scopes[0].type !== 'py') { + state.scopes[0].offset = stream.indentation(); + return; + } + for (var i = 0; i < state.scopes.length; ++i) { + if (state.scopes[i].type === 'py') { + indentUnit = state.scopes[i].offset + conf.indentUnit; + break; + } + } + } else if (stream.match(/\s*($|#)/, false)) { + // An open paren/bracket/brace with only space or comments after it + // on the line will indent the next line a fixed amount, to make it + // easier to put arguments, list items, etc. on their own lines. + indentUnit = stream.indentation() + hangingIndent; + } else { + indentUnit = stream.column() + stream.current().length; + } + state.scopes.unshift({ + offset: indentUnit, + type: type + }); + } + + function dedent(stream, state, type) { + type = type || 'py'; + if (state.scopes.length == 1) return; + if (state.scopes[0].type === 'py') { + var _indent = stream.indentation(); + var _indent_index = -1; + for (var i = 0; i < state.scopes.length; ++i) { + if (_indent === state.scopes[i].offset) { + _indent_index = i; + break; + } + } + if (_indent_index === -1) { + return true; + } + while (state.scopes[0].offset !== _indent) { + state.scopes.shift(); + } + return false; + } else { + if (type === 'py') { + state.scopes[0].offset = stream.indentation(); + return false; + } else { + if (state.scopes[0].type != type) { + return true; + } + state.scopes.shift(); + return false; + } + } + } + + function tokenLexer(stream, state) { + indentInfo = null; + var style = state.tokenize(stream, state); + var current = stream.current(); + + // Handle '.' connected identifiers + if (current === '.') { + style = stream.match(identifiers, false) ? null : ERRORCLASS; + if (style === null && state.lastStyle === 'meta') { + // Apply 'meta' style to '.' connected identifiers when + // appropriate. + style = 'meta'; + } + return style; + } + + // Handle decorators + if (current === '@') { + return stream.match(identifiers, false) ? 'meta' : ERRORCLASS; + } + + if ((style === 'variable' || style === 'builtin') + && state.lastStyle === 'meta') { + style = 'meta'; + } + + // Handle scope changes. + if (current === 'pass' || current === 'return') { + state.dedent += 1; + } + if (current === 'lambda') state.lambda = true; + if ((current === ':' && !state.lambda && state.scopes[0].type == 'py') + || indentInfo === 'indent') { + indent(stream, state); + } + var delimiter_index = '[({'.indexOf(current); + if (delimiter_index !== -1) { + indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1)); + } + if (indentInfo === 'dedent') { + if (dedent(stream, state)) { + return ERRORCLASS; + } + } + delimiter_index = '])}'.indexOf(current); + if (delimiter_index !== -1) { + if (dedent(stream, state, current)) { + return ERRORCLASS; + } + } + if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'py') { + if (state.scopes.length > 1) state.scopes.shift(); + state.dedent -= 1; + } + + return style; + } + + var external = { + startState: function(basecolumn) { + return { + tokenize: tokenBase, + scopes: [{offset:basecolumn || 0, type:'py'}], + lastStyle: null, + lastToken: null, + lambda: false, + dedent: 0 + }; + }, + + token: function(stream, state) { + var style = tokenLexer(stream, state); + + state.lastStyle = style; + + var current = stream.current(); + if (current && style) { + state.lastToken = current; + } + + if (stream.eol() && state.lambda) { + state.lambda = false; + } + return style; + }, + + indent: function(state) { + if (state.tokenize != tokenBase) { + return state.tokenize.isString ? CodeMirror.Pass : 0; + } + + return state.scopes[0].offset; + }, + + lineComment: "#", + fold: "indent" + }; + return external; +}); + +CodeMirror.defineMIME("text/x-python", "python"); + +var words = function(str){return str.split(' ');}; + +CodeMirror.defineMIME("text/x-cython", { + name: "python", + extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ + "extern gil include nogil property public"+ + "readonly struct union DEF IF ELIF ELSE") +}); + +}); diff --git a/v3/js/composingprograms.js b/v3/js/composingprograms.js new file mode 100644 index 000000000..213ca984d --- /dev/null +++ b/v3/js/composingprograms.js @@ -0,0 +1,212 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// simplified version of opt-frontend.js for ../composingprograms.html + + +// Pre-reqs: +// - pytutor.js +// - jquery.ba-bbq.min.js +// - jquery.ba-dotimeout.min.js // for event debouncing: http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/ +// - opt-frontend-common.js +// - js/togetherjs/togetherjs-min.js +// should all be imported BEFORE this file + + +var originFrontendJsFile = 'composingprograms.js'; + + +function TogetherjsReadyHandler() { + populateTogetherJsShareUrl(); + updateChatName(); +} + +function TogetherjsCloseHandler() { + // NOP +} + + +function executeCode(forceStartingInstr, forceRawInputLst) { + if (forceRawInputLst !== undefined) { + rawInputLst = forceRawInputLst; // UGLY global across modules, FIXME + } + + backend_script = python3_backend_script; // Python 3 + + var backendOptionsObj = {cumulative_mode: ($('#cumulativeModeSelector').val() == 'true'), + heap_primitives: false, + show_only_outputs: false, + py_crazy_mode: false, + origin: originFrontendJsFile}; + + var surveyObj = getSurveyObject(); + if (surveyObj) { + backendOptionsObj.survey = surveyObj; + } + + var startingInstruction = forceStartingInstr ? forceStartingInstr : 0; + + var frontendOptionsObj = {startingInstruction: startingInstruction, + executeCodeWithRawInputFunc: executeCodeWithRawInput, + updateOutputCallback: function() {$('#urlOutput,#embedCodeOutput').val('');}, + compactFuncLabels: true, + showAllFrameLabels: true, + } + + executeCodeAndCreateViz(pyInputGetValue(), + backend_script, backendOptionsObj, + frontendOptionsObj, + 'pyOutputPane', + optFinishSuccessfulExecution, handleUncaughtExceptionFunc); +} + +$(document).ready(function() { + setSurveyHTML(); + $('#signoutButton').click(signout); + + genericOptFrontendReady(); // initialize at the very end +}); + + +var chatDisplayName = null; // sign in with Google account to get your real chat name + +// for Google+ Web signin: +// https://developers.google.com/+/web/signin/add-button +function signinCallback(authResult) { + if (authResult) { + if (authResult['error'] == undefined){ + + $("#signinButton").hide(); + $("#loggedInDiv").show(); + + // This sample assumes a client object has been created. + // To learn more about creating a client, check out the starter: + // https://developers.google.com/+/quickstart/javascript + gapi.client.load('plus','v1', function() { + var request = gapi.client.plus.people.get({ + 'userId': 'me' + }); + request.execute(function(resp) { + // From https://developers.google.com/+/web/people/#retrieve_an_authenticated_users_email_address + + // Filter the emails object to find the user's primary account, which might + // not always be the first in the array. The filter() method supports IE9+. + var email = resp['emails'].filter(function(v) { + return v.type === 'account'; // Filter out the primary email + })[0].value; // get the email from the filtered results, should always be defined. + + //alert('Real name: "' + resp.displayName + '", Email addr: "' + email + '"'); + + // if we can actually grab the display name (e.g., from a + // Google+ account), then use it + if (resp.displayName) { + chatDisplayName = resp.displayName; + updateChatName(); + } + + // otherwise try to look up the email address on the server to + // find a real name mapping on the server + else if (email) { + $.get('name_lookup.py', + {email : email}, + function(data) { + // fall back on email address + chatDisplayName = data.name ? data.name + ' [staff]': email; + updateChatName(); + }, + "json"); + } + }); + }); + + redrawConnectors(); // update all arrows at the end + + } else { + console.log('signinCallback: error occurred'); + } + } else { + console.log('signinCallback: empty authResult'); // Something went wrong + } +} + +function updateChatName() { + if (chatDisplayName) { + $("#loggedInNameDisplay").html("Welcome, " + chatDisplayName); + + if (TogetherJS.running) { + var p = TogetherJS.require("peers"); + p.Self.update({name: chatDisplayName}); + console.log('updateChatName:', p.Self.name); + } + + redrawConnectors(); // update all arrows at the end + } +} + +// adapted from https://developers.google.com/+/quickstart/javascript +/** + * Calls the OAuth2 endpoint to disconnect the app for the user. + */ +function signout() { + chatDisplayName = null; + if (supports_html5_storage()) { + localStorage.removeItem('togetherjs.settings.name'); // purge from cache + + // restore the default name + if (TogetherJS.running) { + var defaultName = $.parseJSON(localStorage.getItem('togetherjs.settings.defaultName')); + var p = TogetherJS.require("peers"); + p.Self.update({name: defaultName}); + } + } + + var tok = gapi.auth.getToken(); + if (tok) { + // Revoke the access token. + $.ajax({ + type: 'GET', + url: 'https://accounts.google.com/o/oauth2/revoke?token=' + + tok.access_token, + async: false, + contentType: 'application/json', + dataType: 'jsonp', + success: function(result) { + $('#signinButton').show(); + $('#loggedInDiv').hide(); + redrawConnectors(); // update all arrows at the end + }, + error: function(e) { + console.log(e); + } + }); + } + else { + console.log('signout failed :('); + } +} diff --git a/v3/js/csc108h.js b/v3/js/csc108h.js new file mode 100644 index 000000000..ccd5bb2d1 --- /dev/null +++ b/v3/js/csc108h.js @@ -0,0 +1,92 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// simplified version of opt-frontend.js for ../csc108h.html +// for Paul Gries and Jennifer Campbell at Toronto + + +// Pre-reqs: +// - pytutor.js +// - jquery.ba-bbq.min.js +// - jquery.ba-dotimeout.min.js // for event debouncing: http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/ +// - opt-frontend-common.js +// - js/togetherjs/togetherjs-min.js +// should all be imported BEFORE this file + + +var originFrontendJsFile = 'csc108h.js'; + +function TogetherjsReadyHandler() { + populateTogetherJsShareUrl(); +} + +function TogetherjsCloseHandler() { + // NOP +} + + +function executeCode(forceStartingInstr, forceRawInputLst) { + if (forceRawInputLst !== undefined) { + rawInputLst = forceRawInputLst; // UGLY global across modules, FIXME + } + + backend_script = python3_backend_script; // Python 3 + + var backendOptionsObj = {cumulative_mode: false, + heap_primitives: true, // render all objects on the heap + show_only_outputs: false, + py_crazy_mode: false, + origin: originFrontendJsFile}; + + var surveyObj = getSurveyObject(); + if (surveyObj) { + backendOptionsObj.survey = surveyObj; + } + + var startingInstruction = forceStartingInstr ? forceStartingInstr : 0; + + var frontendOptionsObj = {startingInstruction: startingInstruction, + executeCodeWithRawInputFunc: executeCodeWithRawInput, + disableHeapNesting: true, // render all objects on the heap + drawParentPointers: true, // show environment parent pointers + textualMemoryLabels: true, // use text labels for references + updateOutputCallback: function() {$('#urlOutput,#embedCodeOutput').val('');}, + } + + executeCodeAndCreateViz(pyInputGetValue(), + backend_script, backendOptionsObj, + frontendOptionsObj, + 'pyOutputPane', + optFinishSuccessfulExecution, handleUncaughtExceptionFunc); +} + +$(document).ready(function() { + setSurveyHTML(); + genericOptFrontendReady(); // initialize at the very end +}); diff --git a/v3/js/d3.v2.min.js b/v3/js/d3.v2.min.js new file mode 100644 index 000000000..2a1e13110 --- /dev/null +++ b/v3/js/d3.v2.min.js @@ -0,0 +1,4 @@ +(function(){function d(a,b){try{for(var c in b)Object.defineProperty(a.prototype,c,{value:b[c],enumerable:!1})}catch(d){a.prototype=b}}function f(a){var b=-1,c=a.length,d=[];while(++b=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function H(a,b){var c=Math.pow(10,Math.abs(8-b)*3);return{scale:b>8?function(a){return a/c}:function(a){return a*c},symbol:a}}function N(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function O(a){return function(b){return 1-a(1-b)}}function P(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function Q(a){return a}function R(a){return function(b){return Math.pow(b,a)}}function S(a){return 1-Math.cos(a*Math.PI/2)}function T(a){return Math.pow(2,10*(a-1))}function U(a){return 1-Math.sqrt(1-a*a)}function V(a,b){var c;return arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a),function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function W(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-a)}}function X(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function Y(){d3.event.stopPropagation(),d3.event.preventDefault()}function Z(){var a=d3.event,b;while(b=a.sourceEvent)a=b;return a}function $(a){var b=new z,c=0,d=arguments.length;while(++c360?a-=360:a<0&&(a+=360),a<60?d+(e-d)*a/60:a<180?e:a<240?d+(e-d)*(240-a)/60:d}function g(a){return Math.round(f(a)*255)}var d,e;return a%=360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e,bd(g(a+120),g(a),g(a-120))}function bn(a){return i(a,bt),a}function bu(a){return function(){return bo(a,this)}}function bv(a){return function(){return bp(a,this)}}function bw(a,b){function f(){if(b=this.classList)return b.add(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;c.lastIndex=0,c.test(e)||(e=v(e+" "+a),d?b.baseVal=e:this.className=e)}function g(){if(b=this.classList)return b.remove(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;e=v(e.replace(c," ")),d?b.baseVal=e:this.className=e}function h(){(b.apply(this,arguments)?f:g).call(this)}var c=new RegExp("(^|\\s+)"+d3.requote(a)+"(\\s+|$)","g");if(arguments.length<2){var d=this.node();if(e=d.classList)return e.contains(a);var e=d.className;return c.lastIndex=0,c.test(e.baseVal!=null?e.baseVal:e)}return this.each(typeof b=="function"?h:b?f:g)}function bx(a){return{__data__:a}}function by(a){return function(){return bs(this,a)}}function bz(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bA(a,b){for(var c=0,d=a.length;cb?q():(m.active=b,d.forEach(function(b,c){(c=c.call(a,n,h))&&j.push(c)}),e.start.call(a,n,h),p(f)||d3.timer(p,0,c),1)}function p(c){if(m.active!==b)return q();var d=(c-k)/l,g=f(d),i=j.length;while(i>0)j[--i].call(a,g);if(d>=1)return q(),bK=b,e.end.call(a,n,h),bK=0,1}function q(){return--m.count||delete a.__transition__,1}var j=[],k=a.delay,l=a.duration,m=(a=a.node).__transition__||(a.__transition__={active:0,count:0}),n=a.__data__;++m.count,k<=g?o(g):d3.timer(o,k,c)})},0,c),a}function bG(a,b,c){return c!=""&&bF}function bH(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bF:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=ba(a);return typeof b=="function"?d:b==null?bG:(b+="",e)}function bR(a){var b=bK,c=bQ,d=bO,e=bP;return bK=this.id,bQ=this.ease(),bA(this,function(b,c,d){bO=b.delay,bP=b.duration,a.call(b=b.node,b.__data__,c,d)}),bK=b,bQ=c,bO=d,bP=e,this}function bV(){var a,b=Date.now(),c=bS;while(c)a=b-c.then,a>=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bW()-b;d>24?(isFinite(d)&&(clearTimeout(bU),bU=setTimeout(bV,d)),bT=0):(bT=1,bX(bV))}function bW(){var a=null,b=bS,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bS=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bY(a){var b=[a.a,a.b],c=[a.c,a.d],d=b$(b),e=bZ(b,c),f=b$(b_(c,b,-e))||0;b[0]*c[1]2?cp:co,i=d?bc:bb;return e=g(a,b,i,c),f=g(b,a,i,d3.interpolate),h}function h(a){return e(a)}var e,f;return h.invert=function(a){return f(a)},h.domain=function(b){return arguments.length?(a=b.map(Number),g()):a},h.range=function(a){return arguments.length?(b=a,g()):b},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){return arguments.length?(d=a,g()):d},h.interpolate=function(a){return arguments.length?(c=a,g()):c},h.ticks=function(b){return cm(a,b)},h.tickFormat=function(b){return cn(a,b)},h.nice=function(){return cg(a,ck),g()},h.copy=function(){return ci(a,b,c,d)},g()}function cj(a,b){return d3.rebind(a,b,"range","rangeRound","interpolate","clamp")}function ck(a){return a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1),{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function cl(a,b){var c=ce(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;return f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e,c}function cm(a,b){return d3.range.apply(d3,cl(a,b))}function cn(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(cl(a,b)[2])/Math.LN10+.01))+"f")}function co(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function cp(a,b,c,d){var e=[],f=[],g=0,h=Math.min(a.length,b.length)-1;a[h]0;j--)e.push(c(f)*j)}else{for(;fi;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=cr);if(arguments.length<1)return e;var f=Math.max(.1,a/d.ticks().length),g=b===ct?(h=-1e-12,Math.floor):(h=1e-12,Math.ceil),h;return function(a){return a/c(g(b(a)+h))<=f?e(a):""}},d.copy=function(){return cq(a.copy(),b)},cj(d,a)}function cs(a){return Math.log(a<0?0:a)/Math.LN10}function ct(a){return-Math.log(a>0?0:-a)/Math.LN10}function cu(a,b){function e(b){return a(c(b))}var c=cv(b),d=cv(1/b);return e.invert=function(b){return d(a.invert(b))},e.domain=function(b){return arguments.length?(a.domain(b.map(c)),e):a.domain().map(d)},e.ticks=function(a){return cm(e.domain(),a)},e.tickFormat=function(a){return cn(e.domain(),a)},e.nice=function(){return e.domain(cg(e.domain(),ck))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=cv(b=a),d=cv(1/b),e.domain(f)},e.copy=function(){return cu(a.copy(),b)},cj(e,a)}function cv(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function cw(a,b){function f(b){return d[((c.get(b)||c.set(b,a.push(b)))-1)%d.length]}function g(b,c){return d3.range(a.length).map(function(a){return b+c*a})}var c,d,e;return f.domain=function(d){if(!arguments.length)return a;a=[],c=new j;var e=-1,g=d.length,h;while(++e1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function dh(a){return a.length<3?cP(a):a[0]+cV(a,dg(a))}function di(a){var b,c=-1,d=a.length,e,f;while(++c1){var d=ce(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++id&&(c=b,d=e);return c}function d_(a){return a.reduce(ea,0)}function ea(a,b){return a+b[1]}function eb(a,b){return ec(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function ec(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function ed(a){return[d3.min(a),d3.max(a)]}function ee(a,b){return d3.rebind(a,b,"sort","children","value"),a.links=ei,a.nodes=function(b){return ej=!0,(a.nodes=a)(b)},a}function ef(a){return a.children}function eg(a){return a.value}function eh(a,b){return b.value-a.value}function ei(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function ek(a,b){return a.value-b.value}function el(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function em(a,b){a._pack_next=b,b._pack_prev=a}function en(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function eo(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(ep),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],et(g,h,i),l(i),el(g,i),g._pack_prev=i,el(i,h),h=g._pack_next;for(var m=3;m0&&(a=d)}return a}function eC(a,b){return a.x-b.x}function eD(a,b){return b.x-a.x}function eE(a,b){return a.depth-b.depth}function eF(a,b){function c(a,d){var e=a.children;if(e&&(i=e.length)){var f,g=null,h=-1,i;while(++h=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function eH(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function eI(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function eJ(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function eK(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];return e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0),{x:c,y:d,dx:e,dy:f}}function eL(a){return a.map(eM).join(",")}function eM(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}function eO(a,b){return function(c){return c&&a.hasOwnProperty(c.type)?a[c.type](c):b}}function eP(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}function eQ(a,b){eR.hasOwnProperty(a.type)&&eR[a.type](a,b)}function eS(a,b){eQ(a.geometry,b)}function eT(a,b){for(var c=a.features,d=0,e=c.length;d0}function fg(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function fh(a,b,c,d){var e=a[0],f=b[0],g=c[0],h=d[0],i=a[1],j=b[1],k=c[1],l=d[1],m=e-g,n=f-e,o=h-g,p=i-k,q=j-i,r=l-k,s=(o*p-r*m)/(r*n-o*q);return[e+s*n,i+s*q]}function fj(a,b){var c={list:a.map(function(a,b){return{index:b,x:a[0],y:a[1]}}).sort(function(a,b){return a.yb.y?1:a.xb.x?1:0}),bottomSite:null},d={list:[],leftEnd:null,rightEnd:null,init:function(){d.leftEnd=d.createHalfEdge(null,"l"),d.rightEnd=d.createHalfEdge(null,"l"),d.leftEnd.r=d.rightEnd,d.rightEnd.l=d.leftEnd,d.list.unshift(d.leftEnd,d.rightEnd)},createHalfEdge:function(a,b){return{edge:a,side:b,vertex:null,l:null,r:null}},insert:function(a,b){b.l=a,b.r=a.r,a.r.l=b,a.r=b},leftBound:function(a){var b=d.leftEnd;do b=b.r;while(b!=d.rightEnd&&e.rightOf(b,a));return b=b.l,b},del:function(a){a.l.r=a.r,a.r.l=a.l,a.edge=null},right:function(a){return a.r},left:function(a){return a.l},leftRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[a.side]},rightRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[fi[a.side]]}},e={bisect:function(a,b){var c={region:{l:a,r:b},ep:{l:null,r:null}},d=b.x-a.x,e=b.y-a.y,f=d>0?d:-d,g=e>0?e:-e;return c.c=a.x*d+a.y*e+(d*d+e*e)*.5,f>g?(c.a=1,c.b=e/d,c.c/=d):(c.b=1,c.a=d/e,c.c/=e),c},intersect:function(a,b){var c=a.edge,d=b.edge;if(!c||!d||c.region.r==d.region.r)return null;var e=c.a*d.b-c.b*d.a;if(Math.abs(e)<1e-10)return null;var f=(c.c*d.b-d.c*c.b)/e,g=(d.c*c.a-c.c*d.a)/e,h=c.region.r,i=d.region.r,j,k;h.y=k.region.r.x;return l&&j.side==="l"||!l&&j.side==="r"?null:{x:f,y:g}},rightOf:function(a,b){var c=a.edge,d=c.region.r,e=b.x>d.x;if(e&&a.side==="l")return 1;if(!e&&a.side==="r")return 0;if(c.a===1){var f=b.y-d.y,g=b.x-d.x,h=0,i=0;!e&&c.b<0||e&&c.b>=0?i=h=f>=c.b*g:(i=b.x+b.y*c.b>c.c,c.b<0&&(i=!i),i||(h=1));if(!h){var j=d.x-c.region.l.x;i=c.b*(g*g-f*f)m*m+n*n}return a.side==="l"?i:!i},endPoint:function(a,c,d){a.ep[c]=d;if(!a.ep[fi[c]])return;b(a)},distance:function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}},f={list:[],insert:function(a,b,c){a.vertex=b,a.ystar=b.y+c;for(var d=0,e=f.list,g=e.length;dh.ystar||a.ystar==h.ystar&&b.x>h.vertex.x)continue;break}e.splice(d,0,a)},del:function(a){for(var b=0,c=f.list,d=c.length;bo.y&&(p=n,n=o,o=p,t="r"),s=e.bisect(n,o),m=d.createHalfEdge(s,t),d.insert(k,m),e.endPoint(s,fi[t],r),q=e.intersect(k,m),q&&(f.del(k),f.insert(k,q,e.distance(q,n))),q=e.intersect(m,l),q&&f.insert(m,q,e.distance(q,n));else break}for(i=d.right(d.leftEnd);i!=d.rightEnd;i=d.right(i))b(i.edge)}function fk(){return{leaf:!0,nodes:[],point:null}}function fl(a,b,c,d,e,f){if(!a(b,c,d,e,f)){var g=(c+e)*.5,h=(d+f)*.5,i=b.nodes;i[0]&&fl(a,i[0],c,d,g,h),i[1]&&fl(a,i[1],g,d,e,h),i[2]&&fl(a,i[2],c,h,g,f),i[3]&&fl(a,i[3],g,h,e,f)}}function fm(a){return{x:a[0],y:a[1]}}function fo(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function fq(a,b,c,d){var e,f,g=0,h=b.length,i=c.length;while(g=i)return-1;e=b.charCodeAt(g++);if(e==37){f=fw[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}function fx(a,b,c){return fz.test(b.substring(c,c+=3))?c:-1}function fy(a,b,c){fA.lastIndex=0;var d=fA.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function fC(a,b,c){var d=fD.get(b.substring(c,c+=3).toLowerCase());return d==null?-1:(a.m=d,c)}function fE(a,b,c){fF.lastIndex=0;var d=fF.exec(b.substring(c,c+12));return d?(a.m=fG.get(d[0].toLowerCase()),c+=d[0].length):-1}function fI(a,b,c){return fq(a,fv.c.toString(),b,c)}function fJ(a,b,c){return fq(a,fv.x.toString(),b,c)}function fK(a,b,c){return fq(a,fv.X.toString(),b,c)}function fL(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+4));return d?(a.y=+d[0],c+=d[0].length):-1}function fM(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.y=fN()+ +d[0],c+=d[0].length):-1}function fN(){return~~((new Date).getFullYear()/1e3)*1e3}function fO(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.m=d[0]-1,c+=d[0].length):-1}function fP(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.d=+d[0],c+=d[0].length):-1}function fQ(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.H=+d[0],c+=d[0].length):-1}function fR(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.M=+d[0],c+=d[0].length):-1}function fS(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+2));return d?(a.S=+d[0],c+=d[0].length):-1}function fT(a,b,c){fU.lastIndex=0;var d=fU.exec(b.substring(c,c+3));return d?(a.L=+d[0],c+=d[0].length):-1}function fV(a,b,c){var d=fW.get(b.substring(c,c+=2).toLowerCase());return d==null?-1:(a.p=d,c)}function fX(a){var b=a.getTimezoneOffset(),c=b>0?"-":"+",d=~~(Math.abs(b)/60),e=Math.abs(b)%60;return c+fr(d)+fr(e)}function fZ(a){return a.toISOString()}function f$(a,b,c){function d(b){var c=a(b),d=f(c,1);return b-c1)while(gb?1:a>=b?0:NaN},d3.descending=function(a,b){return ba?1:b>=a?0:NaN},d3.mean=function(a,b){var c=a.length,d,e=0,f=-1,g=0;if(arguments.length===1)while(++f1&&(a=a.map(b)),a=a.filter(r),a.length?d3.quantile(a.sort(d3.ascending),.5):undefined},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++cf&&(e=f)}else{while(++cf&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++ce&&(e=f)}else{while(++ce&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++cf&&(e=f),gf&&(e=f),g1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}}},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f>1;a.call(b,b[f],f)>1;c0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,k=b[g++],l,m,n=new j,o,p={};while(++h=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});return f&&e.sort(function(a,b){return f(a.key,b.key)}),e}var a={},b=[],c=[],d,e;return a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){return b.push(c),a},a.sortKeys=function(d){return c[b.length-1]=d,a},a.sortValues=function(b){return d=b,a},a.rollup=function(b){return e=b,a},a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++db)d.push(g/e);else while((g=a+c*++f)=200&&a<300||a===304?d:null)}},d.send(null)},d3.text=function(a,b,c){function d(a){c(a&&a.responseText)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)},d3.json=function(a,b){d3.text(a,"application/json",function(a){b(a?JSON.parse(a):null)})},d3.html=function(a,b){d3.text(a,"text/html",function(a){if(a!=null){var c=document.createRange();c.selectNode(document.body),a=c.createContextualFragment(a)}b(a)})},d3.xml=function(a,b,c){function d(a){c(a&&a.responseXML)}arguments.length<3&&(c=b,b=null),d3.xhr(a,b,d)};var y={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:y,qualify:function(a){var b=a.indexOf(":"),c=a;return b>=0&&(c=a.substring(0,b),a=a.substring(b+1)),y.hasOwnProperty(c)?{space:y[c],local:a}:a}},d3.dispatch=function(){var a=new z,b=-1,c=arguments.length;while(++b0&&(d=a.substring(c+1),a=a.substring(0,c)),arguments.length<2?this[a].on(d):this[a].on(d,b)},d3.format=function(a){var b=B.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=1,k="",l=!1;h&&(h=+h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=100,k="%",i="f";break;case"p":j=100,k="%",i="r";break;case"d":l=!0,h=0;break;case"s":j=-1,i="r"}return i=="r"&&!h&&(i="g"),i=C.get(i)||E,function(a){if(l&&a%1)return"";var b=a<0&&(a=-a)?"−":d;if(j<0){var m=d3.formatPrefix(a,h);a=m.scale(a),k=m.symbol}else a*=j;a=i(a,h);if(e){var n=a.length+b.length;n=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,C=d3.map({g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){return d3.round(a,b=D(a,b)).toFixed(Math.max(0,Math.min(20,b)))}}),G=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(H);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,D(a,b))),c=1+Math.floor(1e-12+Math.log(a)/Math.LN10),c=Math.max(-24,Math.min(24,Math.floor((c<=0?c+1:c-1)/3)*3))),G[8+c/3]};var I=R(2),J=R(3),K=function(){return Q},L=d3.map({linear:K,poly:R,quad:function(){return I},cubic:function(){return J},sin:function(){return S},exp:function(){return T},circle:function(){return U},elastic:V,back:W,bounce:function(){return X}}),M=d3.map({"in":Q,out:O,"in-out":P,"out-in":function(a){return P(O(a))}});d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return c=L.get(c)||K,d=M.get(d)||Q,N(d(c.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){return b-=a,function(c){return a+b*c}},d3.interpolateRound=function(a,b){return b-=a,function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;_.lastIndex=0;for(d=0;c=_.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=_.lastIndex;f180?k+=360:k-j>180&&(j+=360),d.push({i:c.push(c.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(j,k)})):k&&c.push(c.pop()+"rotate("+k+")"),l!=m?d.push({i:c.push(c.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(l,m)}):m&&c.push(c.pop()+"skewX("+m+")"),n[0]!=o[0]||n[1]!=o[1]?(e=c.push(c.pop()+"scale(",null,",",null,")"),d.push({i:e-4,x:d3.interpolateNumber(n[0],o[0])},{i:e-2,x:d3.interpolateNumber(n[1],o[1])})):(o[0]!=1||o[1]!=1)&&c.push(c.pop()+"scale("+o+")"),e=d.length,function(a){var b=-1,f;while(++b180?f-=360:f<-180&&(f+=360),function(a){return bm(c+f*a,d+g*a,e+h*a).toString()}},d3.interpolateArray=function(a,b){var c=[],d=[],e=a.length,f=b.length,g=Math.min(a.length,b.length),h;for(h=0;h1){while(++e=0;)if(f=c[d])e&&e!==f.nextSibling&&e.parentNode.insertBefore(f,e),e=f;return this},bt.sort=function(a){a=bz.apply(this,arguments);for(var b=-1,c=this.length;++b0&&(a=a.substring(0,e)),arguments.length<2?(e=this.node()[d])&&e._:this.each(function(e,f){function i(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this,h=g[d];h&&(g.removeEventListener(a,h,h.$),delete g[d]),b&&(g.addEventListener(a,g[d]=i,i.$=c),i._=b)})},bt.each=function(a){return bA(this,function(b,c,d){a.call(b,b.__data__,c,d)})},bt.call=function(a){return a.apply(this,(arguments[0]=this,arguments)),this},bt.empty=function(){return!this.node()},bt.node=function(a){for(var b=0,c=this.length;b=cF?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=cG,b=cH,c=cI,d=cJ;return e.innerRadius=function(b){return arguments.length?(a=p(b),e):a},e.outerRadius=function(a){return arguments.length?(b=p(a),e):b},e.startAngle=function(a){return arguments.length?(c=p(a),e):c},e.endAngle=function(a){return arguments.length?(d=p(a),e):d},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+cE;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cE=-Math.PI/2,cF=2*Math.PI-1e-6;d3.svg.line=function(){return cK(m)};var cN="linear",cO=d3.map({linear:cP,"step-before":cQ,"step-after":cR,basis:cX,"basis-open":cY,"basis-closed":cZ,bundle:c$,cardinal:cU,"cardinal-open":cS,"cardinal-closed":cT,monotone:dh}),da=[0,2/3,1/3,0],db=[0,1/3,2/3,0],dc=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cK(di);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cQ.reverse=cR,cR.reverse=cQ,d3.svg.area=function(){return dj(Object)},d3.svg.area.radial=function(){var a=dj(di);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1,a},d3.svg.chord=function(){function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1,f.a1-f.a0)+j(f.r,f.p1,e.r,e.p0))+"Z"}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+cE,k=e.call(a,h,g)+cE;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function i(a,b,c){return"A"+a+","+a+" 0 "+ +(c>Math.PI)+",1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=dk,b=dl,c=dm,d=cI,e=cJ;return f.radius=function(a){return arguments.length?(c=p(a),f):c},f.source=function(b){return arguments.length?(a=p(b),f):a},f.target=function(a){return arguments.length?(b=p(a),f):b},f.startAngle=function(a){return arguments.length?(d=p(a),f):d},f.endAngle=function(a){return arguments.length?(e=p(a),f):e},f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(c),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=dk,b=dl,c=dq;return d.source=function(b){return arguments.length?(a=p(b),d):a},d.target=function(a){return arguments.length?(b=p(a),d):b},d.projection=function(a){return arguments.length?(c=a,d):c},d},d3.svg.diagonal +.radial=function(){var a=d3.svg.diagonal(),b=dq,c=a.projection;return a.projection=function(a){return arguments.length?c(dr(b=a)):b},a},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function c(c,d){return(dv.get(a.call(this,c,d))||du)(b.call(this,c,d))}var a=dt,b=ds;return c.type=function(b){return arguments.length?(a=p(b),c):a},c.size=function(a){return arguments.length?(b=p(a),c):b},c};var dv=d3.map({circle:du,cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*dx)),c=b*dx;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/dw),c=b*dw/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/dw),c=b*dw/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}});d3.svg.symbolTypes=dv.keys();var dw=Math.sqrt(3),dx=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function k(k){k.each(function(){var k=d3.select(this),l=h==null?a.ticks?a.ticks.apply(a,g):a.domain():h,m=i==null?a.tickFormat?a.tickFormat.apply(a,g):String:i,n=dA(a,l,j),o=k.selectAll(".minor").data(n,String),p=o.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),q=d3.transition(o.exit()).style("opacity",1e-6).remove(),r=d3.transition(o).style("opacity",1),s=k.selectAll("g").data(l,String),t=s.enter().insert("g","path").style("opacity",1e-6),u=d3.transition(s.exit()).style("opacity",1e-6).remove(),v=d3.transition(s).style("opacity",1),w,x=cf(a),y=k.selectAll(".domain").data([0]),z=y.enter().append("path").attr("class","domain"),A=d3.transition(y),B=a.copy(),C=this.__chart__||B;this.__chart__=B,t.append("line").attr("class","tick"),t.append("text");var D=t.select("line"),E=v.select("line"),F=s.select("text").text(m),G=t.select("text"),H=v.select("text");switch(b){case"bottom":w=dy,p.attr("y2",d),r.attr("x2",0).attr("y2",d),D.attr("y2",c),G.attr("y",Math.max(c,0)+f),E.attr("x2",0).attr("y2",c),H.attr("x",0).attr("y",Math.max(c,0)+f),F.attr("dy",".71em").attr("text-anchor","middle"),A.attr("d","M"+x[0]+","+e+"V0H"+x[1]+"V"+e);break;case"top":w=dy,p.attr("y2",-d),r.attr("x2",0).attr("y2",-d),D.attr("y2",-c),G.attr("y",-(Math.max(c,0)+f)),E.attr("x2",0).attr("y2",-c),H.attr("x",0).attr("y",-(Math.max(c,0)+f)),F.attr("dy","0em").attr("text-anchor","middle"),A.attr("d","M"+x[0]+","+ -e+"V0H"+x[1]+"V"+ -e);break;case"left":w=dz,p.attr("x2",-d),r.attr("x2",-d).attr("y2",0),D.attr("x2",-c),G.attr("x",-(Math.max(c,0)+f)),E.attr("x2",-c).attr("y2",0),H.attr("x",-(Math.max(c,0)+f)).attr("y",0),F.attr("dy",".32em").attr("text-anchor","end"),A.attr("d","M"+ -e+","+x[0]+"H0V"+x[1]+"H"+ -e);break;case"right":w=dz,p.attr("x2",d),r.attr("x2",d).attr("y2",0),D.attr("x2",c),G.attr("x",Math.max(c,0)+f),E.attr("x2",c).attr("y2",0),H.attr("x",Math.max(c,0)+f).attr("y",0),F.attr("dy",".32em").attr("text-anchor","start"),A.attr("d","M"+e+","+x[0]+"H0V"+x[1]+"H"+e)}if(a.ticks)t.call(w,C),v.call(w,B),u.call(w,B),p.call(w,C),r.call(w,B),q.call(w,B);else{var I=B.rangeBand()/2,J=function(a){return B(a)+I};t.call(w,J),v.call(w,J)}})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h=null,i,j=0;return k.scale=function(b){return arguments.length?(a=b,k):a},k.orient=function(a){return arguments.length?(b=a,k):b},k.ticks=function(){return arguments.length?(g=arguments,k):g},k.tickValues=function(a){return arguments.length?(h=a,k):h},k.tickFormat=function(a){return arguments.length?(i=a,k):i},k.tickSize=function(a,b,f){if(!arguments.length)return c;var g=arguments.length-1;return c=+a,d=g>1?+b:c,e=g>0?+arguments[g]:c,k},k.tickPadding=function(a){return arguments.length?(f=+a,k):f},k.tickSubdivide=function(a){return arguments.length?(j=+a,k):j},k},d3.svg.brush=function(){function g(a){a.each(function(){var a=d3.select(this),e=a.selectAll(".background").data([0]),f=a.selectAll(".extent").data([0]),l=a.selectAll(".resize").data(d,String),m;a.style("pointer-events","all").on("mousedown.brush",k).on("touchstart.brush",k),e.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.enter().append("rect").attr("class","extent").style("cursor","move"),l.enter().append("g").attr("class",function(a){return"resize "+a}).style("cursor",function(a){return dB[a]}).append("rect").attr("x",function(a){return/[ew]$/.test(a)?-3:null}).attr("y",function(a){return/^[ns]/.test(a)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),l.style("display",g.empty()?"none":null),l.exit().remove(),b&&(m=cf(b),e.attr("x",m[0]).attr("width",m[1]-m[0]),i(a)),c&&(m=cf(c),e.attr("y",m[0]).attr("height",m[1]-m[0]),j(a)),h(a)})}function h(a){a.selectAll(".resize").attr("transform",function(a){return"translate("+e[+/e$/.test(a)][0]+","+e[+/^s/.test(a)][1]+")"})}function i(a){a.select(".extent").attr("x",e[0][0]),a.selectAll(".extent,.n>rect,.s>rect").attr("width",e[1][0]-e[0][0])}function j(a){a.select(".extent").attr("y",e[0][1]),a.selectAll(".extent,.e>rect,.w>rect").attr("height",e[1][1]-e[0][1])}function k(){function x(){var a=d3.event.changedTouches;return a?d3.touches(d,a)[0]:d3.mouse(d)}function y(){d3.event.keyCode==32&&(q||(r=null,s[0]-=e[1][0],s[1]-=e[1][1],q=2),Y())}function z(){d3.event.keyCode==32&&q==2&&(s[0]+=e[1][0],s[1]+=e[1][1],q=0,Y())}function A(){var a=x(),d=!1;t&&(a[0]+=t[0],a[1]+=t[1]),q||(d3.event.altKey?(r||(r=[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]),s[0]=e[+(a[0]0?e=c:e=0:c>0&&(b.start({type:"start",alpha:e=c}),d3.timer(a.tick)),a):e},a.start=function(){function p(a,c){var d=t(b),e=-1,f=d.length,g;while(++ee&&(e=h),d.push(h)}for(g=0;g0){f=-1;while(++f=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]))}return g}var a=!0,b=Number,c=ed,d=eb;return e.value=function(a){return arguments.length?(b=a,e):b},e.range=function(a){return arguments.length?(c=p(a),e):c},e.bins=function(a){return arguments.length?(d=typeof a=="number"?function(b){return ec(b,a)}:p(a),e):d},e.frequency=function(b){return arguments.length?(a=!!b,e):a},e},d3.layout.hierarchy=function(){function d(e,g,h){var i=b.call(f,e,g),j=ej?e:{data:e};j.depth=g,h.push(j);if(i&&(l=i.length)){var k=-1,l,m=j.children=[],n=0,o=g+1,p;while(++k0&&(eH(eI(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!eA(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!ez(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];eF(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=eB(g,eD),l=eB(g,eC),m=eB(g,eE),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return eF(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=ey,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},ee(d,a)},d3.layout.treemap=function(){function i(a,b){var c=-1,d=a.length,e,f;while(++c0)d.push(g=f[o-1]),d.area+=g.area,(k=l(d,n))<=h?(f.pop(),h=k):(d.area-=d.pop().area,m(d,n,c,!1),n=Math.min(c.dx,c.dy),d.length=d.area=0,h=Infinity);d.length&&(m(d,n,c,!0),d.length=d.area=0),b.forEach(j)}}function k(a){var b=a.children;if(b&&b.length){var c=e(a),d=b.slice(),f,g=[];i(d,c.dx*c.dy/a.value),g.area=0;while(f=d.pop())g.push(f),g.area+=f.area,f.z!=null&&(m(g,f.z?c.dx:c.dy,c,!d.length),g.length=g.area=0);b.forEach(k)}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++ge&&(e=d)}return c*=c,b*=b,c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++fd.dx)j=d.dx;while(++f=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++50?b:f<-140?c:g<21?d:a)(e)}var a=d3.geo.albers(),b=d3.geo.albers().origin([-160,60]).parallels([55,65]),c=d3.geo.albers().origin([-160,20]).parallels([8,18]),d=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(f){return arguments.length?(a.scale(f),b.scale(f*.6),c.scale(f),d.scale(f*1.5),e.translate(a.translate())):a.scale()},e.translate=function(f){if(!arguments.length)return a.translate();var g=a.scale()/1e3,h=f[0],i=f[1];return a.translate(f),b.translate([h-400*g,i+170*g]),c.translate([h-190*g,i+200*g]),d.translate([h+580*g,i+430*g]),e},e.scale(a.scale())},d3.geo.bonne=function(){function g(g){var h=g[0]*eN-c,i=g[1]*eN-d;if(e){var j=f+e-i,k=h*Math.cos(i)/j;h=j*Math.sin(k),i=j*Math.cos(k)-f}else h*=Math.cos(i),i*=-1;return[a*h+b[0],a*i+b[1]]}var a=200,b=[480,250],c,d,e,f;return g.invert=function(d){var g=(d[0]-b[0])/a,h=(d[1]-b[1])/a;if(e){var i=f+h,j=Math.sqrt(g*g+i*i);h=f+e-j,g=c+j*Math.atan2(g,i)/Math.cos(h)}else h*=-1,g/=Math.cos(h);return[g/eN,h/eN]},g.parallel=function(a){return arguments.length?(f=1/Math.tan(e=a*eN),g):e/eN},g.origin=function(a){return arguments.length?(c=a[0]*eN,d=a[1]*eN,g):[c/eN,d/eN]},g.scale=function(b){return arguments.length?(a=+b,g):a},g.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],g):b},g.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function c(c){var d=c[0]/360,e=-c[1]/360;return[a*d+b[0],a*e+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,-360*e]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.mercator=function(){function c(c){var d=c[0]/360,e=-(Math.log(Math.tan(Math.PI/4+c[1]*eN/2))/eN)/360;return[a*d+b[0],a*Math.max(-0.5,Math.min(.5,e))+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,2*Math.atan(Math.exp(-360*e*eN))/eN-90]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.path=function(){function e(c,e){typeof a=="function"&&(b=eP(a.apply(this,arguments))),g(c);var f=d.length?d.join(""):null;return d=[],f}function f(a){return c(a).join(",")}function i(a){var b=l(a[0]),c=0,d=a.length;while(++c0){d.push("M");while(++h0){d.push("M");while(++kd&&(d=a),fe&&(e=f)}),[[b,c],[d,e]]};var eR={Feature:eS,FeatureCollection:eT,GeometryCollection:eU,LineString:eV,MultiLineString:eW,MultiPoint:eV,MultiPolygon:eX,Point:eY,Polygon:eZ};d3.geo.circle=function(){function e(){}function f(a){return d.distance(a)=k*k+l*l?d[f].index=-1:(d[m].index=-1,o=d[f].angle,m=f,n=g)):(o=d[f].angle,m=f,n=g);e.push(h);for(f=0,g=0;f<2;++g)d[g].index!==-1&&(e.push(d[g].index),f++);p=e.length;for(;g=0?(c=a.ep.r,d=a.ep.l):(c=a.ep.l,d=a.ep.r),a.a===1?(g=c?c.y:-1e6,e=a.c-a.b*g,h=d?d.y:1e6,f=a.c-a.b*h):(e=c?c.x:-1e6,g=a.c-a.a*e,f=d?d.x:1e6,h=a.c-a.a*f);var i=[e,g],j=[f,h];b[a.region.l.index].push(i,j),b[a.region.r.index].push(i,j)}),b.map(function(b,c){var d=a[c][0],e=a[c][1];return b.forEach(function(a){a.angle=Math.atan2(a[0]-d,a[1]-e)}),b.sort(function(a,b){return a.angle-b.angle}).filter(function(a,c){return!c||a.angle-b[c-1].angle>1e-10})})};var fi={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];return fj(a,function(c){b[c.region.l.index].push(a[c.region.r.index])}),b.forEach(function(b,d){var e=a[d],f=e[0],g=e[1];b.forEach(function(a){a.angle=Math.atan2(a[0]-f,a[1]-g)}),b.sort(function(a,b){return a.angle-b.angle});for(var h=0,i=b.length-1;h=g,j=b.y>=h,l=(j<<1)+i;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=fk()),i?c=g:e=g,j?d=h:f=h,k(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(fm));if(arguments.length<5)if(arguments.length===3)e=d=c,c=b;else{b=c=Infinity,d=e=-Infinity;while(++gd&&(d=f.x),f.y>e&&(e=f.y);var i=d-b,j=e-c;i>j?e=c+i:d=b+j}var m=fk();return m.add=function(a){k(m,a,b,c,d,e)},m.visit=function(a){fl(a,m,b,c,d,e)},a.forEach(m.add),m},d3.time={};var fn=Date;fo.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){fp.setUTCDate.apply(this._,arguments)},setDay:function(){fp.setUTCDay.apply(this._,arguments)},setFullYear:function(){fp.setUTCFullYear.apply(this._,arguments)},setHours:function(){fp.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){fp.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){fp.setUTCMinutes.apply(this._,arguments)},setMonth:function(){fp.setUTCMonth.apply(this._,arguments)},setSeconds:function(){fp.setUTCSeconds.apply(this._,arguments)},setTime:function(){fp.setTime.apply(this._,arguments)}};var fp=Date.prototype;d3.time.format=function(a){function c(c){var d=[],e=-1,f=0,g,h;while(++e=12?"PM":"AM"},S:function(a){return fr(a.getSeconds())},U:function(a){return fr(d3.time.sundayOfYear(a))},w:function(a){return a.getDay()},W:function(a){return fr(d3.time.mondayOfYear(a))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return fr(a.getFullYear()%100)},Y:function(a){return ft(a.getFullYear()%1e4)},Z:fX,"%":function(a){return"%"}},fw={a:fx,A:fy,b:fC,B:fE,c:fI,d:fP,e:fP,H:fQ,I:fQ,L:fT,m:fO,M:fR,p:fV,S:fS,x:fJ,X:fK,y:fM,Y:fL},fz=/^(?:sun|mon|tue|wed|thu|fri|sat)/i,fA=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i,fB=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],fD=d3.map({jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}),fF=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,fG=d3.map({january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11}),fH=["January","February","March","April","May","June","July","August","September","October","November","December"],fU=/\s*\d+/,fW=d3.map({am:0,pm:1});d3.time.format.utc=function(a){function c(a){try{fn=fo;var c=new fn;return c._=a,b(c)}finally{fn=Date}}var b=d3.time.format(a);return c.parse=function(a){try{fn=fo;var c=b.parse(a);return c&&c._}finally{fn=Date}},c.toString=b.toString,c};var fY=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?fZ:fY,fZ.parse=function(a){var b=new Date(a);return isNaN(b)?null:b},fZ.toString=fY.toString,d3.time.second=f$(function(a){return new fn(Math.floor(a/1e3)*1e3)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*1e3)},function(a){return a.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=f$(function(a){return new fn(Math.floor(a/6e4)*6e4)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*6e4)},function(a){return a.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=f$(function(a){var b=a.getTimezoneOffset()/60;return new fn((Math.floor(a/36e5-b)+b)*36e5)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*36e5)},function(a){return a.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=f$(function(a){return new fn(a.getFullYear(),a.getMonth(),a.getDate())},function(a,b){a.setDate(a.getDate()+b)},function(a){return a.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(a){var b=d3.time.year(a);return Math.floor((a-b)/864e5-(a.getTimezoneOffset()-b.getTimezoneOffset())/1440)},fB.forEach(function(a,b){a=a.toLowerCase(),b=7-b;var c=d3.time[a]=f$(function(a){return(a=d3.time.day(a)).setDate(a.getDate()-(a.getDay()+b)%7),a},function(a,b){a.setDate(a.getDate()+Math.floor(b)*7)},function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)-(c!==b)});d3.time[a+"s"]=c.range,d3.time[a+"s"].utc=c.utc.range,d3.time[a+"OfYear"]=function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=f$(function(a){return new fn(a.getFullYear(),a.getMonth(),1)},function(a,b){a.setMonth(a.getMonth()+b)},function(a){return a.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=f$(function(a){return new fn(a.getFullYear(),0,1)},function(a,b){a.setFullYear(a.getFullYear()+b)},function(a){return a.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var gg=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],gh=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],gi=[[d3.time.format("%Y"),function(a){return!0}],[d3.time.format("%B"),function(a){return a.getMonth()}],[d3.time.format("%b %d"),function(a){return a.getDate()!=1}],[d3.time.format("%a %d"),function(a){return a.getDay()&&a.getDate()!=1}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]],gj=d3.scale.linear(),gk=gd(gi);gh.year=function(a,b){return gj.domain(a.map(gf)).ticks(b).map(ge)},d3.time.scale=function(){return ga(d3.scale.linear(),gh,gk)};var gl=gh.map(function(a){return[a[0].utc,a[1]]}),gm=[[d3.time.format.utc("%Y"),function(a){return!0}],[d3.time.format.utc("%B"),function(a){return a.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(a){return a.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(a){return a.getUTCDay()&&a.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(a){return a.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(a){return a.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(a){return a.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(a){return a.getUTCMilliseconds()}]],gn=gd(gm);gl.year=function(a,b){return gj.domain(a.map(gp)).ticks(b).map(go)},d3.time.scale.utc=function(){return ga(d3.scale.linear(),gl,gn)}})(); \ No newline at end of file diff --git a/v3/js/diff_match_patch.js b/v3/js/diff_match_patch.js new file mode 100755 index 000000000..c41b51327 --- /dev/null +++ b/v3/js/diff_match_patch.js @@ -0,0 +1,49 @@ +(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32} +diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a, +b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a}; +diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l= +u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]}; +diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)}; +diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;fd?a=a.substring(c-d):c=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null; +var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.lengthd[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]}; +diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}}; +diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_); +return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]= +h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/; +diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;fb)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)}; +diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=//g,f=/\n/g,g=0;g");switch(h){case 1:b[g]=''+j+"";break;case -1:b[g]=''+j+"";break;case 0:b[g]=""+j+""}}return b.join("")}; +diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;cthis.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h}; +diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c=2*this.Patch_Margin&& +e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;cthis.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g); +if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;ie[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0, +c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c}; +diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&& +(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c\ +

Step N/A

\ +
\ +
Step N/A\ +
'); + myViz.domRoot = myViz.domRoot.find('div.HolisticVisualizer'); + myViz.domRootD3 = myViz.domRootD3.select('div.HolisticVisualizer'); + + var pregeneratedHTML = '
\ +
\ + \ + \ +
\ + Connecting line\ +
\ + Debug panel\ +
\ + \ +
\ +
\ +
\ +
\ + \ +
\ +
\ +

Debug: step N/A

\ +
\ +
\ +
'; + + myViz.domRoot.html(pregeneratedHTML); + + params.hideCode = true; + myViz.altVisualizer = new ExecutionVisualizer('altVisual', dat, params); + myViz.tooltipVisualizer = new ExecutionVisualizer('holisticTooltipVisual', dat, params); + + /* + * ================================= + * DATASET + * ================================= + */ + + var trace = dat; + // build dataset from trace + var dataset = []; + for (var i = 0; i < trace.trace.length; i++) { + // we want indexing to start at 0 - offset of -1 + dataset.push(trace.trace[i].line - 1); + } + + /* + * ================================= + * CONSTANTS + * ================================= + */ + var NO_VALUE = '~'; + + var max_value = Math.max.apply(Math, dataset); + var num_rows = max_value + 1; + + // width and height + var padding = 17; + var col_w = 26; + var col_mid = col_w / 2; + var row_h = 24; + var row_mid = 12; + var w = dataset.length * col_w; + var h = num_rows * row_h; + var final_h = h + row_h; + + // track alt visual data + var altVisualStep = 0; + + /* + * ================================= + * CODE TABLE + * ================================= + */ + var code = trace.code.split('\n'); + var table = myViz.domRoot.find('#code'); + + for (var i = 0; i < code.length; i++) { + table.append('' + + '
' + code[i] + '
' + + '
' + (i+1) + ' 
' + + ''); + } + + // adjust width and height of table + myViz.domRoot.find('table').attr('height',h); + myViz.domRoot.find('td').attr('height',row_h); + myViz.domRoot.find('tr').attr('height',row_h); + + /* + * ================================= + * VAR-SELECT MENU + * ================================= + */ + // globals + var global_group = document.createElement('optgroup'); + global_group.setAttribute('label', 'Globals'); + var globals = {}; + for (var i = 0; i < trace.trace.length; i++) { + for (var j = 0; j < trace.trace[i].ordered_globals.length; j++) { + var x = trace.trace[i].ordered_globals[j]; + if (!(x in globals)) { + var option = document.createElement('option'); + option.text = option.value = x; + global_group.appendChild(option, null); + globals[x] = 1; + } + } + } + myViz.domRoot.find('#var-select').append(global_group); + + // functions + var functions = {}; + for (var i = 0; i < trace.trace.length; i++) { + if (trace.trace[i].func_name != "") { + var func = trace.trace[i].func_name; + if (!(func in functions)) { + var function_group = document.createElement('optgroup'); + function_group.setAttribute('label', trace.trace[i].func_name); + functions[trace.trace[i].func_name] = 1; + var function_vars = {}; + + var n = trace.trace[i].stack_to_render.length; + if (n > 0) { // pgbovine - added guard + + for (var j = 0; j < trace.trace[i].stack_to_render[n-1].ordered_varnames.length; j++) { + var x = trace.trace[i].stack_to_render[n-1].ordered_varnames[j]; + if (!(x in function_vars) && + x != '__return__') { + var option = document.createElement('option'); + option.text = option.value = x; + function_group.appendChild(option, null); + function_vars[x] = 1; + } + } + + } + myViz.domRoot.find('#var-select').append(function_group); + } + } + } + + /* + * ================================= + * SVG CONSTRUCTION + * ================================= + */ + // construct code trace svg + var d3image = myViz.domRootD3.select("#slider"); + var svg = d3image.append("svg:svg") + .attr("width", w) + .attr("height", final_h); + + // scales + var xScale = d3.scale.linear() + .domain([0, dataset.length-1]) + .range([col_mid, w - col_mid]); + // xScale(i) = (i * col_w) + col_mid + var yScale = d3.scale.linear() + .domain([0, max_value]) + .range([row_mid, h - row_mid]); + // yScale(d) = (d * row_h) + row_mid + + /* + * ================================= + * BACKGROUND GROUP + * ================================= + */ + // var backgroundGroup = svg.append("svg:g"); + // var rows = backgroundGroup.selectAll("rect") + // .data(d3.range(num_rows + 1)) + // .enter() + // .append("svg:rect"); + + // rows.attr("x", 0) + // .attr("y", function(d, i) { + // return (d * row_h); + // }) + // .attr("width", w) + // .attr("height", row_h) + // .attr("fill", function(d, i) { + // if (d % 2 == 0) { + // return "#D5F1F1"; + // } else { + // return "white"; + // } + // }); + + /* + * ================================= + * TEXT GROUP + * ================================= + */ + var textGroup = svg.append("svg:g"); + var values = textGroup.selectAll("text") + .data(dataset) + .enter() + .append("text"); + + values.text( + function(d, i) { + var val = myViz.domRoot.find('#var-select').val(); + if (val == 'default') { + return NO_VALUE; + } + + if (myViz.domRoot.find('#var-select').parent().attr('label') == 'globals') { + if (val in trace.trace[i].globals) { + return trace.trace[i].globals[val]; + } else { + return NO_VALUE; + } + } else { + var n = trace.trace[i].stack_to_render.length; + if (n > 0 && + val in trace.trace[i].stack_to_render[n-1].encoded_locals && + myViz.domRoot.find('#var-select').parent().attr('label') == trace.trace[i].stack_to_render[n-1].func_name) { + return trace.trace[i].stack_to_render[n-1].encoded_locals[val]; + } else { + return NO_VALUE; + } + } + }) + .attr("x", function(d, i) { + return xScale(i) - 4; + }) + .attr("y", function(d, i) { + return yScale(d) + 4; + }) + .style("visibility", "hidden"); + + /* + * ================================= + * CONNECTOR GROUP + * ================================= + */ + var connectorGroup = svg.append("svg:g"); + + // create a line function that can convert data[] into x and y points + var line = d3.svg.line() + .x(function(d,i) { + return xScale(d[0]); + }) + .y(function(d) { + return yScale(d[1]); + }) + .interpolate('linear'); + + // TODO: this doesn't interpolate the way i want - let's do it manually instead + var curvedLine = d3.svg.line() + .x(function(d,i) { + return xScale(d[0]); + }) + .y(function(d) { + return yScale(d[1]); + }) + .interpolate('basis'); + + // tweak path data to include curves + var straightData = []; + var callData = []; + var callTextData = []; + var returnData = []; + + var specialSegmentsData = []; + for (var i = 0; i < dataset.length; i++) { + if (trace.trace[i].event == 'call') { + if ((i-1) > 0) { + specialSegmentsData.push([i-1, i, dataset[i], 'call']); + } + } else if (trace.trace[i].event == 'return') { + if ((i+1) < dataset.length) { + specialSegmentsData.push([i, i+1, dataset[i], 'return']); + } + } + } + specialSegmentsData.push([dataset.length, dataset.length, dataset[-1], 'end']); + + for (var i = 0; i < specialSegmentsData.length; i++) { + if (i > 0) { + var start = specialSegmentsData[i-1][1]; + } else { + var start = 0; + } + + // need to include original indices + var slice = dataset.slice(start,specialSegmentsData[i][1]); + var sliceData = []; + + for (var j = 0; j < slice.length; j++) { + sliceData.push([start + j, slice[j]]); + } + + // push to pathData + straightData.push(line(sliceData)); + + if (specialSegmentsData[i][3] == 'call') { + var headIndex = specialSegmentsData[i][0]; + var tailIndex = specialSegmentsData[i][1]; + var mid = headIndex; + var magic = (0.3*dataset[headIndex] + 0.7*dataset[tailIndex]); + var arrowData = [[headIndex, dataset[headIndex]], [mid, magic], [tailIndex, dataset[tailIndex]]]; + var arrowPathData = "M"+xScale(headIndex)+","+yScale(dataset[headIndex])+ + " Q"+xScale(mid)+","+yScale(magic)+" "+xScale(tailIndex)+","+yScale(dataset[tailIndex]); + callData.push(arrowPathData); + callTextData.push([headIndex, dataset[headIndex], tailIndex, dataset[tailIndex]]); + } else if (specialSegmentsData[i][3] == 'return') { + var headIndex = specialSegmentsData[i][0]; + var tailIndex = specialSegmentsData[i][1]; + var mid = tailIndex; + var magic = (0.3*dataset[headIndex] + 0.7*dataset[tailIndex]); + var arrowData = [[headIndex, dataset[headIndex]], [mid, magic], [tailIndex, dataset[tailIndex]]]; + var arrowPathData = "M"+xScale(headIndex)+","+yScale(dataset[headIndex])+ + " Q"+xScale(mid)+","+yScale(magic)+" "+xScale(tailIndex)+","+yScale(dataset[tailIndex]); + returnData.push(arrowPathData); + } + } + + // arrow head definition + + svg.append("defs").append("marker") + .attr("id", "call-arrowhead") + .attr("refX", 6 + 3) /*must be smarter way to calculate shift*/ + .attr("refY", 4) + .attr("markerWidth", 10) + .attr("markerHeight", 10) + .attr("orient", "auto") + .append("path") + .attr("d", "M 0,0 V 8 L6,4 Z") + .style("stroke", "red") + .style("fill", "red"); //this is actual shape for arrowhead + + svg.append("defs").append("marker") + .attr("id", "return-arrowhead") + .attr("refX", 6 + 3) /*must be smarter way to calculate shift*/ + .attr("refY", 4) + .attr("markerWidth", 10) + .attr("markerHeight", 10) + .attr("orient", "auto") + .append("path") + .attr("d", "M 0,0 V 8 L6,4 Z") + .style("stroke", "lime") + .style("fill", "lime"); //this is actual shape for arrowhead + + var straightConnector = connectorGroup.selectAll(".straight") + .data(straightData) + .enter() + .append("svg:path") + .attr("d", function (d) { return d; }) + .style("visibility", "visible"); + var callConnector = connectorGroup.selectAll(".call") + .data(callData) + .enter() + .append("svg:path") + .attr("d", function (d) { return d; }) + .style("stroke", "red") + .style("visibility", "visible") + .attr("marker-end", "url(#call-arrowhead)"); + var returnConnector = connectorGroup.selectAll(".return") + .data(returnData) + .enter() + .append("svg:path") + .attr("d", function (d) { return d; }) + .style("stroke", "lime") + .style("visibility", "visible") + .attr("marker-end", "url(#return-arrowhead)"); + + var functionText = connectorGroup.selectAll("text") + .data(callTextData) + .enter() + .append("text"); + + functionText.text(function(d, i) { + return trace.trace[d[2]].func_name; + }) + .attr("x", function(d, i) { + return xScale(d[0]) + 10; + }) + .attr("y", function(d, i) { + var mid = 0.5 * (d[1]+d[3]); + return yScale(mid) + 4; + }) + .style("visibility", "visible") + .style("font-family", "monospace") + .style("font-size", "10pt"); + + /* + * ================================= + * DEFAULT GROUP + * ================================= + */ + var defaultGroup = svg.append("svg:g"); + var circles = defaultGroup.selectAll("circle") + .data(dataset) + .enter() + .append("circle"); + + circles.attr("cx", function(d, i) { + return xScale(i); + }) + .attr("cy", function(d, i) { + return yScale(d); + }) + .attr("r", "4") + .attr("fill", function(d, i) { + return 'black'; + }) + .style("visibility", "visible"); + + /* + * ================================= + * DELIMITER GROUP + * ================================= + */ + // build function call dataset (need to grab returns as well!) + var functionCallDataset = []; + for (var i = 0; i < dataset.length; i++) { + if (trace.trace[i].event == 'call') { + functionCallDataset.push([i, dataset[i], 'call']); + } else if (trace.trace[i].event == 'return') { + functionCallDataset.push([i, dataset[i], 'return']); + } + } + + var delimitingGroup = svg.append("svg:g"); + var delimiters = delimitingGroup.selectAll("line") + .data(functionCallDataset) + .enter() + .append("line"); + + delimiters.attr("x1", function(d, i) { + if (d[2] == 'call') { + return xScale(d[0]) - col_mid; + } else { + return xScale(d[0]) + col_mid; + } + }) + .attr("y1", function(d, i) { + return 0; + }) + .attr("x2", function(d, i) { + if (d[2] == 'call') { + return xScale(d[0]) - col_mid; + } else { + return xScale(d[0]) + col_mid; + } + }) + .attr("y2", function(d, i) { + return h; + }) + .style("visibility", "hidden") + .classed("delimiter", true); + + /* + * ================================= + * GUIDE GROUP + * ================================= + */ + var guideGroup = svg.append("svg:g"); + var v_guides = guideGroup.selectAll("line") + .data(dataset) + .enter() + .append("line"); + + v_guides.attr("x1", function(d, i) { + return xScale(i); + }) + .attr("y1", function(d, i) { + return 0; + }) + .attr("x2", function(d, i) { + return xScale(i); + }) + .attr("y2", function(d, i) { + return h; + }) + .style("visibility", "hidden") + .classed("v-guide", true); + + var v_hovers = guideGroup.selectAll("rect") + .data(dataset) + .enter() + .append("rect"); + + // save "top" position for debug panel + var topPosition = myViz.domRoot.find('#debug').scrollTop(); + + v_hovers.attr("x", function(d, i) { + return (i * col_w); + }) + .attr("y", function(d, i) { + return 0; + }) + .attr("width", function(d, i) { + return col_w; + }) + .attr("height", function(d, i) { + return h; + }) + .classed("v-hover", true) + .on("mouseover", + function (d, i) { + var row = table[0].rows[d]; + var cell = row.cells[0]; + myViz.domRoot.find('#code tr:eq(' + d + ') td:first').addClass("v-hover"); + myViz.domRoot.find('#code tr:eq(' + d + ') td:last').addClass("v-hover"); + v_guides.filter( + function(data, index) { + return index == i; + }) + .style("visibility", "visible"); + circles.filter( + function(data, index) { + return index == i; + }); + + var svgOffset = myViz.domRoot.find('div#slider svg').offset(); + + // hide old tooltip + hideTooltip(); + + if (d3.mouse(this)[1] > (yScale(d)-row_mid) && d3.mouse(this)[1] < (yScale(d+1)-row_mid) ) { + $('#tooltip-step-id').text(i); + $('#holisticTooltip').show(); + myViz.tooltipVisualizer.renderStep(i); + changeTooltipPosition(xScale(i) + svgOffset.left, yScale(d) + svgOffset.top); + } + }) + .on("mousemove", + function (d, i) { + var row = table[0].rows[d]; + var cell = row.cells[0]; + myViz.domRoot.find('#code tr:eq(' + d + ') td:first').addClass("v-hover"); + myViz.domRoot.find('#code tr:eq(' + d + ') td:last').addClass("v-hover"); + v_guides.filter( + function(data, index) { + return index == i; + }) + .style("visibility", "visible"); + + var svgOffset = myViz.domRoot.find('div#slider svg').offset(); + + // hide old tooltip + hideTooltip(); + + if (d3.mouse(this)[1] > (yScale(d)-row_mid) && d3.mouse(this)[1] < (yScale(d+1)-row_mid) ) { + $('#tooltip-step-id').text(i); + $('#holisticTooltip').show(); + myViz.tooltipVisualizer.renderStep(i); + changeTooltipPosition(xScale(i) + svgOffset.left, yScale(d) + svgOffset.top); + } + }) + .on("mouseout", + function (d, i) { + var row = table[0].rows[d]; + var cell = row.cells[0]; + myViz.domRoot.find('#code tr:eq(' + d + ') td:first').removeClass("v-hover"); + myViz.domRoot.find('#code tr:eq(' + d + ') td:last').removeClass("v-hover"); + v_guides.filter( + function(data, index) { + return index == i; + }) + .style("visibility", "hidden"); + circles.filter( + function(data, index) { + return index == i; + }); + + hideTooltip(); + }) + .on("click", + function (d, i) { + // debug panel + myViz.domRoot.find('#debug-title').text(i); + myViz.domRoot.find('#debug').html("
"+JSON.stringify(trace.trace[i], undefined, 2)+"
"); + myViz.domRoot.find('#debug').scrollTop(topPosition); + + if (d3.mouse(this)[1] > (yScale(d)-row_mid) && d3.mouse(this)[1] < (yScale(d+1)-row_mid) ) { + // ExecutionVisualizer panel + // use $('#altVisual').is(":visible") to check if visible + if ($('#altContainer').is(":visible")) { + if (altVisualStep == i) { + $('#altContainer').hide(); + } else { + $('#step-id').text(i); + altVisualStep = i; + myViz.altVisualizer.renderStep(altVisualStep); + } + } else { + $('#step-id').text(i); + altVisualStep = i; + // have to draw arrows after the div is shown! + $('#altContainer').show(); + myViz.altVisualizer.renderStep(altVisualStep); + } + } + }); + + // tooltip helper function + var changeTooltipPosition = function(x, y) { + var tooltipX = x - 8; + var tooltipY = y + 8; + var tooltipWidth = $('#holisticTooltip').width(); + // TODO: adjust for tooltip height + if ((tooltipX + tooltipWidth) > $(window).width()) { + $('#holisticTooltip').css({top: tooltipY, left: tooltipX - tooltipWidth}); + } else { + $('#holisticTooltip').css({top: tooltipY, left: tooltipX}); + } + }; + + var hideTooltip = function() { + $('#holisticTooltip').hide(); + }; + + /* + * ================================= + * AXIS GROUP + * ================================= + */ + var axisGroup = svg.append("svg:g"); + var xAxis = d3.svg.axis() + .scale(xScale) + .orient("bottom") + .ticks(dataset.length); + axisGroup.attr("class", "axis") + .attr("transform", "translate(0," + (final_h - padding) + ")") + .call(xAxis); + + /* + * ================================= + * EVENT HANDLERS + * ================================= + */ + myViz.domRoot.find("#var-select").change(function(e) { + if (myViz.domRoot.find("#var-select").val() !== 'default') { + circles.style("visibility", "hidden"); + v_hovers.style("visibility", "hidden"); + values.style("visibility", "visible"); + values.text(function(d, i) { + var val = myViz.domRoot.find('#var-select').val(); + if (val == 'default') { + return "~"; + } + if (myViz.domRoot.find(':selected').parent().attr('label') == 'Globals') { + if (val in trace.trace[i].globals) { + return trace.trace[i].globals[val]; + } else { + return "~"; + } + } else { + var n = trace.trace[i].stack_to_render.length; + if (n > 0 && + val in trace.trace[i].stack_to_render[n-1].encoded_locals && + myViz.domRoot.find(':selected').parent().attr('label') == trace.trace[i].stack_to_render[n-1].func_name) { + return trace.trace[i].stack_to_render[n-1].encoded_locals[val]; + } else { + return "~"; + } + } + }); + } else { + circles.style("visibility", "visible"); + v_hovers.style("visibility", "visible"); + values.style("visibility", "hidden"); + } + }); + + myViz.domRoot.find('#connector-select').click(function() { + if($(this).is(':checked')){ + connector.style("visibility", "visible"); + } else { + connector.style("visibility", "hidden"); + } + }); + + myViz.domRoot.find('#debugPanel').hide(); + myViz.domRoot.find('#debug-select').click(function() { + if($(this).is(':checked')){ + myViz.domRoot.find('#debugPanel').show(); + } else { + myViz.domRoot.find('#debugPanel').hide(); + } + }); + + myViz.domRoot.find('#delimiter-select').click(function() { + if($(this).is(':checked')){ + delimiters.style("visibility", "visible"); + } else { + delimiters.style("visibility", "hidden"); + } + }); +} + +// stubs for unimplemented interface methods +HolisticVisualizer.prototype.updateOutput = function() {}; +HolisticVisualizer.prototype.redrawConnectors = function() { + this.altVisualizer.redrawConnectors(); +}; +HolisticVisualizer.prototype.destroyAllAnnotationBubbles = function() {}; diff --git a/v3/js/iframe-embed.js b/v3/js/iframe-embed.js new file mode 100644 index 000000000..3ed27f54e --- /dev/null +++ b/v3/js/iframe-embed.js @@ -0,0 +1,188 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// Pre-reqs: +// - pytutor.js +// - jquery.ba-bbq.min.js +// - jquery.ba-dotimeout.min.js // for event debouncing: http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/ +// - opt-frontend-common.js +// should all be imported BEFORE this file + +var originFrontendJsFile = 'iframe-embed.js'; + +function NOP() {}; + + +$(document).ready(function() { + var queryStrOptions = getQueryStringOptions(); + + var preseededCode = queryStrOptions.preseededCode; + var pyState = queryStrOptions.py; + var verticalStackBool = (queryStrOptions.verticalStack == 'true'); + var heapPrimitivesBool = (queryStrOptions.heapPrimitives == 'true'); + var textRefsBool = (queryStrOptions.textReferences == 'true'); + var cumModeBool = (queryStrOptions.cumulative == 'true'); + + // these two are deprecated + var drawParentPointerBool = (queryStrOptions.drawParentPointers == 'true'); + var showOnlyOutputsBool = (queryStrOptions.showOnlyOutputs == 'true'); + + var codeDivWidth = undefined; + var cdw = $.bbq.getState('codeDivWidth'); + if (cdw) { + codeDivWidth = Number(cdw); + } + + var codeDivHeight = undefined; + var cdh = $.bbq.getState('codeDivHeight'); + if (cdh) { + codeDivHeight = Number(cdh); + } + + + var startingInstruction = queryStrOptions.preseededCurInstr; + if (!startingInstruction) { + startingInstruction = 0; + } + + var backend_script = null; + if (pyState == '2') { + backend_script = python2_backend_script; + } + else if (pyState == '3') { + backend_script = python3_backend_script; + } + else if (pyState == '2crazy') { + backend_script = python2crazy_backend_script; + } + else if (pyState == 'js') { + backend_script = js_backend_script; + } + else if (pyState == 'ts') { + backend_script = ts_backend_script; + } + else if (pyState == 'ruby') { + backend_script = ruby_backend_script; + } + else if (pyState == 'java') { + backend_script = java_backend_script; + } + assert(backend_script); + + // David Pritchard's code for resizeContainer option ... + var resizeContainer = ($.bbq.getState('resizeContainer') == 'true'); + + if (resizeContainer) { + function findContainer() { + var ifs = window.top.document.getElementsByTagName("iframe"); + for(var i = 0, len = ifs.length; i < len; i++) { + var f = ifs[i]; + var fDoc = f.contentDocument || f.contentWindow.document; + if(fDoc === document) { + return f; + } + } + } + + var container = findContainer(); + + function resizeContainerNow() { + $(container).height($("html").height()); + }; + } + + + // set up all options in a JS object + var backendOptionsObj = {cumulative_mode: cumModeBool, + heap_primitives: heapPrimitivesBool, + show_only_outputs: showOnlyOutputsBool, + py_crazy_mode: (pyState == '2crazy'), + origin: originFrontendJsFile}; + + var frontendOptionsObj = {startingInstruction: startingInstruction, + embeddedMode: true, + verticalStack: verticalStackBool, + disableHeapNesting: heapPrimitivesBool, + drawParentPointers: drawParentPointerBool, + textualMemoryLabels: textRefsBool, + showOnlyOutputs: showOnlyOutputsBool, + executeCodeWithRawInputFunc: executeCodeWithRawInput, + heightChangeCallback: (resizeContainer ? resizeContainerNow : NOP), + + // undocumented experimental modes: + pyCrazyMode: (pyState == '2crazy'), + highlightLines: typeof $.bbq.getState("highlightLines") !== "undefined", + codeDivWidth: codeDivWidth, + codeDivHeight: codeDivHeight, + } + + function executeCode(forceStartingInstr) { + if (forceStartingInstr) { + frontendOptionsObj.startingInstruction = forceStartingInstr; + } + executeCodeAndCreateViz(preseededCode, + backend_script, backendOptionsObj, + frontendOptionsObj, + 'vizDiv', + function() { // success + if (resizeContainer) + resizeContainerNow(); + myVisualizer.redrawConnectors(); + }, + NOP); + } + + + function executeCodeFromScratch() { + // reset these globals + rawInputLst = []; + executeCode(); + } + + function executeCodeWithRawInput(rawInputStr, curInstr) { + // set some globals + rawInputLst.push(rawInputStr); + executeCode(curInstr); + } + + + // log a generic AJAX error handler + $(document).ajaxError(function() { + alert("Ugh, Online Python Tutor server error :( Email philip@pgbovine.net"); + }); + + + // redraw connector arrows on window resize + $(window).resize(function() { + myVisualizer.redrawConnectors(); + }); + + + executeCodeFromScratch(); // finally, execute code and display visualization +}); diff --git a/v3/js/index.js b/v3/js/index.js new file mode 100644 index 000000000..c34bc75f0 --- /dev/null +++ b/v3/js/index.js @@ -0,0 +1,17 @@ +var demoTrace = {"code": "def listSum(numbers):\n if not numbers:\n return 0\n else:\n (f, rest) = numbers\n return f + listSum(rest)\n\nmyList = (1, (2, (3, None)))\ntotal = listSum(myList)\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 1, "event": "step_line"}, {"ordered_globals": ["listSum"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null]}, "line": 8, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4]}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 5, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 1, "event": "call"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 2, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "step_line"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 4, "encoded_locals": {"__return__": 0, "numbers": null}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f4", "ordered_varnames": ["numbers", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 3, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 3, "encoded_locals": {"__return__": 3, "numbers": ["REF", 4], "rest": null, "f": 3}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f3", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": false, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest"]}, {"frame_id": 2, "encoded_locals": {"__return__": 5, "numbers": ["REF", 3], "rest": ["REF", 4], "f": 2}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f2", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList"], "stdout": "", "func_name": "listSum", "stack_to_render": [{"frame_id": 1, "encoded_locals": {"__return__": 6, "numbers": ["REF", 2], "rest": ["REF", 3], "f": 1}, "is_highlighted": true, "is_parent": false, "func_name": "listSum", "is_zombie": false, "parent_frame_id_list": [], "unique_hash": "listSum_f1", "ordered_varnames": ["numbers", "f", "rest", "__return__"]}], "globals": {"myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 6, "event": "return"}, {"ordered_globals": ["listSum", "myList", "total"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"total": 6, "myList": ["REF", 2], "listSum": ["REF", 1]}, "heap": {"1": ["FUNCTION", "listSum(numbers)", null], "2": ["TUPLE", 1, ["REF", 3]], "3": ["TUPLE", 2, ["REF", 4]], "4": ["TUPLE", 3, null]}, "line": 9, "event": "return"}]}; + + +$(document).ready(function() { + // for rounded corners + $(".activityPane").corner('15px'); + + var demoViz = new ExecutionVisualizer('demoViz', demoTrace, {embeddedMode: true, + lang: 'py2', + editCodeBaseURL: 'visualize.html'}); + + // redraw connector arrows on window resize + $(window).resize(function() { + demoViz.redrawConnectors(); + }); +}); + diff --git a/v3/js/jquery-1.8.2.min.js b/v3/js/jquery-1.8.2.min.js new file mode 100644 index 000000000..f65cf1dc4 --- /dev/null +++ b/v3/js/jquery-1.8.2.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.2 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/v3/js/jquery-ui-1.8.24.custom.min.js b/v3/js/jquery-ui-1.8.24.custom.min.js new file mode 100644 index 000000000..a684be39f --- /dev/null +++ b/v3/js/jquery-ui-1.8.24.custom.min.js @@ -0,0 +1,25 @@ +/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.24",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a("").outerWidth(1).jquery||a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.curCSS||(a.curCSS=a.css),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.position.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;return i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1],this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?a.isFunction(b)?this.each(function(c){a(this).offset(b.call(this,c,a(this).offset()))}):this.each(function(){a.offset.setOffset(this,b)}):h.call(this)}),a.curCSS||(a.curCSS=a.css),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.resizable.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e
');h.css({zIndex:c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){if(c.disabled)return;a(this).removeClass("ui-resizable-autohide"),b._handles.show()},function(){if(c.disabled)return;b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}return this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement),this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");return a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b),!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);return l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui()),!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}return a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),ea.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;return p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null),a},_proportionallyResize:function(){var b=this.options;if(!this._proportionallyResizeElements.length)return;var c=this.helper||this.element;for(var d=0;d');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.24"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!i)return;e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/d.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*d.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);;/*! jQuery UI - v1.8.24 - 2012-09-28 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("
").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;ic&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.24"})})(jQuery);; \ No newline at end of file diff --git a/v3/js/jquery.ba-bbq.min.js b/v3/js/jquery.ba-bbq.min.js new file mode 100644 index 000000000..bcbf24834 --- /dev/null +++ b/v3/js/jquery.ba-bbq.min.js @@ -0,0 +1,18 @@ +/* + * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010 + * http://benalman.com/projects/jquery-bbq-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); \ No newline at end of file diff --git a/v3/js/jquery.ba-dotimeout.min.js b/v3/js/jquery.ba-dotimeout.min.js new file mode 100644 index 000000000..02d9349c2 --- /dev/null +++ b/v3/js/jquery.ba-dotimeout.min.js @@ -0,0 +1,9 @@ +/* + * jQuery doTimeout: Like setTimeout, but better! - v1.0 - 3/3/2010 + * http://benalman.com/projects/jquery-dotimeout-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($){var a={},c="doTimeout",d=Array.prototype.slice;$[c]=function(){return b.apply(window,[0].concat(d.call(arguments)))};$.fn[c]=function(){var f=d.call(arguments),e=b.apply(this,[c+f[0]].concat(f));return typeof f[0]==="number"||typeof f[1]==="number"?this:e};function b(l){var m=this,h,k={},g=l?$.fn:$,n=arguments,i=4,f=n[1],j=n[2],p=n[3];if(typeof f!=="string"){i--;f=l=0;j=n[1];p=n[2]}if(l){h=m.eq(0);h.data(l,k=h.data(l)||{})}else{if(f){k=a[f]||(a[f]={})}}k.id&&clearTimeout(k.id);delete k.id;function e(){if(l){h.removeData(l)}else{if(f){delete a[f]}}}function o(){k.id=setTimeout(function(){k.fn()},j)}if(p){k.fn=function(q){if(typeof p==="string"){p=g[p]}p.apply(m,d.call(n,i))===true&&!q?o():e()};o()}else{if(k.fn){j===undefined?e():k.fn(j===false);return true}else{e()}}}})(jQuery); \ No newline at end of file diff --git a/v3/js/jquery.corner.js b/v3/js/jquery.corner.js new file mode 100644 index 000000000..c416613fd --- /dev/null +++ b/v3/js/jquery.corner.js @@ -0,0 +1,249 @@ +/*! + * jQuery corner plugin: simple corner rounding + * Examples and documentation at: http://jquery.malsup.com/corner/ + * version 2.12 (23-MAY-2011) + * Requires jQuery v1.3.2 or later + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Dave Methvin and Mike Alsup + */ + +/** + * corner() takes a single string argument: $('#myDiv').corner("effect corners width") + * + * effect: name of the effect to apply, such as round, bevel, notch, bite, etc (default is round). + * corners: one or more of: top, bottom, tr, tl, br, or bl. (default is all corners) + * width: width of the effect; in the case of rounded corners this is the radius. + * specify this value using the px suffix such as 10px (yes, it must be pixels). + */ +;(function($) { + +var style = document.createElement('div').style, + moz = style['MozBorderRadius'] !== undefined, + webkit = style['WebkitBorderRadius'] !== undefined, + radius = style['borderRadius'] !== undefined || style['BorderRadius'] !== undefined, + mode = document.documentMode || 0, + noBottomFold = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8), + + expr = $.browser.msie && (function() { + var div = document.createElement('div'); + try { div.style.setExpression('width','0+0'); div.style.removeExpression('width'); } + catch(e) { return false; } + return true; + })(); + +$.support = $.support || {}; +$.support.borderRadius = moz || webkit || radius; // so you can do: if (!$.support.borderRadius) $('#myDiv').corner(); + +function sz(el, p) { + return parseInt($.css(el,p))||0; +}; +function hex2(s) { + s = parseInt(s).toString(16); + return ( s.length < 2 ) ? '0'+s : s; +}; +function gpc(node) { + while(node) { + var v = $.css(node,'backgroundColor'), rgb; + if (v && v != 'transparent' && v != 'rgba(0, 0, 0, 0)') { + if (v.indexOf('rgb') >= 0) { + rgb = v.match(/\d+/g); + return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]); + } + return v; + } + if (node.nodeName.toLowerCase() == 'html') + break; + node = node.parentNode; // keep walking if transparent + } + return '#ffffff'; +}; + +function getWidth(fx, i, width) { + switch(fx) { + case 'round': return Math.round(width*(1-Math.cos(Math.asin(i/width)))); + case 'cool': return Math.round(width*(1+Math.cos(Math.asin(i/width)))); + case 'sharp': return width-i; + case 'bite': return Math.round(width*(Math.cos(Math.asin((width-i-1)/width)))); + case 'slide': return Math.round(width*(Math.atan2(i,width/i))); + case 'jut': return Math.round(width*(Math.atan2(width,(width-i-1)))); + case 'curl': return Math.round(width*(Math.atan(i))); + case 'tear': return Math.round(width*(Math.cos(i))); + case 'wicked': return Math.round(width*(Math.tan(i))); + case 'long': return Math.round(width*(Math.sqrt(i))); + case 'sculpt': return Math.round(width*(Math.log((width-i-1),width))); + case 'dogfold': + case 'dog': return (i&1) ? (i+1) : width; + case 'dog2': return (i&2) ? (i+1) : width; + case 'dog3': return (i&3) ? (i+1) : width; + case 'fray': return (i%2)*width; + case 'notch': return width; + case 'bevelfold': + case 'bevel': return i+1; + case 'steep': return i/2 + 1; + case 'invsteep':return (width-i)/2+1; + } +}; + +$.fn.corner = function(options) { + // in 1.3+ we can fix mistakes with the ready state + if (this.length == 0) { + if (!$.isReady && this.selector) { + var s = this.selector, c = this.context; + $(function() { + $(s,c).corner(options); + }); + } + return this; + } + + return this.each(function(index){ + var $this = $(this), + // meta values override options + o = [$this.attr($.fn.corner.defaults.metaAttr) || '', options || ''].join(' ').toLowerCase(), + keep = /keep/.test(o), // keep borders? + cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]), // corner color + sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]), // strip color + width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10, // corner width + re = /round|bevelfold|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dogfold|dog|invsteep|steep/, + fx = ((o.match(re)||['round'])[0]), + fold = /dogfold|bevelfold/.test(o), + edges = { T:0, B:1 }, + opts = { + TL: /top|tl|left/.test(o), TR: /top|tr|right/.test(o), + BL: /bottom|bl|left/.test(o), BR: /bottom|br|right/.test(o) + }, + // vars used in func later + strip, pad, cssHeight, j, bot, d, ds, bw, i, w, e, c, common, $horz; + + if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR ) + opts = { TL:1, TR:1, BL:1, BR:1 }; + + // support native rounding + if ($.fn.corner.defaults.useNative && fx == 'round' && (radius || moz || webkit) && !cc && !sc) { + if (opts.TL) + $this.css(radius ? 'border-top-left-radius' : moz ? '-moz-border-radius-topleft' : '-webkit-border-top-left-radius', width + 'px'); + if (opts.TR) + $this.css(radius ? 'border-top-right-radius' : moz ? '-moz-border-radius-topright' : '-webkit-border-top-right-radius', width + 'px'); + if (opts.BL) + $this.css(radius ? 'border-bottom-left-radius' : moz ? '-moz-border-radius-bottomleft' : '-webkit-border-bottom-left-radius', width + 'px'); + if (opts.BR) + $this.css(radius ? 'border-bottom-right-radius' : moz ? '-moz-border-radius-bottomright' : '-webkit-border-bottom-right-radius', width + 'px'); + return; + } + + strip = document.createElement('div'); + $(strip).css({ + overflow: 'hidden', + height: '1px', + minHeight: '1px', + fontSize: '1px', + backgroundColor: sc || 'transparent', + borderStyle: 'solid' + }); + + pad = { + T: parseInt($.css(this,'paddingTop'))||0, R: parseInt($.css(this,'paddingRight'))||0, + B: parseInt($.css(this,'paddingBottom'))||0, L: parseInt($.css(this,'paddingLeft'))||0 + }; + + if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE + if (!keep) this.style.border = 'none'; + strip.style.borderColor = cc || gpc(this.parentNode); + cssHeight = $(this).outerHeight(); + + for (j in edges) { + bot = edges[j]; + // only add stips if needed + if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) { + strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none'); + d = document.createElement('div'); + $(d).addClass('jquery-corner'); + ds = d.style; + + bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild); + + if (bot && cssHeight != 'auto') { + if ($.css(this,'position') == 'static') + this.style.position = 'relative'; + ds.position = 'absolute'; + ds.bottom = ds.left = ds.padding = ds.margin = '0'; + if (expr) + ds.setExpression('width', 'this.parentNode.offsetWidth'); + else + ds.width = '100%'; + } + else if (!bot && $.browser.msie) { + if ($.css(this,'position') == 'static') + this.style.position = 'relative'; + ds.position = 'absolute'; + ds.top = ds.left = ds.right = ds.padding = ds.margin = '0'; + + // fix ie6 problem when blocked element has a border width + if (expr) { + bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth'); + ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"'); + } + else + ds.width = '100%'; + } + else { + ds.position = 'relative'; + ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : + (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px'; + } + + for (i=0; i < width; i++) { + w = Math.max(0,getWidth(fx,i, width)); + e = strip.cloneNode(false); + e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px'; + bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild); + } + + if (fold && $.support.boxModel) { + if (bot && noBottomFold) continue; + for (c in opts) { + if (!opts[c]) continue; + if (bot && (c == 'TL' || c == 'TR')) continue; + if (!bot && (c == 'BL' || c == 'BR')) continue; + + common = { position: 'absolute', border: 'none', margin: 0, padding: 0, overflow: 'hidden', backgroundColor: strip.style.borderColor }; + $horz = $('
').css(common).css({ width: width + 'px', height: '1px' }); + switch(c) { + case 'TL': $horz.css({ bottom: 0, left: 0 }); break; + case 'TR': $horz.css({ bottom: 0, right: 0 }); break; + case 'BL': $horz.css({ top: 0, left: 0 }); break; + case 'BR': $horz.css({ top: 0, right: 0 }); break; + } + d.appendChild($horz[0]); + + var $vert = $('
').css(common).css({ top: 0, bottom: 0, width: '1px', height: width + 'px' }); + switch(c) { + case 'TL': $vert.css({ left: width }); break; + case 'TR': $vert.css({ right: width }); break; + case 'BL': $vert.css({ left: width }); break; + case 'BR': $vert.css({ right: width }); break; + } + d.appendChild($vert[0]); + } + } + } + } + }); +}; + +$.fn.uncorner = function() { + if (radius || moz || webkit) + this.css(radius ? 'border-radius' : moz ? '-moz-border-radius' : '-webkit-border-radius', 0); + $('div.jquery-corner', this).remove(); + return this; +}; + +// expose options +$.fn.corner.defaults = { + useNative: true, // true if plugin should attempt to use native browser support for border radius rounding + metaAttr: 'data-corner' // name of meta attribute to use for options +}; + +})(jQuery); diff --git a/v3/js/jquery.jsPlumb-1.3.10-all-min.js b/v3/js/jquery.jsPlumb-1.3.10-all-min.js new file mode 100644 index 000000000..3171abe1b --- /dev/null +++ b/v3/js/jquery.jsPlumb-1.3.10-all-min.js @@ -0,0 +1 @@ +jsPlumbUtil={isArray:function(b){return Object.prototype.toString.call(b)==="[object Array]"},isString:function(a){return typeof a==="string"},isObject:function(a){return Object.prototype.toString.call(a)==="[object Object]"},convertStyle:function(b,a){if("transparent"===b){return b}var g=b,f=function(h){return h.length==1?"0"+h:h},c=function(h){return f(Number(h).toString(16))},d=/(rgb[a]?\()(.*)(\))/;if(b.match(d)){var e=b.match(d)[2].split(",");g="#"+c(e[0])+c(e[1])+c(e[2]);if(!a&&e.length==4){g=g+c(e[3])}}return g},gradient:function(b,a){b=jsPlumbUtil.isArray(b)?b:[b.x,b.y];a=jsPlumbUtil.isArray(a)?a:[a.x,a.y];return(a[1]-b[1])/(a[0]-b[0])},normal:function(b,a){return -1/jsPlumbUtil.gradient(b,a)},lineLength:function(b,a){b=jsPlumbUtil.isArray(b)?b:[b.x,b.y];a=jsPlumbUtil.isArray(a)?a:[a.x,a.y];return Math.sqrt(Math.pow(a[1]-b[1],2)+Math.pow(a[0]-b[0],2))},segment:function(b,a){b=jsPlumbUtil.isArray(b)?b:[b.x,b.y];a=jsPlumbUtil.isArray(a)?a:[a.x,a.y];if(a[0]>b[0]){return(a[1]>b[1])?2:1}else{return(a[1]>b[1])?3:4}},intersects:function(f,e){var c=f.x,a=f.x+f.w,k=f.y,h=f.y+f.h,d=e.x,b=e.x+e.w,i=e.y,g=e.y+e.h;return((c<=d&&d<=a)&&(k<=i&&i<=h))||((c<=b&&b<=a)&&(k<=i&&i<=h))||((c<=d&&d<=a)&&(k<=g&&g<=h))||((c<=b&&d<=a)&&(k<=g&&g<=h))||((d<=c&&c<=b)&&(i<=k&&k<=g))||((d<=a&&a<=b)&&(i<=k&&k<=g))||((d<=c&&c<=b)&&(i<=h&&h<=g))||((d<=a&&c<=b)&&(i<=h&&h<=g))},segmentMultipliers:[null,[1,-1],[1,1],[-1,1],[-1,-1]],inverseSegmentMultipliers:[null,[-1,-1],[-1,1],[1,1],[1,-1]],pointOnLine:function(a,e,b){var d=jsPlumbUtil.gradient(a,e),i=jsPlumbUtil.segment(a,e),h=b>0?jsPlumbUtil.segmentMultipliers[i]:jsPlumbUtil.inverseSegmentMultipliers[i],c=Math.atan(d),f=Math.abs(b*Math.sin(c))*h[1],g=Math.abs(b*Math.cos(c))*h[0];return{x:a.x+g,y:a.y+f}},perpendicularLineTo:function(c,d,e){var b=jsPlumbUtil.gradient(c,d),f=Math.atan(-1/b),g=e/2*Math.sin(f),a=e/2*Math.cos(f);return[{x:d.x+a,y:d.y+g},{x:d.x-a,y:d.y-g}]},findWithFunction:function(b,d){if(b){for(var c=0;c-1){c.splice(b,1)}return b!=-1},remove:function(b,c){var a=jsPlumbUtil.indexOf(b,c);if(a>-1){b.splice(a,1)}return a!=-1},addWithFunction:function(c,b,a){if(jsPlumbUtil.findWithFunction(c,a)==-1){c.push(b)}},addToList:function(d,b,c){var a=d[b];if(a==null){a=[],d[b]=a}a.push(c);return a},EventGenerator:function(){var c={},b=this;var a=["ready"];this.bind=function(d,e){jsPlumbUtil.addToList(c,d,e);return b};this.fire=function(g,h,d){if(c[g]){for(var f=0;f';var K=L.firstChild;K.style.behavior="url(#default#VML)";b.vml=K?typeof K.adj=="object":true;L.parentNode.removeChild(L)}return b.vml};var i=jsPlumbUtil.findWithFunction,J=jsPlumbUtil.indexOf,D=jsPlumbUtil.removeWithFunction,m=jsPlumbUtil.remove,u=jsPlumbUtil.addWithFunction,l=jsPlumbUtil.addToList,n=jsPlumbUtil.isArray,C=jsPlumbUtil.isString,w=jsPlumbUtil.isObject;if(!window.console){window.console={time:function(){},timeEnd:function(){},group:function(){},groupEnd:function(){},log:function(){}}}var x=null,d=function(K,L){return p.CurrentLibrary.getAttribute(F(K),L)},f=function(L,M,K){p.CurrentLibrary.setAttribute(F(L),M,K)},B=function(L,K){p.CurrentLibrary.addClass(F(L),K)},k=function(L,K){return p.CurrentLibrary.hasClass(F(L),K)},o=function(L,K){p.CurrentLibrary.removeClass(F(L),K)},F=function(K){return p.CurrentLibrary.getElementObject(K)},t=function(K){return p.CurrentLibrary.getOffset(F(K))},a=function(K){return p.CurrentLibrary.getSize(F(K))},q=jsPlumbUtil.log,I=jsPlumbUtil.group,h=jsPlumbUtil.groupEnd,H=jsPlumbUtil.time,v=jsPlumbUtil.timeEnd,r=function(){return""+(new Date()).getTime()},E=function(Z){var U=this,aa=arguments,R=false,O=Z.parameters||{},M=U.idPrefix,W=M+(new Date()).getTime(),V=null,ab=null;U._jsPlumb=Z._jsPlumb;U.getId=function(){return W};U.tooltip=Z.tooltip;U.hoverClass=Z.hoverClass||U._jsPlumb.Defaults.HoverClass||p.Defaults.HoverClass;jsPlumbUtil.EventGenerator.apply(this);this.clone=function(){var ac=new Object();U.constructor.apply(ac,aa);return ac};this.getParameter=function(ac){return O[ac]},this.getParameters=function(){return O},this.setParameter=function(ac,ad){O[ac]=ad},this.setParameters=function(ac){O=ac},this.overlayPlacements=[];var N=Z.beforeDetach;this.isDetachAllowed=function(ac){var ad=U._jsPlumb.checkCondition("beforeDetach",ac);if(N){try{ad=N(ac)}catch(ae){q("jsPlumb: beforeDetach callback failed",ae)}}return ad};var Q=Z.beforeDrop;this.isDropAllowed=function(ah,ae,af,ac,ad){var ag=U._jsPlumb.checkCondition("beforeDrop",{sourceId:ah,targetId:ae,scope:af,connection:ac,dropEndpoint:ad});if(Q){try{ag=Q({sourceId:ah,targetId:ae,scope:af,connection:ac,dropEndpoint:ad})}catch(ai){q("jsPlumb: beforeDrop callback failed",ai)}}return ag};var X=function(){if(V&&ab){var ac={};p.extend(ac,V);p.extend(ac,ab);delete U.hoverPaintStyle;if(ac.gradient&&V.fillStyle){delete ac.gradient}ab=ac}};this.setPaintStyle=function(ac,ad){V=ac;U.paintStyleInUse=V;X();if(!ad){U.repaint()}};this.getPaintStyle=function(){return V};this.setHoverPaintStyle=function(ac,ad){ab=ac;X();if(!ad){U.repaint()}};this.getHoverPaintStyle=function(){return ab};this.setHover=function(ac,ae,ad){if(!U._jsPlumb.currentlyDragging&&!U._jsPlumb.isHoverSuspended()){R=ac;if(U.hoverClass!=null&&U.canvas!=null){if(ac){L.addClass(U.canvas,U.hoverClass)}else{L.removeClass(U.canvas,U.hoverClass)}}if(ab!=null){U.paintStyleInUse=ac?ab:V;ad=ad||r();U.repaint({timestamp:ad,recalc:false})}if(U.getAttachedElements&&!ae){Y(ac,r(),U)}}};this.isHover=function(){return R};var L=p.CurrentLibrary,K=["click","dblclick","mouseenter","mouseout","mousemove","mousedown","mouseup","contextmenu"],T={mouseout:"mouseexit"},P=function(ae,af,ad){var ac=T[ad]||ad;L.bind(ae,ad,function(ag){af.fire(ac,af,ag)})},S=function(ae,ad){var ac=T[ad]||ad;L.unbind(ae,ad)};this.attachListeners=function(ad,ae){for(var ac=0;ac1){for(var ac=0;ac=0?U.overlays[V]:null};this.getOverlays=function(){return U.overlays};this.hideOverlay=function(W){var V=U.getOverlay(W);if(V){V.hide()}};this.hideOverlays=function(){for(var V=0;V0){try{for(var bw=0;bw0?J(bJ,bI)!=-1:true},bA=(!bw&&bD.length>1)?{}:[],bG=function(bJ,bK){if(!bw&&bD.length>1){var bI=bA[bJ];if(bI==null){bI=[];bA[bJ]=bI}bI.push(bK)}else{bA.push(bK)}};for(var bz in aY){if(bx(bD,bz)){for(var by=0;by=4)?[bA[2],bA[3]]:[0,0],offsets:(bA.length==6)?[bA[4],bA[5]]:[0,0],elementId:bx};by=new aa(bz);by.clone=function(){return new aa(bz)}}}}}if(!by.id){by.id="anchor_"+ak()}return by};this.makeAnchors=function(by,bw,bv){var bz=[];for(var bx=0;bx0&&bP>=ap[bI]){console.log("target element "+bI+" is full.");return false}bn.currentlyDragging=false;var bZ=F(bD.getDragObject(arguments)),bO=d(bZ,"dragId"),bX=d(bZ,"originalScope"),bU=bf[bO],bM=bU.endpoints[0],bL=bw.endpoint?p.extend({},bw.endpoint):{};bM.anchor.locked=false;if(bX){bD.setDragScope(bZ,bX)}var bS=proxyComponent.isDropAllowed(bU.sourceId,K(bK),bU.scope,bU,null);if(bU.endpointsToDeleteOnDetach){if(bM===bU.endpointsToDeleteOnDetach[0]){bU.endpointsToDeleteOnDetach[0]=null}else{if(bM===bU.endpointsToDeleteOnDetach[1]){bU.endpointsToDeleteOnDetach[1]=null}}}if(bU.suspendedEndpoint){bU.targetId=bU.suspendedEndpoint.elementId;bU.target=bD.getElementObject(bU.suspendedEndpoint.elementId);bU.endpoints[1]=bU.suspendedEndpoint}if(bS){bM.detach(bU,false,true,false);var bY=aH[bI]||bn.addEndpoint(bK,bw);if(bw.uniqueEndpoint){aH[bI]=bY}bY._makeTargetCreator=true;if(bY.anchor.positionFinder!=null){var bV=bD.getUIPosition(arguments),bR=bD.getOffset(bK),bW=bD.getSize(bK),bQ=bY.anchor.positionFinder(bV,bR,bW,bY.anchor.constructorParams);bY.anchor.x=bQ[0];bY.anchor.y=bQ[1]}var bT=bn.connect({source:bM,target:bY,scope:bX,previousConnection:bU,container:bU.parent,deleteEndpointsOnDetach:bA,doNotFireConnectionEvent:bM.endpointWillMoveAfterConnection});if(bU.endpoints[1]._makeTargetCreator&&bU.endpoints[1].connections.length<2){bn.deleteEndpoint(bU.endpoints[1])}if(bA){bT.endpointsToDeleteOnDetach=[bM,bY]}bT.repaint()}else{if(bU.suspendedEndpoint){if(bM.isReattach){bU.setHover(false);bU.floatingAnchorIndex=null;bU.suspendedEndpoint.addConnection(bU);bn.repaint(bM.elementId)}else{bM.detach(bU,false,true,true,bN)}}}};var bJ=bD.dragEvents.drop;bH.scope=bH.scope||bE;bH[bJ]=am(bH[bJ],bG);bD.initDroppable(bK,bH,true)};by=aI(by);var bC=by.length&&by.constructor!=String?by:[by];for(var bB=0;bB0?bF[0]:null,bA=bF.length>0?0:-1,bE=this,bz=function(bI,bG,bM,bL,bH){var bK=bL[0]+(bI.x*bH[0]),bJ=bL[1]+(bI.y*bH[1]);return Math.sqrt(Math.pow(bG-bK,2)+Math.pow(bM-bJ,2))},bv=bw||function(bQ,bH,bI,bJ,bG){var bL=bI[0]+(bJ[0]/2),bK=bI[1]+(bJ[1]/2);var bN=-1,bP=Infinity;for(var bM=0;bM=by.left)||(bB.left<=by.right&&bB.right>=by.right)||(bB.left<=by.left&&bB.right>=by.right)||(by.left<=bB.left&&by.right>=bB.right)),bG=((bB.top<=by.top&&bB.bottom>=by.top)||(bB.top<=by.bottom&&bB.bottom>=by.bottom)||(bB.top<=by.top&&bB.bottom>=by.bottom)||(by.top<=bB.top&&by.bottom>=bB.bottom));if(!(bA||bG)){var bD=null,bx=false,bv=false,bC=null;if(by.left>bB.left&&by.top>bB.top){bD=["right","top"]}else{if(by.left>bB.left&&bB.top>by.top){bD=["top","left"]}else{if(by.leftbB.top){bD=["left","top"]}}}}return{orientation:T.DIAGONAL,a:bD,theta:bw,theta2:bz}}else{if(bA){return{orientation:T.HORIZONTAL,a:bB.topbv[0]?1:-1},Z=function(bv){return function(bx,bw){var by=true;if(bv){if(bx[0][0]bw[0][1]}}else{if(bx[0][0]>bw[0][0]){by=true}else{by=bx[0][1]>bw[0][1]}}return by===false?-1:1}},O=function(bw,bv){var by=bw[0][0]<0?-Math.PI-bw[0][0]:Math.PI-bw[0][0],bx=bv[0][0]<0?-Math.PI-bv[0][0]:Math.PI-bv[0][0];if(by>bx){return 1}else{return bw[0][1]>bv[0][1]?1:-1}},a0={top:a8,right:Z(true),bottom:Z(true),left:O},ao=function(bv,bw){return bv.sort(bw)},al=function(bw,bv){var by=ae[bw],bz=ah[bw],bx=function(bG,bN,bC,bF,bL,bK,bB){if(bF.length>0){var bJ=ao(bF,a0[bG]),bH=bG==="right"||bG==="top",bA=a2(bG,bN,bC,bJ,bL,bK,bH);var bO=function(bR,bQ){var bP=bo([bQ[0],bQ[1]],bR.canvas);ai[bR.id]=[bP[0],bP[1],bQ[2],bQ[3]];aJ[bR.id]=bB};for(var bD=0;bD0){var bF=bA.getOffset(bG);bw[bD][bI]={id:bI,offset:{left:bF.left-bJ.left,top:bF.top-bJ.top}}}}}};bC(bz)};this.endpointAdded=function(bB){var bF=p.CurrentLibrary,bI=document.body,bz=bn.getId(bB),bH=bF.getDOMElement(bB),bA=bH.parentNode,bD=bA==bI;bv[bz]=bv[bz]?bv[bz]+1:1;while(bA!=bI){var bE=bn.getId(bA);if(by[bE]){var bK=-1,bG=bF.getElementObject(bA),bC=bF.getOffset(bG);if(bw[bE][bz]==null){var bJ=p.CurrentLibrary.getOffset(bB);bw[bE][bz]={id:bz,offset:{left:bJ.left-bC.left,top:bJ.top-bC.top}}}break}bA=bA.parentNode}};this.endpointDeleted=function(bA){if(bv[bA.elementId]){bv[bA.elementId]--;if(bv[bA.elementId]<=0){for(var bz in bw){delete bw[bz][bA.elementId]}}}};this.getElementsForDraggable=function(bz){return bw[bz]};this.reset=function(){by={};bx=[];bw={};bv={}}};bn.dragManager=new aV();var ax=function(bN){var bG=this,bx=true;bG.idPrefix="_jsplumb_c_";bG.defaultLabelLocation=0.5;bG.defaultOverlayKeys=["Overlays","ConnectionOverlays"];this.parent=bN.parent;z.apply(this,arguments);this.isVisible=function(){return bx};this.setVisible=function(bP){bx=bP;bG[bP?"showOverlays":"hideOverlays"]();if(bG.connector&&bG.connector.canvas){bG.connector.canvas.style.display=bP?"block":"none"}};this.source=F(bN.source);this.target=F(bN.target);if(bN.sourceEndpoint){this.source=bN.sourceEndpoint.endpointWillMoveTo||bN.sourceEndpoint.getElement()}if(bN.targetEndpoint){this.target=bN.targetEndpoint.getElement()}bG.previousConnection=bN.previousConnection;var bD=bN.cost;bG.getCost=function(){return bD};bG.setCost=function(bP){bD=bP};var bB=bN.bidirectional===false?false:true;bG.isBidirectional=function(){return bB};this.sourceId=d(this.source,"id");this.targetId=d(this.target,"id");this.getAttachedElements=function(){return bG.endpoints};this.scope=bN.scope;this.endpoints=[];this.endpointStyles=[];var bM=function(bQ,bP){if(bQ){return bn.makeAnchor(bQ,bP,bn)}},bK=function(bP,bV,bQ,bS,bT,bR,bU){if(bP){bG.endpoints[bV]=bP;bP.addConnection(bG)}else{if(!bQ.endpoints){bQ.endpoints=[null,null]}var b1=bQ.endpoints[bV]||bQ.endpoint||bn.Defaults.Endpoints[bV]||p.Defaults.Endpoints[bV]||bn.Defaults.Endpoint||p.Defaults.Endpoint;if(!bQ.endpointStyles){bQ.endpointStyles=[null,null]}if(!bQ.endpointHoverStyles){bQ.endpointHoverStyles=[null,null]}var bZ=bQ.endpointStyles[bV]||bQ.endpointStyle||bn.Defaults.EndpointStyles[bV]||p.Defaults.EndpointStyles[bV]||bn.Defaults.EndpointStyle||p.Defaults.EndpointStyle;if(bZ.fillStyle==null&&bR!=null){bZ.fillStyle=bR.strokeStyle}if(bZ.outlineColor==null&&bR!=null){bZ.outlineColor=bR.outlineColor}if(bZ.outlineWidth==null&&bR!=null){bZ.outlineWidth=bR.outlineWidth}var bY=bQ.endpointHoverStyles[bV]||bQ.endpointHoverStyle||bn.Defaults.EndpointHoverStyles[bV]||p.Defaults.EndpointHoverStyles[bV]||bn.Defaults.EndpointHoverStyle||p.Defaults.EndpointHoverStyle;if(bU!=null){if(bY==null){bY={}}if(bY.fillStyle==null){bY.fillStyle=bU.strokeStyle}}var bX=bQ.anchors?bQ.anchors[bV]:bQ.anchor?bQ.anchor:bM(bn.Defaults.Anchors[bV],bT)||bM(p.Defaults.Anchors[bV],bT)||bM(bn.Defaults.Anchor,bT)||bM(p.Defaults.Anchor,bT),b0=bQ.uuids?bQ.uuids[bV]:null,bW=aF({paintStyle:bZ,hoverPaintStyle:bY,endpoint:b1,connections:[bG],uuid:b0,anchor:bX,source:bS,scope:bQ.scope,container:bQ.container,reattach:bQ.reattach,detachable:bQ.detachable});bG.endpoints[bV]=bW;if(bQ.drawEndpoints===false){bW.setVisible(false,true,true)}return bW}};var bI=bK(bN.sourceEndpoint,0,bN,bG.source,bG.sourceId,bN.paintStyle,bN.hoverPaintStyle);if(bI){V(aT,this.sourceId,bI)}var by=((bG.sourceId==bG.targetId)&&bN.targetEndpoint==null)?bI:bN.targetEndpoint,bH=bK(by,1,bN,bG.target,bG.targetId,bN.paintStyle,bN.hoverPaintStyle);if(bH){V(aT,this.targetId,bH)}if(!this.scope){this.scope=this.endpoints[0].scope}if(bN.deleteEndpointsOnDetach){bG.endpointsToDeleteOnDetach=[bI,bH]}var bw=bn.Defaults.ConnectionsDetachable;if(bN.detachable===false){bw=false}if(bG.endpoints[0].connectionsDetachable===false){bw=false}if(bG.endpoints[1].connectionsDetachable===false){bw=false}if(bD==null){bD=bG.endpoints[0].getConnectionCost()}if(bN.bidirectional==null){bB=bG.endpoints[0].areConnectionsBidirectional()}this.isDetachable=function(){return bw===true};this.setDetachable=function(bP){bw=bP===true};var bO=p.extend({},this.endpoints[0].getParameters());p.extend(bO,this.endpoints[1].getParameters());p.extend(bO,bG.getParameters());bG.setParameters(bO);var bE=bG.setHover;bG.setHover=function(bP){bG.connector.setHover.apply(bG.connector,arguments);bE.apply(bG,arguments)};var bL=function(bP){if(x==null){bG.setHover(bP,false)}};this.setConnector=function(bP,bQ){if(bG.connector!=null){aX(bG.connector.getDisplayElements(),bG.parent)}var bR={_jsPlumb:bG._jsPlumb,parent:bN.parent,cssClass:bN.cssClass,container:bN.container,tooltip:bG.tooltip};if(C(bP)){this.connector=new p.Connectors[X][bP](bR)}else{if(n(bP)){this.connector=new p.Connectors[X][bP[0]](p.extend(bP[1],bR))}}bG.canvas=bG.connector.canvas;G(bG.connector,bG,bL);if(!bQ){bG.repaint()}};bG.setConnector(this.endpoints[0].connector||this.endpoints[1].connector||bN.connector||bn.Defaults.Connector||p.Defaults.Connector,true);this.setPaintStyle(this.endpoints[0].connectorStyle||this.endpoints[1].connectorStyle||bN.paintStyle||bn.Defaults.PaintStyle||p.Defaults.PaintStyle,true);this.setHoverPaintStyle(this.endpoints[0].connectorHoverStyle||this.endpoints[1].connectorHoverStyle||bN.hoverPaintStyle||bn.Defaults.HoverPaintStyle||p.Defaults.HoverPaintStyle,true);this.paintStyleInUse=this.getPaintStyle();this.moveParent=function(bS){var bR=p.CurrentLibrary,bQ=bR.getParent(bG.connector.canvas);if(bG.connector.bgCanvas){bR.removeElement(bG.connector.bgCanvas,bQ);bR.appendElement(bG.connector.bgCanvas,bS)}bR.removeElement(bG.connector.canvas,bQ);bR.appendElement(bG.connector.canvas,bS);for(var bP=0;bP0){bO.connections[0].setHover(b2,false)}else{bO.setHover(b2)}};G(bO.endpoint,bO,b1);this.setPaintStyle(b0.paintStyle||b0.style||bn.Defaults.EndpointStyle||p.Defaults.EndpointStyle,true);this.setHoverPaintStyle(b0.hoverPaintStyle||bn.Defaults.EndpointHoverStyle||p.Defaults.EndpointHoverStyle,true);this.paintStyleInUse=this.getPaintStyle();var bJ=this.getPaintStyle();this.connectorStyle=b0.connectorStyle;this.connectorHoverStyle=b0.connectorHoverStyle;this.connectorOverlays=b0.connectorOverlays;this.connector=b0.connector;this.connectorTooltip=b0.connectorTooltip;this.isSource=b0.isSource||false;this.isTarget=b0.isTarget||false;var bU=b0.maxConnections||bn.Defaults.MaxConnections;this.getAttachedElements=function(){return bO.connections};this.canvas=this.endpoint.canvas;this.connections=b0.connections||[];this.scope=b0.scope||Q;this.timestamp=null;bO.isReattach=b0.reattach||false;bO.connectionsDetachable=bn.Defaults.ConnectionsDetachable;if(b0.connectionsDetachable===false||b0.detachable===false){bO.connectionsDetachable=false}var bI=b0.dragAllowedWhenFull||true;this.computeAnchor=function(b2){return bO.anchor.compute(b2)};this.addConnection=function(b2){bO.connections.push(b2)};this.detach=function(b3,b8,b4,cb,b2){var ca=i(bO.connections,function(cd){return cd.id==b3.id}),b9=false;cb=(cb!==false);if(ca>=0){if(b4||b3._forceDetach||b3.isDetachable()||b3.isDetachAllowed(b3)){var cc=b3.endpoints[0]==bO?b3.endpoints[1]:b3.endpoints[0];if(b4||b3._forceDetach||(bO.isDetachAllowed(b3))){bO.connections.splice(ca,1);if(!b8){cc.detach(b3,true,b4);if(b3.endpointsToDeleteOnDetach){for(var b7=0;b70){bO.detach(bO.connections[0],false,true,b3,b2)}};this.detachFrom=function(b5,b4,b2){var b6=[];for(var b3=0;b3=0){bO.connections.splice(b2,1)}};this.getElement=function(){return bN};this.setElement=function(b5,b2){var b7=K(b5);D(aT[bO.elementId],function(b8){return b8.id==bO.id});bN=F(b5);bF=K(bN);bO.elementId=bF;var b6=aw({source:b7,container:b2}),b4=bz.getParent(bO.canvas);bz.removeElement(bO.canvas,b4);bz.appendElement(bO.canvas,b6);for(var b3=0;b30){var ce=bK(b5.elementWithPrecedence),cg=ce.endpoints[0]==bO?1:0,b7=cg==0?ce.sourceId:ce.targetId,cd=ah[b7],cf=ae[b7];b4.txy=[cd.left,cd.top];b4.twh=cf;b4.tElement=ce.endpoints[cg]}b8=bO.anchor.compute(b4)}var cc=bL.compute(b8,bO.anchor.getOrientation(bO),bO.paintStyleInUse,b6||bO.paintStyleInUse);bL.paint(cc,bO.paintStyleInUse,bO.anchor);bO.timestamp=cb;for(var b9=0;b90?t:m+t:t*m;return jsPlumbUtil.pointOnLine({x:h,y:g},{x:d,y:c},s)}}};this.gradientAtPoint=function(s){return e};this.pointAlongPathFrom=function(s,w,v){var u=r.pointOnPath(s,v),t=s==1?{x:h+((d-h)*10),y:g+((g-c)*10)}:{x:d,y:c};return jsPlumbUtil.pointOnLine(u,t,w)}};jsPlumb.Connectors.Bezier=function(v){var p=this;v=v||{};this.majorAnchor=v.curviness||150;this.minorAnchor=10;var t=null;this.type="Bezier";this._findControlPoint=function(H,w,C,x,A,F,y){var E=F.getOrientation(x),G=y.getOrientation(A),B=E[0]!=G[0]||E[1]==G[1],z=[],I=p.majorAnchor,D=p.minorAnchor;if(!B){if(E[0]==0){z.push(w[0]u){u=C}if(F<0){s+=F;var H=Math.abs(F);u+=H;q[0]+=H;f+=H;o+=H;l[0]+=H}var P=Math.min(e,n),N=Math.min(q[1],l[1]),B=Math.min(P,N),G=Math.max(e,n),E=Math.max(q[1],l[1]),y=Math.max(G,E);if(y>d){d=y}if(B<0){r+=B;var D=Math.abs(B);d+=D;q[1]+=D;e+=D;n+=D;l[1]+=D}if(L&&u0?0:1,w)}return w};this.pointOnPath=function(w,y){var x=c();w=m(x,w,y);return jsBezier.pointOnCurve(x,w)};this.gradientAtPoint=function(w,y){var x=c();w=m(x,w,y);return jsBezier.gradientAtPoint(x,w)};this.pointAlongPathFrom=function(w,z,y){var x=c();w=m(x,w,y);return jsBezier.pointAlongCurveFrom(x,w,z)}};jsPlumb.Connectors.Flowchart=function(v){this.type="Flowchart";v=v||{};var n=this,c=v.stub||v.minStubLength||30,f=jsPlumbUtil.isArray(c)?c[0]:c,k=jsPlumbUtil.isArray(c)?c[1]:c,p=v.gap||0,q=[],i=0,d=[],m=[],r=[],o,l,u=-Infinity,s=-Infinity,w=Infinity,t=Infinity,x=function(z,y,D,C){var B=0;for(var A=0;A0?A/i:(i+A)/i}var y=d.length-1,z=1;for(var B=0;B=A){y=B;z=(A-d[B][0])/m[B];break}}return{segment:q[y],proportion:z,index:y}};this.compute=function(W,ak,z,Q,av,K,U,P,ap,am){q=[];d=[];i=0;m=[];u=s=-Infinity;w=t=Infinity;o=ak[0]au?0:1,ae=[1,0][ac];N=[];aw=[];N[ac]=W[ac]>ak[ac]?-1:1;aw[ac]=W[ac]>ak[ac]?1:-1;N[ae]=0;aw[ae]=0}if(al(f+k),X=Math.abs(H-aq)>(f+k),ah=Z+((L-Z)/2),af=Y+((J-Y)/2),O=((N[0]*aw[0])+(N[1]*aw[1])),ab=O==-1,ad=O==0,C=O==1;aj-=E;ai-=D;r=[aj,ai,al,au,I,H,ar,aq];var ao=[];var S=N[0]==0?"y":"x",M=ab?"opposite":C?"orthogonal":"perpendicular",F=jsPlumbUtil.segment([I,H],[ar,aq]),ag=N[S=="x"?0:1]==-1,R={x:[null,4,3,2,1],y:[null,2,1,4,3]};if(ag){F=R[S][F]}g(Z,Y,I,H,ar,aq);var T=function(az,ay,y,ax){return az+(ay*((1-y)*ax)+Math.max(f,k))},G={oppositex:function(){if(z.elementId==Q.elementId){var y=Y+((1-av.y)*ap.height)+Math.max(f,k);return[[Z,y],[L,y]]}else{if(V&&(F==1||F==2)){return[[ah,H],[ah,aq]]}else{return[[Z,af],[L,af]]}}},orthogonalx:function(){if(F==1||F==2){return[[L,Y]]}else{return[[Z,J]]}},perpendicularx:function(){var y=(aq+H)/2;if((F==1&&aw[1]==1)||(F==2&&aw[1]==-1)){if(Math.abs(ar-I)>Math.max(f,k)){return[[L,Y]]}else{return[[Z,Y],[Z,y],[L,y]]}}else{if((F==3&&aw[1]==-1)||(F==4&&aw[1]==1)){return[[Z,y],[L,y]]}else{if((F==3&&aw[1]==1)||(F==4&&aw[1]==-1)){return[[Z,J]]}else{if((F==1&&aw[1]==-1)||(F==2&&aw[1]==1)){if(Math.abs(ar-I)>Math.max(f,k)){return[[ah,Y],[ah,J]]}else{return[[Z,J]]}}}}}},oppositey:function(){if(z.elementId==Q.elementId){var y=Z+((1-av.x)*ap.width)+Math.max(f,k);return[[y,Y],[y,J]]}else{if(X&&(F==2||F==3)){return[[I,af],[ar,af]]}else{return[[ah,Y],[ah,J]]}}},orthogonaly:function(){if(F==2||F==3){return[[Z,J]]}else{return[[L,Y]]}},perpendiculary:function(){var y=(ar+I)/2;if((F==2&&aw[0]==-1)||(F==3&&aw[0]==1)){if(Math.abs(ar-I)>Math.max(f,k)){return[[Z,J]]}else{return[[Z,af],[L,af]]}}else{if((F==1&&aw[0]==-1)||(F==4&&aw[0]==1)){var y=(ar+I)/2;return[[y,Y],[y,J]]}else{if((F==1&&aw[0]==1)||(F==4&&aw[0]==-1)){return[[L,Y]]}else{if((F==2&&aw[0]==1)||(F==3&&aw[0]==-1)){if(Math.abs(aq-H)>Math.max(f,k)){return[[Z,af],[L,af]]}else{return[[L,Y]]}}}}}}};var an=G[M+S]();if(an){for(var at=0;atr[3]){r[3]=s+(U*2)}if(u>r[2]){r[2]=u+(U*2)}return r};this.pointOnPath=function(y,z){return n.pointAlongPathFrom(y,0,z)};this.gradientAtPoint=function(y,z){return q[e(y,z)["index"]][4]};this.pointAlongPathFrom=function(F,y,E){var G=e(F,E),C=G.segment,z=G.proportion,B=q[G.index][5],A=q[G.index][4];var D={x:A==Infinity?C[2]:C[2]>C[0]?C[0]+((1-z)*B)-y:C[2]+(z*B)+y,y:A==0?C[3]:C[3]>C[1]?C[1]+((1-z)*B)-y:C[3]+(z*B)+y,segmentInfo:G};return D}};jsPlumb.Endpoints.Dot=function(d){this.type="Dot";var c=this;d=d||{};this.radius=d.radius||10;this.defaultOffset=0.5*this.radius;this.defaultInnerRadius=this.radius/3;this.compute=function(i,f,l,h){var g=l.radius||c.radius,e=i[0]-g,k=i[1]-g;return[e,k,g*2,g*2,g]}};jsPlumb.Endpoints.Rectangle=function(d){this.type="Rectangle";var c=this;d=d||{};this.width=d.width||20;this.height=d.height||20;this.compute=function(k,g,m,i){var h=m.width||c.width,f=m.height||c.height,e=k[0]-(h/2),l=k[1]-(f/2);return[e,l,h,f]}};var a=function(e){jsPlumb.DOMElementComponent.apply(this,arguments);var c=this;var d=[];this.getDisplayElements=function(){return d};this.appendDisplayElement=function(f){d.push(f)}};jsPlumb.Endpoints.Image=function(g){this.type="Image";a.apply(this,arguments);var l=this,f=false,e=g.width,d=g.height,i=null,c=g.endpoint;this.img=new Image();l.ready=false;this.img.onload=function(){l.ready=true;e=e||l.img.width;d=d||l.img.height;if(i){i(l)}};c.setImage=function(m,o){var n=m.constructor==String?m:m.src;i=o;l.img.src=m;if(l.canvas!=null){l.canvas.setAttribute("src",m)}};c.setImage(g.src||g.url,g.onload);this.compute=function(o,m,p,n){l.anchorPoint=o;if(l.ready){return[o[0]-e/2,o[1]-d/2,e,d]}else{return[0,0,0,0]}};l.canvas=document.createElement("img"),f=false;l.canvas.style.margin=0;l.canvas.style.padding=0;l.canvas.style.outline=0;l.canvas.style.position="absolute";var h=g.cssClass?" "+g.cssClass:"";l.canvas.className=jsPlumb.endpointClass+h;if(e){l.canvas.setAttribute("width",e)}if(d){l.canvas.setAttribute("height",d)}jsPlumb.appendElement(l.canvas,g.parent);l.attachListeners(l.canvas,l);var k=function(p,o,n){if(!f){l.canvas.setAttribute("src",l.img.src);l.appendDisplayElement(l.canvas);f=true}var m=l.anchorPoint[0]-(e/2),q=l.anchorPoint[1]-(d/2);jsPlumb.sizeCanvas(l.canvas,m,q,e,d)};this.paint=function(o,n,m){if(l.ready){k(o,n,m)}else{window.setTimeout(function(){l.paint(o,n,m)},200)}}};jsPlumb.Endpoints.Blank=function(d){var c=this;this.type="Blank";a.apply(this,arguments);this.compute=function(g,e,h,f){return[g[0],g[1],10,0]};c.canvas=document.createElement("div");c.canvas.style.display="block";c.canvas.style.width="1px";c.canvas.style.height="1px";c.canvas.style.background="transparent";c.canvas.style.position="absolute";c.canvas.className=c._jsPlumb.endpointClass;jsPlumb.appendElement(c.canvas,d.parent);this.paint=function(g,f,e){jsPlumb.sizeCanvas(c.canvas,g[0],g[1],g[2],g[3])}};jsPlumb.Endpoints.Triangle=function(c){this.type="Triangle";c=c||{};c.width=c.width||55;c.height=c.height||55;this.width=c.width;this.height=c.height;this.compute=function(i,f,l,h){var g=l.width||self.width,e=l.height||self.height,d=i[0]-(g/2),k=i[1]-(e/2);return[d,k,g,e]}};var b=function(e){var d=true,c=this;this.isAppendedAtTopLevel=true;this.component=e.component;this.loc=e.location==null?0.5:e.location;this.endpointLoc=e.endpointLocation==null?[0.5,0.5]:e.endpointLocation;this.setVisible=function(f){d=f;c.component.repaint()};this.isVisible=function(){return d};this.hide=function(){c.setVisible(false)};this.show=function(){c.setVisible(true)};this.incrementLocation=function(f){c.loc+=f;c.component.repaint()};this.setLocation=function(f){c.loc=f;c.component.repaint()};this.getLocation=function(){return c.loc}};jsPlumb.Overlays.Arrow=function(g){this.type="Arrow";b.apply(this,arguments);this.isAppendedAtTopLevel=false;g=g||{};var d=this;this.length=g.length||20;this.width=g.width||20;this.id=g.id;var f=(g.direction||1)<0?-1:1,e=g.paintStyle||{lineWidth:1},c=g.foldback||0.623;this.computeMaxSize=function(){return d.width*1.5};this.cleanup=function(){};this.draw=function(k,z,u){var o,v,h,p,n;if(k.pointAlongPathFrom){if(jsPlumbUtil.isString(d.loc)||d.loc>1||d.loc<0){var i=parseInt(d.loc);o=k.pointAlongPathFrom(i,f*d.length/2,true),v=k.pointOnPath(i,true),h=jsPlumbUtil.pointOnLine(o,v,d.length)}else{if(d.loc==1){o=k.pointOnPath(d.loc);v=k.pointAlongPathFrom(d.loc,-1);h=jsPlumbUtil.pointOnLine(o,v,d.length)}else{if(d.loc==0){h=k.pointOnPath(d.loc);v=k.pointAlongPathFrom(d.loc,1);o=jsPlumbUtil.pointOnLine(h,v,d.length)}else{o=k.pointAlongPathFrom(d.loc,f*d.length/2),v=k.pointOnPath(d.loc),h=jsPlumbUtil.pointOnLine(o,v,d.length)}}}p=jsPlumbUtil.perpendicularLineTo(o,h,d.width);n=jsPlumbUtil.pointOnLine(o,h,c*d.length);var y=Math.min(o.x,p[0].x,p[1].x),s=Math.max(o.x,p[0].x,p[1].x),x=Math.min(o.y,p[0].y,p[1].y),r=Math.max(o.y,p[0].y,p[1].y);var q={hxy:o,tail:p,cxy:n},t=e.strokeStyle||z.strokeStyle,w=e.fillStyle||z.strokeStyle,m=e.lineWidth||z.lineWidth;d.paint(k,q,m,t,w,u);return[y,s,x,r]}else{return[0,0,0,0]}}};jsPlumb.Overlays.PlainArrow=function(d){d=d||{};var c=jsPlumb.extend(d,{foldback:1});jsPlumb.Overlays.Arrow.call(this,c);this.type="PlainArrow"};jsPlumb.Overlays.Diamond=function(e){e=e||{};var c=e.length||40,d=jsPlumb.extend(e,{length:c/2,foldback:2});jsPlumb.Overlays.Arrow.call(this,d);this.type="Diamond"};jsPlumb.Overlays.Label=function(i){this.type="Label";jsPlumb.DOMElementComponent.apply(this,arguments);b.apply(this,arguments);this.labelStyle=i.labelStyle||jsPlumb.Defaults.LabelStyle;this.id=i.id;this.cachedDimensions=null;var e=i.label||"",c=this,f=false,k=document.createElement("div"),g=null;k.style.position="absolute";var d=i._jsPlumb.overlayClass+" "+(c.labelStyle.cssClass?c.labelStyle.cssClass:i.cssClass?i.cssClass:"");k.className=d;jsPlumb.appendElement(k,i.component.parent);jsPlumb.getId(k);c.attachListeners(k,c);c.canvas=k;var h=c.setVisible;c.setVisible=function(l){h(l);k.style.display=l?"block":"none"};this.getElement=function(){return k};this.cleanup=function(){if(k!=null){jsPlumb.CurrentLibrary.removeElement(k)}};this.setLabel=function(m){e=m;g=null;c.component.repaint()};this.getLabel=function(){return e};this.paint=function(l,n,m){if(!f){l.appendDisplayElement(k);c.attachListeners(k,l);f=true}k.style.left=(m[0]+n.minx)+"px";k.style.top=(m[1]+n.miny)+"px"};this.getTextDimensions=function(){if(typeof e=="function"){var l=e(c);k.innerHTML=l.replace(/\r\n/g,"
")}else{if(g==null){g=e;k.innerHTML=g.replace(/\r\n/g,"
")}}var n=jsPlumb.CurrentLibrary.getElementObject(k),m=jsPlumb.CurrentLibrary.getSize(n);return{width:m[0],height:m[1]}};this.computeMaxSize=function(l){var m=c.getTextDimensions(l);return m.width?Math.max(m.width,m.height)*1.5:0};this.draw=function(m,n,o){var s=c.getTextDimensions(m);if(s.width!=null){var p={x:0,y:0};if(m.pointOnPath){var q=c.loc,r=false;if(jsPlumbUtil.isString(c.loc)||c.loc<0||c.loc>1){q=parseInt(c.loc);r=true}p=m.pointOnPath(q,r)}else{var l=c.loc.constructor==Array?c.loc:c.endpointLoc;p={x:l[0]*o[2],y:l[1]*o[3]}}minx=p.x-(s.width/2),miny=p.y-(s.height/2);c.paint(m,{minx:minx,miny:miny,td:s,cxy:p},o);return[minx,minx+s.width,miny,miny+s.height]}else{return[0,0,0,0]}};this.reattachListeners=function(l){if(k){c.reattachListenersForElement(k,c,l)}}};jsPlumb.Overlays.GuideLines=function(){var c=this;c.length=50;c.lineWidth=5;this.type="GuideLines";b.apply(this,arguments);jsPlumb.jsPlumbUIComponent.apply(this,arguments);this.draw=function(e,l,k){var i=e.pointAlongPathFrom(c.loc,c.length/2),h=e.pointOnPath(c.loc),g=jsPlumbUtil.pointOnLine(i,h,c.length),f=jsPlumbUtil.perpendicularLineTo(i,g,40),d=jsPlumbUtil.perpendicularLineTo(g,i,20);c.paint(e,[i,g,f,d],c.lineWidth,"red",null,k);return[Math.min(i.x,g.x),Math.min(i.y,g.y),Math.max(i.x,g.x),Math.max(i.y,g.y)]};this.computeMaxSize=function(){return 50};this.cleanup=function(){}}})();(function(){var c=function(e,g,d,f){this.m=(f-g)/(d-e);this.b=-1*((this.m*e)-g);this.rectIntersect=function(q,p,s,o){var n=[];var k=(p-this.b)/this.m;if(k>=q&&k<=(q+s)){n.push([k,(this.m*k)+this.b])}var t=(this.m*(q+s))+this.b;if(t>=p&&t<=(p+o)){n.push([(t-this.b)/this.m,t])}var k=((p+o)-this.b)/this.m;if(k>=q&&k<=(q+s)){n.push([k,(this.m*k)+this.b])}var t=(this.m*q)+this.b;if(t>=p&&t<=(p+o)){n.push([(t-this.b)/this.m,t])}if(n.length==2){var m=(n[0][0]+n[1][0])/2,l=(n[0][1]+n[1][1])/2;n.push([m,l]);var i=m<=q+(s/2)?-1:1,r=l<=p+(o/2)?-1:1;n.push([i,r]);return n}return null}},a=function(e,g,d,f){if(e<=d&&f<=g){return 1}else{if(e<=d&&g<=f){return 2}else{if(d<=e&&f>=g){return 3}}}return 4},b=function(g,f,i,e,h,m,l,d,k){if(d<=k){return[g,f]}if(i==1){if(e[3]<=0&&h[3]>=1){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]>=1&&h[2]<=0){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(-1*m),f+(-1*l)]}}}else{if(i==2){if(e[3]>=1&&h[3]<=0){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]>=1&&h[2]<=0){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(1*m),f+(-1*l)]}}}else{if(i==3){if(e[3]>=1&&h[3]<=0){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]<=0&&h[2]>=1){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(-1*m),f+(-1*l)]}}}else{if(i==4){if(e[3]<=0&&h[3]>=1){return[g+(e[2]<0.5?-1*m:m),f]}else{if(e[2]<=0&&h[2]>=1){return[g,f+(e[3]<0.5?-1*l:l)]}else{return[g+(1*m),f+(-1*l)]}}}}}}};jsPlumb.Connectors.StateMachine=function(l){var u=this,n=null,o,m,g,e,p=[],d=l.curviness||10,k=l.margin||5,q=l.proximityLimit||80,f=l.orientation&&l.orientation=="clockwise",i=l.loopbackRadius||25,h=false,t=l.showLoopback!==false;this.type="StateMachine";l=l||{};this.compute=function(ad,H,W,I,ac,z,v,U){var Q=Math.abs(ad[0]-H[0]),Y=Math.abs(ad[1]-H[1]),S=0.45*Q,ab=0.45*Y;Q*=1.9;Y*=1.9;v=v||1;var O=Math.min(ad[0],H[0])-S,M=Math.min(ad[1],H[1])-ab;if(!t||(W.elementId!=I.elementId)){h=false;o=ad[0]0?0:1,v)}return v};this.pointOnPath=function(x,B){if(h){if(B){var y=Math.PI*2*i;x=x/y}if(x>0&&x<1){x=1-x}var z=(x*2*Math.PI)+(Math.PI/2),w=n[4]+(n[6]*Math.cos(z)),v=n[5]+(n[6]*Math.sin(z));return{x:w,y:v}}else{var A=r();x=s(A,x,B);return jsBezier.pointOnCurve(A,x)}};this.gradientAtPoint=function(v,y){if(h){if(y){var w=Math.PI*2*i;v=v/w}return Math.atan(v*2*Math.PI)}else{var x=r();v=s(x,v,y);return jsBezier.gradientAtPoint(x,v)}};this.pointAlongPathFrom=function(D,v,C){if(h){if(C){var B=Math.PI*2*i;D=D/B}if(D>0&&D<1){D=1-D}var B=2*Math.PI*n[6],w=v/B*2*Math.PI,z=(D*2*Math.PI)-w+(Math.PI/2),y=n[4]+(n[6]*Math.cos(z)),x=n[5]+(n[6]*Math.sin(z));return{x:y,y:x}}else{var A=r();D=s(A,D,C);return jsBezier.pointAlongCurveFrom(A,D,v)}}};jsPlumb.Connectors.canvas.StateMachine=function(f){f=f||{};var d=this,g=f.drawGuideline||true,e=f.avoidSelector;jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.CanvasConnector.apply(this,arguments);this._paint=function(l){if(l.length==10){d.ctx.beginPath();d.ctx.moveTo(l[4],l[5]);d.ctx.bezierCurveTo(l[8],l[9],l[8],l[9],l[6],l[7]);d.ctx.stroke()}else{d.ctx.save();d.ctx.beginPath();var k=0,i=2*Math.PI,h=l[7];d.ctx.arc(l[4],l[5],l[6],0,i,h);d.ctx.stroke();d.ctx.closePath();d.ctx.restore()}};this.createGradient=function(i,h){return h.createLinearGradient(i[4],i[5],i[6],i[7])}};jsPlumb.Connectors.svg.StateMachine=function(){var d=this;jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.SvgConnector.apply(this,arguments);this.getPath=function(e){if(e.length==10){return"M "+e[4]+" "+e[5]+" C "+e[8]+" "+e[9]+" "+e[8]+" "+e[9]+" "+e[6]+" "+e[7]}else{return"M"+(e[8]+4)+" "+e[9]+" A "+e[6]+" "+e[6]+" 0 1,0 "+(e[8]-4)+" "+e[9]}}};jsPlumb.Connectors.vml.StateMachine=function(){jsPlumb.Connectors.StateMachine.apply(this,arguments);jsPlumb.VmlConnector.apply(this,arguments);var d=jsPlumb.vml.convertValue;this.getPath=function(k){if(k.length==10){return"m"+d(k[4])+","+d(k[5])+" c"+d(k[8])+","+d(k[9])+","+d(k[8])+","+d(k[9])+","+d(k[6])+","+d(k[7])+" e"}else{var h=d(k[8]-k[6]),g=d(k[9]-(2*k[6])),f=h+d(2*k[6]),e=g+d(2*k[6]),l=h+","+g+","+f+","+e;var i="ar "+l+","+d(k[8])+","+d(k[9])+","+d(k[8])+","+d(k[9])+" e";return i}}}})();(function(){var h={"stroke-linejoin":"joinstyle",joinstyle:"joinstyle",endcap:"endcap",miterlimit:"miterlimit"},c=null;if(document.createStyleSheet&&document.namespaces){var m=[".jsplumb_vml","jsplumb\\:textbox","jsplumb\\:oval","jsplumb\\:rect","jsplumb\\:stroke","jsplumb\\:shape","jsplumb\\:group"],g="behavior:url(#default#VML);position:absolute;";c=document.createStyleSheet();for(var r=0;r0&&C>0&&u=u&&w[2]<=C&&w[3]>=C)){return true}}var A=q.canvas.getContext("2d").getImageData(parseInt(u),parseInt(C),1,1);return A.data[0]!=0||A.data[1]!=0||A.data[2]!=0||A.data[3]!=0}return false};var p=false,o=false,t=null,s=false,r=function(v,u){return v!=null&&i(v,u)};this.mousemove=function(x){var z=n(x),w=f(x),v=document.elementFromPoint(w[0],w[1]),y=r(v,"_jsPlumb_overlay");var u=d==null&&(r(v,"_jsPlumb_endpoint")||r(v,"_jsPlumb_connector"));if(!p&&u&&q._over(x)){p=true;q.fire("mouseenter",q,x);return true}else{if(p&&(!q._over(x)||!u)&&!y){p=false;q.fire("mouseexit",q,x)}}q.fire("mousemove",q,x)};this.click=function(u){if(p&&q._over(u)&&!s){q.fire("click",q,u)}s=false};this.dblclick=function(u){if(p&&q._over(u)&&!s){q.fire("dblclick",q,u)}s=false};this.mousedown=function(u){if(q._over(u)&&!o){o=true;t=m(a(q.canvas));q.fire("mousedown",q,u)}};this.mouseup=function(u){o=false;q.fire("mouseup",q,u)};this.contextmenu=function(u){if(p&&q._over(u)&&!s){q.fire("contextmenu",q,u)}s=false}};var c=function(p){var o=document.createElement("canvas");p._jsPlumb.appendElement(o,p.parent);o.style.position="absolute";if(p["class"]){o.className=p["class"]}p._jsPlumb.getId(o,p.uuid);if(p.tooltip){o.setAttribute("title",p.tooltip)}return o};var l=function(p){k.apply(this,arguments);var o=[];this.getDisplayElements=function(){return o};this.appendDisplayElement=function(q){o.push(q)}};var h=jsPlumb.CanvasConnector=function(r){l.apply(this,arguments);var o=function(v,t){p.ctx.save();jsPlumb.extend(p.ctx,t);if(t.gradient){var u=p.createGradient(v,p.ctx);for(var s=0;s0?c[0].tagName:null},getUIPosition:function(c){if(c.length==1){ret={left:c[0].pageX,top:c[0].pageY}}else{var d=c[1],b=d.offset;ret=b||d.absolutePosition}return ret},hasClass:function(c,b){return c.hasClass(b)},initDraggable:function(c,b,d){b=b||{};b.helper=null;if(d){b.scope=b.scope||jsPlumb.Defaults.Scope}c.draggable(b)},initDroppable:function(c,b){b.scope=b.scope||jsPlumb.Defaults.Scope;c.droppable(b)},isAlreadyDraggable:function(b){b=jsPlumb.CurrentLibrary.getElementObject(b);return b.hasClass("ui-draggable")},isDragSupported:function(c,b){return c.draggable},isDropSupported:function(c,b){return c.droppable},removeClass:function(c,b){c=jsPlumb.CurrentLibrary.getElementObject(c);try{if(c[0].className.constructor==SVGAnimatedString){jsPlumb.util.svg.removeClass(c[0],b)}}catch(d){}c.removeClass(b)},removeElement:function(b,c){jsPlumb.CurrentLibrary.getElementObject(b).remove()},setAttribute:function(c,d,b){c.attr(d,b)},setDraggable:function(c,b){c.draggable("option","disabled",!b)},setDragScope:function(c,b){c.draggable("option","scope",b)},setOffset:function(b,c){jsPlumb.CurrentLibrary.getElementObject(b).offset(c)},trigger:function(d,e,b){var c=jQuery._data(jsPlumb.CurrentLibrary.getElementObject(d)[0],"handle");c(b)},unbind:function(b,c,d){b=jsPlumb.CurrentLibrary.getElementObject(b);b.unbind(c,d)}};a(document).ready(jsPlumb.init)})(jQuery);(function(){"undefined"==typeof Math.sgn&&(Math.sgn=function(l){return 0==l?0:0=64){x[0]=(C[0].x+C[B].x)/2;return 1}var p,u=C[0].y-C[B].y;y=C[B].x-C[0].x;q=C[0].x*C[B].y-C[B].x*C[0].y;s=max_distance_below=0;for(p=1;ps?s=r:r0?1:-1,r=null;n1){l.location=1}if(l.location<0){l.location=0}return i(m,l.location)},nearestPointOnCurve:function(m,l){var n=h(m,l);return{point:k(l,l.length-1,n.location,null,null),location:n.location}},pointOnCurve:c,pointAlongCurveFrom:function(m,l,n){return b(m,l,n).point},perpendicularToCurveAt:function(m,l,n,o){l=b(m,l,o==null?0:o);m=i(m,l.location);o=Math.atan(-1/m);m=n/2*Math.sin(o);n=n/2*Math.cos(o);return[{x:l.point.x+n,y:l.point.y+m},{x:l.point.x-n,y:l.point.y-m}]},locationAlongCurveFrom:function(m,l,n){return b(m,l,n).location}}})(); \ No newline at end of file diff --git a/v3/js/jquery.qtip.min.js b/v3/js/jquery.qtip.min.js new file mode 100644 index 000000000..3971f6df5 --- /dev/null +++ b/v3/js/jquery.qtip.min.js @@ -0,0 +1,2 @@ +/*! qTip2 v2.0.0 | http://craigsworks.com/projects/qtip2/ | Licensed MIT, GPL */ +(function(a,b,c){(function(a){"use strict",typeof define=="function"&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.qtip&&a(jQuery)})(function(d){function I(a){var b=function(a){return a===g||"object"!=typeof a},c=function(a){return!d.isFunction(a)&&(!a&&!a.attr||a.length<1||"object"==typeof a&&!a.jquery)};if(!a||"object"!=typeof a)return f;b(a.metadata)&&(a.metadata={type:a.metadata});if("content"in a){if(b(a.content)||a.content.jquery)a.content={text:a.content};c(a.content.text||f)&&(a.content.text=f),"title"in a.content&&(b(a.content.title)&&(a.content.title={text:a.content.title}),c(a.content.title.text||f)&&(a.content.title.text=f))}return"position"in a&&b(a.position)&&(a.position={my:a.position,at:a.position}),"show"in a&&b(a.show)&&(a.show=a.show.jquery?{target:a.show}:{event:a.show}),"hide"in a&&b(a.hide)&&(a.hide=a.hide.jquery?{target:a.hide}:{event:a.hide}),"style"in a&&b(a.style)&&(a.style={classes:a.style}),d.each(u,function(){this.sanitize&&this.sanitize(a)}),a}function J(h,i,q,r){function Q(a){var b=0,c,d=i,e=a.split(".");while(d=d[e[b++]])b",{"class":"ui-state-default ui-tooltip-close "+(i.style.widget?"":x+"-icon"),title:c,"aria-label":c}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),O.button.appendTo(O.titlebar).attr("role","button").click(function(a){return M.hasClass(z)||s.hide(a),f}),s.redraw()}function V(){var a=J+"-title";O.titlebar&&T(),O.titlebar=d("
",{"class":x+"-titlebar "+(i.style.widget?"ui-widget-header":"")}).append(O.title=d("
",{id:a,"class":x+"-title","aria-atomic":e})).insertBefore(O.content).delegate(".ui-tooltip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus",a.type.substr(-4)==="down")}).delegate(".ui-tooltip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover",a.type==="mouseover")}),i.content.title.button?U():s.rendered&&s.redraw()}function W(a){var b=O.button,c=O.title;if(!s.rendered)return f;a?(c||V(),U()):b.remove()}function X(a,b){var c=O.title;if(!s.rendered||!a)return f;d.isFunction(a)&&(a=a.call(h,P.event,s));if(a===f||!a&&a!=="")return T(f);a.jquery&&a.length>0?c.empty().append(a.css({display:"block"})):c.html(a),s.redraw(),b!==f&&s.rendered&&M[0].offsetWidth>0&&s.reposition(P.event)}function Y(a,b){function g(a){function i(c){c&&(delete h[c.src],clearTimeout(s.timers.img[c.src]),d(c).unbind(N)),d.isEmptyObject(h)&&(s.redraw(),b!==f&&s.reposition(P.event),a())}var g,h={};if((g=e.find("img[src]:not([height]):not([width])")).length===0)return i();g.each(function(a,b){if(h[b.src]!==c)return;var e=0,f=3;(function g(){if(b.height||b.width||e>f)return i(b);e+=1,s.timers.img[b.src]=setTimeout(g,700)})(),d(b).bind("error"+N+" load"+N,function(){i(this)}),h[b.src]=b})}var e=O.content;return!s.rendered||!a?f:(d.isFunction(a)&&(a=a.call(h,P.event,s)||""),a.jquery&&a.length>0?e.empty().append(a.css({display:"block"})):e.html(a),s.rendered<0?M.queue("fx",g):(L=0,g(d.noop)),s)}function Z(){function l(a){if(M.hasClass(z))return f;clearTimeout(s.timers.show),clearTimeout(s.timers.hide);var b=function(){s.toggle(e,a)};i.show.delay>0?s.timers.show=setTimeout(b,i.show.delay):b()}function m(a){if(M.hasClass(z)||K||L)return f;var b=d(a.relatedTarget||a.target),e=b.closest(A)[0]===M[0],h=b[0]===g.show[0];clearTimeout(s.timers.show),clearTimeout(s.timers.hide);if(c.target==="mouse"&&e||i.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(e||h)){try{a.preventDefault(),a.stopImmediatePropagation()}catch(j){}return}i.hide.delay>0?s.timers.hide=setTimeout(function(){s.hide(a)},i.hide.delay):s.hide(a)}function n(a){if(M.hasClass(z))return f;clearTimeout(s.timers.inactive),s.timers.inactive=setTimeout(function(){s.hide(a)},i.hide.inactive)}function o(a){s.rendered&&M[0].offsetWidth>0&&s.reposition(a)}var c=i.position,g={show:i.show.target,hide:i.hide.target,viewport:d(c.viewport),document:d(b),body:d(b.body),window:d(a)},j={show:d.trim(""+i.show.event).split(" "),hide:d.trim(""+i.hide.event).split(" ")},k=d.browser.msie&&parseInt(d.browser.version,10)===6;M.bind("mouseenter"+N+" mouseleave"+N,function(a){var b=a.type==="mouseenter";b&&s.focus(a),M.toggleClass(D,b)}),/mouse(out|leave)/i.test(i.hide.event)&&i.hide.leave==="window"&&g.window.bind("mouseout"+N+" blur"+N,function(a){!/select|option/.test(a.target.nodeName)&&!a.relatedTarget&&s.hide(a)}),i.hide.fixed?(g.hide=g.hide.add(M),M.bind("mouseover"+N,function(){M.hasClass(z)||clearTimeout(s.timers.hide)})):/mouse(over|enter)/i.test(i.show.event)&&g.hide.bind("mouseleave"+N,function(a){clearTimeout(s.timers.show)}),(""+i.hide.event).indexOf("unfocus")>-1&&c.container.closest("html").bind("mousedown"+N,function(a){var b=d(a.target),c=s.rendered&&!M.hasClass(z)&&M[0].offsetWidth>0,e=b.parents(A).filter(M[0]).length>0;b[0]!==h[0]&&b[0]!==M[0]&&!e&&!h.has(b[0]).length&&!b.attr("disabled")&&s.hide(a)}),"number"==typeof i.hide.inactive&&(g.show.bind("qtip-"+q+"-inactive",n),d.each(t.inactiveEvents,function(a,b){g.hide.add(O.tooltip).bind(b+N+"-inactive",n)})),d.each(j.hide,function(a,b){var c=d.inArray(b,j.show),e=d(g.hide);c>-1&&e.add(g.show).length===e.length||b==="unfocus"?(g.show.bind(b+N,function(a){M[0].offsetWidth>0?m(a):l(a)}),delete j.show[c]):g.hide.bind(b+N,m)}),d.each(j.show,function(a,b){g.show.bind(b+N,l)}),"number"==typeof i.hide.distance&&g.show.add(M).bind("mousemove"+N,function(a){var b=P.origin||{},c=i.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&s.hide(a)}),c.target==="mouse"&&(g.show.bind("mousemove"+N,function(a){v={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),c.adjust.mouse&&(i.hide.event&&(M.bind("mouseleave"+N,function(a){(a.relatedTarget||a.target)!==g.show[0]&&s.hide(a)}),O.target.bind("mouseenter"+N+" mouseleave"+N,function(a){P.onTarget=a.type==="mouseenter"})),g.document.bind("mousemove"+N,function(a){s.rendered&&P.onTarget&&!M.hasClass(z)&&M[0].offsetWidth>0&&s.reposition(a||v)}))),(c.adjust.resize||g.viewport.length)&&(d.event.special.resize?g.viewport:g.window).bind("resize"+N,o),(g.viewport.length||k&&M.css("position")==="fixed")&&g.viewport.bind("scroll"+N,o)}function _(){var c=[i.show.target[0],i.hide.target[0],s.rendered&&O.tooltip[0],i.position.container[0],i.position.viewport[0],i.position.container.closest("html")[0],a,b];s.rendered?d([]).pushStack(d.grep(c,function(a){return typeof a=="object"})).unbind(N):i.show.target.unbind(N+"-create")}var s=this,E=b.body,J=x+"-"+q,K=0,L=0,M=d(),N=".qtip-"+q,O,P;s.id=q,s.rendered=f,s.destroyed=f,s.elements=O={target:h},s.timers={img:{}},s.options=i,s.checks={},s.plugins={},s.cache=P={event:{},target:d(),disabled:f,attr:r,onTarget:f,lastClass:""},s.checks.builtin={"^id$":function(a,b,c){var g=c===e?t.nextid:c,h=x+"-"+g;g!==f&&g.length>0&&!d("#"+h).length&&(M[0].id=h,O.content[0].id=h+"-content",O.title[0].id=h+"-title")},"^content.text$":function(a,b,c){Y(c)},"^content.title.text$":function(a,b,c){if(!c)return T();!O.title&&c&&V(),X(c)},"^content.title.button$":function(a,b,c){W(c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(a[b]=new u.Corner(c))},"^position.container$":function(a,b,c){s.rendered&&M.appendTo(c)},"^show.ready$":function(){s.rendered?s.toggle(e):s.render(1)},"^style.classes$":function(a,b,c){M.attr("class",x+" qtip "+c)},"^style.widget|content.title":S,"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){M[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var a=i.position;M.attr("tracking",a.target==="mouse"&&a.adjust.mouse),_(),Z()}},d.extend(s,{render:function(a){if(s.rendered)return s;var b=i.content.text,c=i.content.title.text,g=i.position;return d.attr(h[0],"aria-describedby",J),M=O.tooltip=d("
",{id:J,"class":x+" qtip "+B+" "+i.style.classes+" "+x+"-pos-"+i.position.my.abbrev(),width:i.style.width||"",height:i.style.height||"",tracking:g.target==="mouse"&&g.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":f,"aria-describedby":J+"-content","aria-hidden":e}).toggleClass(z,P.disabled).data("qtip",s).appendTo(i.position.container).append(O.content=d("
",{"class":x+"-content",id:J+"-content","aria-atomic":e})),s.rendered=-1,L=1,K=1,c&&(V(),d.isFunction(c)||X(c,f)),d.isFunction(b)||Y(b,f),s.rendered=e,S(),d.each(i.events,function(a,b){d.isFunction(b)&&M.bind(a==="toggle"?"tooltipshow tooltiphide":"tooltip"+a,b)}),d.each(u,function(){this.initialize==="render"&&this(s)}),Z(),M.queue("fx",function(b){R("render"),L=0,K=0,s.redraw(),(i.show.ready||a)&&s.toggle(e,P.event,f),b()}),s},get:function(a){var b,c;switch(a.toLowerCase()){case"dimensions":b={height:M.outerHeight(),width:M.outerWidth()};break;case"offset":b=u.offset(M,i.position.container);break;default:c=Q(a.toLowerCase()),b=c[0][c[1]],b=b.precedance?b.string():b}return b},set:function(a,b){function n(a,b){var c,d,e;for(c in l)for(d in l[c])if(e=(new RegExp(d,"i")).exec(a))b.push(e),l[c][d].apply(s,b)}var c=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,h=/^content\.(title|attr)|style/i,j=f,k=f,l=s.checks,m;return"string"==typeof a?(m=a,a={},a[m]=b):a=d.extend(e,{},a),d.each(a,function(b,e){var f=Q(b.toLowerCase()),g;g=f[0][f[1]],f[0][f[1]]="object"==typeof e&&e.nodeType?d(e):e,a[b]=[f[0],f[1],e,g],j=c.test(b)||j,k=h.test(b)||k}),I(i),K=L=1,d.each(a,n),K=L=0,s.rendered&&M[0].offsetWidth>0&&(j&&s.reposition(i.position.target==="mouse"?g:P.event),k&&s.redraw()),s},toggle:function(a,c){function t(){a?(d.browser.msie&&M[0].style.removeAttribute("filter"),M.css("overflow",""),"string"==typeof h.autofocus&&d(h.autofocus,M).focus(),h.target.trigger("qtip-"+q+"-inactive")):M.css({display:"",visibility:"",opacity:"",left:"",top:""}),R(a?"visible":"hidden")}if(!s.rendered)return a?s.render(1):s;var g=a?"show":"hide",h=i[g],j=i[a?"hide":"show"],k=i.position,l=i.content,m=M[0].offsetWidth>0,n=a||h.target.length===1,o=!c||h.target.length<2||P.target[0]===c.target,p,r;(typeof a).search("boolean|number")&&(a=!m);if(!M.is(":animated")&&m===a&&o)return s;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(P.event.type)&&i.show.target.add(c.target).length===i.show.target.length&&M.has(c.relatedTarget).length)return s;P.event=d.extend({},c)}return R(g,[90])?(d.attr(M[0],"aria-hidden",!a),a?(P.origin=d.extend({},v),s.focus(c),d.isFunction(l.text)&&Y(l.text,f),d.isFunction(l.title.text)&&X(l.title.text,f),!G&&k.target==="mouse"&&k.adjust.mouse&&(d(b).bind("mousemove.qtip",function(a){v={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),G=e),s.reposition(c,arguments[2]),!h.solo||d(A,h.solo).not(M).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(s.timers.show),delete P.origin,G&&!d(A+'[tracking="true"]:visible',h.solo).not(M).length&&(d(b).unbind("mousemove.qtip"),G=f),s.blur(c)),h.effect===f||n===f?(M[g](),t.call(M)):d.isFunction(h.effect)?(M.stop(1,1),h.effect.call(M,s),M.queue("fx",function(a){t(),a()})):M.fadeTo(90,a?1:0,t),a&&h.target.trigger("qtip-"+q+"-inactive"),s):s},show:function(a){return s.toggle(e,a)},hide:function(a){return s.toggle(f,a)},focus:function(a){if(!s.rendered)return s;var b=d(A),c=parseInt(M[0].style.zIndex,10),e=t.zindex+b.length,f=d.extend({},a),g;return M.hasClass(C)||R("focus",[e],f)&&(c!==e&&(b.each(function(){this.style.zIndex>c&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+C).qtip("blur",f)),M.addClass(C)[0].style.zIndex=e),s},blur:function(a){return M.removeClass(C),R("blur",[M.css("zIndex")],a),s},reposition:function(c,e){if(!s.rendered||K)return s;K=1;var g=i.position.target,h=i.position,j=h.my,k=h.at,q=h.adjust,r=q.method.split(" "),t=M.outerWidth(),w=M.outerHeight(),x=0,y=0,z=M.css("position")==="fixed",A=h.viewport,B={left:0,top:0},C=h.container,D=M[0].offsetWidth>0,E,F,G;if(d.isArray(g)&&g.length===2)k={x:m,y:l},B={left:g[0],top:g[1]};else if(g==="mouse"&&(c&&c.pageX||P.event.pageX))k={x:m,y:l},c=(c&&(c.type==="resize"||c.type==="scroll")?P.event:c&&c.pageX&&c.type==="mousemove"?c:v&&v.pageX&&(q.mouse||!c||!c.pageX)?{pageX:v.pageX,pageY:v.pageY}:!q.mouse&&P.origin&&P.origin.pageX&&i.show.distance?P.origin:c)||c||P.event||v||{},B={top:c.pageY,left:c.pageX};else{g==="event"&&c&&c.target&&c.type!=="scroll"&&c.type!=="resize"?P.target=d(c.target):g!=="event"&&(P.target=d(g.jquery?g:O.target)),g=P.target,g=d(g).eq(0);if(g.length===0)return s;g[0]===b||g[0]===a?(x=u.iOS?a.innerWidth:g.width(),y=u.iOS?a.innerHeight:g.height(),g[0]===a&&(B={top:(A||g).scrollTop(),left:(A||g).scrollLeft()})):u.imagemap&&g.is("area")?E=u.imagemap(s,g,k,u.viewport?r:f):u.svg&&typeof g[0].xmlbase=="string"?E=u.svg(s,g,k,u.viewport?r:f):(x=g.outerWidth(),y=g.outerHeight(),B=u.offset(g,C)),E&&(x=E.width,y=E.height,F=E.offset,B=E.position);if(u.iOS>3.1&&u.iOS<4.1||u.iOS>=4.3&&u.iOS<4.33||!u.iOS&&z)G=d(a),B.left-=G.scrollLeft(),B.top-=G.scrollTop();B.left+=k.x===o?x:k.x===p?x/2:0,B.top+=k.y===n?y:k.y===p?y/2:0}return B.left+=q.x+(j.x===o?-t:j.x===p?-t/2:0),B.top+=q.y+(j.y===n?-w:j.y===p?-w/2:0),u.viewport?(B.adjusted=u.viewport(s,B,h,x,y,t,w),F&&B.adjusted.left&&(B.left+=F.left),F&&B.adjusted.top&&(B.top+=F.top)):B.adjusted={left:0,top:0},R("move",[B,A.elem||A],c)?(delete B.adjusted,e===f||!D||isNaN(B.left)||isNaN(B.top)||g==="mouse"||!d.isFunction(h.effect)?M.css(B):d.isFunction(h.effect)&&(h.effect.call(M,s,d.extend({},B)),M.queue(function(a){d(this).css({opacity:"",height:""}),d.browser.msie&&this.style.removeAttribute("filter"),a()})),K=0,s):s},redraw:function(){if(s.rendered<1||L)return s;var a=i.style,b=i.position.container,c,d,e,f;return L=1,R("redraw"),a.height&&M.css(k,a.height),a.width?M.css(j,a.width):(M.css(j,"").appendTo(H),d=M.width(),d%2<1&&(d+=1),e=M.css("max-width")||"",f=M.css("min-width")||"",c=(e+f).indexOf("%")>-1?b.width()/100:0,e=(e.indexOf("%")>-1?c:1)*parseInt(e,10)||d,f=(f.indexOf("%")>-1?c:1)*parseInt(f,10)||0,d=e+f?Math.min(Math.max(d,f),e):d,M.css(j,Math.round(d)).appendTo(b)),R("redrawn"),L=0,s},disable:function(a){return"boolean"!=typeof a&&(a=!M.hasClass(z)&&!P.disabled),s.rendered?(M.toggleClass(z,a),d.attr(M[0],"aria-disabled",a)):P.disabled=!!a,s},enable:function(){return s.disable(f)},destroy:function(){var a=h[0],b=d.attr(a,F),c=h.data("qtip");s.destroyed=e,s.rendered&&(M.stop(1,0).remove(),d.each(s.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(s.timers.show),clearTimeout(s.timers.hide),_();if(!c||s===c)d.removeData(a,"qtip"),i.suppress&&b&&(d.attr(a,"title",b),h.removeAttr(F)),h.removeAttr("aria-describedby");return h.unbind(".qtip-"+q),delete w[s.id],h}})}function K(a,c){var h,i,j,k,l,m=d(this),n=d(b.body),o=this===b?n:m,p=m.metadata?m.metadata(c.metadata):g,q=c.metadata.type==="html5"&&p?p[c.metadata.name]:g,r=m.data(c.metadata.name||"qtipopts");try{r=typeof r=="string"?d.parseJSON(r):r}catch(s){}k=d.extend(e,{},t.defaults,c,typeof r=="object"?I(r):g,I(q||p)),i=k.position,k.id=a;if("boolean"==typeof k.content.text){j=m.attr(k.content.attr);if(k.content.attr!==f&&j)k.content.text=j;else return f}i.container.length||(i.container=n),i.target===f&&(i.target=o),k.show.target===f&&(k.show.target=o),k.show.solo===e&&(k.show.solo=i.container.closest("body")),k.hide.target===f&&(k.hide.target=o),k.position.viewport===e&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new u.Corner(i.at),i.my=new u.Corner(i.my);if(d.data(this,"qtip"))if(k.overwrite)m.qtip("destroy");else if(k.overwrite===f)return f;return k.suppress&&(l=d.attr(this,"title"))&&d(this).removeAttr("title").attr(F,l).attr("title",""),h=new J(m,k,a,!!j),d.data(this,"qtip",h),m.bind("remove.qtip-"+a+" removeqtip.qtip-"+a,function(){h.destroy()}),h}function L(a){var b=this,c=a.elements.tooltip,g=a.options.content.ajax,h=t.defaults.content.ajax,i=".qtip-ajax",j=/)<[^<]*)*<\/script>/gi,k=e,l=f,m;a.checks.ajax={"^content.ajax":function(a,d,e){d==="ajax"&&(g=e),d==="once"?b.init():g&&g.url?b.load():c.unbind(i)}},d.extend(b,{init:function(){return g&&g.url&&c.unbind(i)[g.once?"one":"bind"]("tooltipshow"+i,b.load),b},load:function(c){function r(){var b;if(a.destroyed)return;k=f,p&&(l=e,a.show(c.originalEvent)),(b=h.complete||g.complete)&&d.isFunction(b)&&b.apply(g.context||a,arguments)}function s(b,c,e){var f;if(a.destroyed)return;o&&"string"==typeof b&&(b=d("
").append(b.replace(j,"")).find(o)),(f=h.success||g.success)&&d.isFunction(f)?f.call(g.context||a,b,c,e):a.set("content.text",b)}function t(b,c,d){if(a.destroyed||b.status===0)return;a.set("content.text",c+": "+d)}if(l){l=f;return}var i=g.url.lastIndexOf(" "),n=g.url,o,p=!g.loading&&k;if(p)try{c.preventDefault()}catch(q){}else if(c&&c.isDefaultPrevented())return b;m&&m.abort&&m.abort(),i>-1&&(o=n.substr(i),n=n.substr(0,i)),m=d.ajax(d.extend({error:h.error||t,context:a},g,{url:n,success:s,complete:r}))},destroy:function(){m&&m.abort&&m.abort(),a.destroyed=e}}),b.init()}function M(a,b,c){var d=Math.ceil(b/2),e=Math.ceil(c/2),f={bottomright:[[0,0],[b,c],[b,0]],bottomleft:[[0,0],[b,0],[0,c]],topright:[[0,c],[b,0],[b,c]],topleft:[[0,0],[0,c],[b,c]],topcenter:[[0,c],[d,0],[b,c]],bottomcenter:[[0,0],[b,0],[d,c]],rightcenter:[[0,0],[b,e],[0,c]],leftcenter:[[b,0],[b,c],[0,e]]};return f.lefttop=f.bottomright,f.righttop=f.bottomleft,f.leftbottom=f.topright,f.rightbottom=f.topleft,f[a.string()]}function N(a,b){function D(a){var b=v.is(":visible");v.show(),a(),v.toggle(b)}function E(){x.width=r.height,x.height=r.width}function F(){x.width=r.width,x.height=r.height}function G(b,d,g,j){if(!t.tip)return;var k=q.corner.clone(),u=g.adjusted,v=a.options.position.adjust.method.split(" "),x=v[0],y=v[1]||v[0],z={left:f,top:f,x:0,y:0},A,B={},C;q.corner.fixed!==e&&(x===s&&k.precedance===h&&u.left&&k.y!==p?k.precedance=k.precedance===h?i:h:x!==s&&u.left&&(k.x=k.x===p?u.left>0?m:o:k.x===m?o:m),y===s&&k.precedance===i&&u.top&&k.x!==p?k.precedance=k.precedance===i?h:i:y!==s&&u.top&&(k.y=k.y===p?u.top>0?l:n:k.y===l?n:l),k.string()!==w.corner.string()&&(w.top!==u.top||w.left!==u.left)&&q.update(k,f)),A=q.position(k,u),A[k.x]+=I(k,k.x),A[k.y]+=I(k,k.y),A.right!==c&&(A.left=-A.right),A.bottom!==c&&(A.top=-A.bottom),A.user=Math.max(0,r.offset);if(z.left=x===s&&!!u.left)k.x===p?B["margin-left"]=z.x=A["margin-left"]-u.left:(C=A.right!==c?[u.left,-A.left]:[-u.left,A.left],(z.x=Math.max(C[0],C[1]))>C[0]&&(g.left-=u.left,z.left=f),B[A.right!==c?o:m]=z.x);if(z.top=y===s&&!!u.top)k.y===p?B["margin-top"]=z.y=A["margin-top"]-u.top:(C=A.bottom!==c?[u.top,-A.top]:[-u.top,A.top],(z.y=Math.max(C[0],C[1]))>C[0]&&(g.top-=u.top,z.top=f),B[A.bottom!==c?n:l]=z.y);t.tip.css(B).toggle(!(z.x&&z.y||k.x===p&&z.y||k.y===p&&z.x)),g.left-=A.left.charAt?A.user:x!==s||z.top||!z.left&&!z.top?A.left:0,g.top-=A.top.charAt?A.user:y!==s||z.left||!z.left&&!z.top?A.top:0,w.left=u.left,w.top=u.top,w.corner=k.clone()}function H(){var b=r.corner,c=a.options.position,d=c.at,g=c.my.string?c.my.string():c.my;return b===f||g===f&&d===f?f:(b===e?q.corner=new u.Corner(g):b.string||(q.corner=new u.Corner(b),q.corner.fixed=e),w.corner=new u.Corner(q.corner.string()),q.corner.string()!=="centercenter")}function I(a,b,c){b=b?b:a[a.precedance];var d=t.titlebar&&a.y===l,e=d?t.titlebar:v,f="border-"+b+"-width",g=function(a){return parseInt(a.css(f),10)},h;return D(function(){h=(c?g(c):g(t.content)||g(e)||g(v))||0}),h}function J(a){var b=t.titlebar&&a.y===l,c=b?t.titlebar:t.content,e=d.browser.mozilla,f=e?"-moz-":d.browser.webkit?"-webkit-":"",g="border-radius-"+a.y+a.x,h="border-"+a.y+"-"+a.x+"-radius",i=function(a){return parseInt(c.css(a),10)||parseInt(v.css(a),10)},j;return D(function(){j=i(h)||i(f+h)||i(f+g)||i(g)||0}),j}function K(a){function z(a,b,c){var d=a.css(b)||n;return c&&d===a.css(c)?f:j.test(d)?f:d}var b,c,g,h=t.tip.css("cssText",""),i=a||q.corner,j=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,k="border-"+i[i.precedance]+"-color",m="background-color",n="transparent",o=" !important",s=t.titlebar,u=s&&(i.y===l||i.y===p&&h.position().top+x.height/2+r.offset-1,f=c*(e?.5:1),g=Math.pow,h=Math.round,l,m,n,o=Math.sqrt(g(f,2)+g(d,2)),q=[z/f*o,z/d*o];return q[2]=Math.sqrt(g(q[0],2)-g(z,2)),q[3]=Math.sqrt(g(q[1],2)-g(z,2)),l=o+q[2]+q[3]+(e?0:q[0]),m=l/o,n=[h(m*d),h(m*c)],{height:n[b?0:1],width:n[b?1:0]}}function N(a,b,c){return"'}var q=this,r=a.options.style.tip,t=a.elements,v=t.tooltip,w={top:0,left:0},x={width:r.width,height:r.height},y={},z=r.border||0,A=".qtip-tip",B=!!(d("")[0]||{}).getContext,C;q.corner=g,q.mimic=g,q.border=z,q.offset=r.offset,q.size=x,a.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){q.init()||q.destroy(),a.reposition()},"^style.tip.(height|width)$":function(){x={width:r.width,height:r.height},q.create(),q.update(),a.reposition()},"^content.title.text|style.(classes|widget)$":function(){t.tip&&t.tip.length&&q.update()}},d.extend(q,{init:function(){var a=H()&&(B||d.browser.msie);return a&&(q.create(),q.update(),v.unbind(A).bind("tooltipmove"+A,G),B||v.bind("tooltipredraw tooltipredrawn",function(a){a.type==="tooltipredraw"?(C=t.tip.html(),t.tip.html("")):t.tip.html(C)})),a},create:function(){var a=x.width,b=x.height,c;t.tip&&t.tip.remove(),t.tip=d("
",{"class":"ui-tooltip-tip"}).css({width:a,height:b}).prependTo(v),B?d("").appendTo(t.tip)[0].getContext("2d").save():(c=N("shape",'coordorigin="0,0"',"position:absolute;"),t.tip.html(c+c),d("*",t.tip).bind("click mousedown",function(a){a.stopPropagation()}))},update:function(a,b){var c=t.tip,j=c.children(),k=x.width,s=x.height,A=r.mimic,C=Math.round,D,G,H,J,O;a||(a=w.corner||q.corner),A===f?A=a:(A=new u.Corner(A),A.precedance=a.precedance,A.x==="inherit"?A.x=a.x:A.y==="inherit"?A.y=a.y:A.x===A.y&&(A[a.precedance]=a[a.precedance])),D=A.precedance,a.precedance===h?E():F(),t.tip.css({width:k=x.width,height:s=x.height}),K(a),y.border!=="transparent"?(z=I(a,g),r.border===0&&z>0&&(y.fill=y.border),q.border=z=r.border!==e?r.border:z):q.border=z=0,H=M(A,k,s),q.size=O=L(a),c.css(O),a.precedance===i?J=[C(A.x===m?z:A.x===o?O.width-k-z:(O.width-k)/2),C(A.y===l?O.height-s:0)]:J=[C(A.x===m?O.width-k:0),C(A.y===l?z:A.y===n?O.height-s-z:(O.height-s)/2)],B?(j.attr(O),G=j[0].getContext("2d"),G.restore(),G.save(),G.clearRect(0,0,3e3,3e3),G.fillStyle=y.fill,G.strokeStyle=y.border,G.lineWidth=z*2,G.lineJoin="miter",G.miterLimit=100,G.translate(J[0],J[1]),G.beginPath(),G.moveTo(H[0][0],H[0][1]),G.lineTo(H[1][0],H[1][1]),G.lineTo(H[2][0],H[2][1]),G.closePath(),z&&(v.css("background-clip")==="border-box"&&(G.strokeStyle=y.fill,G.stroke()),G.strokeStyle=y.border,G.stroke()),G.fill()):(H="m"+H[0][0]+","+H[0][1]+" l"+H[1][0]+","+H[1][1]+" "+H[2][0]+","+H[2][1]+" xe",J[2]=z&&/^(r|b)/i.test(a.string())?parseFloat(d.browser.version,10)===8?2:1:0,j.css({coordsize:k+z+" "+(s+z),antialias:""+(A.string().indexOf(p)>-1),left:J[0],top:J[1],width:k+z,height:s+z}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k+z+" "+(s+z),path:H,fillcolor:y.fill,filled:!!a,stroked:!a}).toggle(!!z||!!a),!a&&b.html()===""&&b.html(N("stroke",'weight="'+z*2+'px" color="'+y.border+'" miterlimit="1000" joinstyle="miter"'))})),b!==f&&q.position(a)},position:function(a){var b=t.tip,c={},e=Math.max(0,r.offset),g,n,o;return r.corner===f||!b?f:(a=a||q.corner,g=a.precedance,n=L(a),o=[a.x,a.y],g===h&&o.reverse(),d.each(o,function(b,d){var f,h,o;d===p?(f=g===i?m:l,c[f]="50%",c["margin-"+f]=-Math.round(n[g===i?j:k]/2)+e):(f=I(a,d),h=I(a,d,t.content),o=J(a),c[d]=b?h:e+(o>f?o:-f))}),c[a[g]]-=n[g===h?j:k],b.css({top:"",bottom:"",left:"",right:"",margin:""}).css(c),c)},destroy:function(){t.tip&&t.tip.remove(),t.tip=!1,v.unbind(A)}}),q.init()}function O(c){function s(){q=d(p,j).not("[disabled]").map(function(){return typeof this.focus=="function"?this:null})}function t(a){q.length<1&&a.length?a.not("body").blur():q.first().focus()}function v(a){var b=d(a.target),c=b.closest(".qtip"),e;e=c.length<1?f:parseInt(c[0].style.zIndex,10)>parseInt(j[0].style.zIndex,10),!e&&d(a.target).closest(A)[0]!==j[0]&&t(b)}var g=this,h=c.options.show.modal,i=c.elements,j=i.tooltip,k="#qtip-overlay",l=".qtipmodal",m=l+c.id,n="is-modal-qtip",o=d(b.body),p=u.modal.focusable.join(","),q={},r;c.checks.modal={"^show.modal.(on|blur)$":function(){g.init(),i.overlay.toggle(j.is(":visible"))},"^content.text$":function(){s()}},d.extend(g,{init:function(){return h.on?(r=g.create(),j.attr(n,e).css("z-index",u.modal.zindex+d(A+"["+n+"]").length).unbind(l).unbind(m).bind("tooltipshow"+l+" tooltiphide"+l,function(a,b,c){var e=a.originalEvent;if(a.target===j[0])if(e&&a.type==="tooltiphide"&&/mouse(leave|enter)/.test(e.type)&&d(e.relatedTarget).closest(r[0]).length)try{a.preventDefault()}catch(f){}else(!e||e&&!e.solo)&&g[a.type.replace("tooltip","")](a,c)}).bind("tooltipfocus"+l,function(a){if(a.isDefaultPrevented()||a.target!==j[0])return;var b=d(A).filter("["+n+"]"),c=u.modal.zindex+b.length,e=parseInt(j[0].style.zIndex,10);r[0].style.zIndex=c-2,b.each(function(){this.style.zIndex>e&&(this.style.zIndex-=1)}),b.end().filter("."+C).qtip("blur",a.originalEvent),j.addClass(C)[0].style.zIndex=c;try{a.preventDefault()}catch(f){}}).bind("tooltiphide"+l,function(a){a.target===j[0]&&d("["+n+"]").filter(":visible").not(j).last().qtip("focus",a)}),h.escape&&d(b).unbind(m).bind("keydown"+m,function(a){a.keyCode===27&&j.hasClass(C)&&c.hide(a)}),h.blur&&i.overlay.unbind(m).bind("click"+m,function(a){j.hasClass(C)&&c.hide(a)}),s(),g):g},create:function(){function c(){r.css({height:d(a).height(),width:d(a).width()})}var b=d(k);return b.length?i.overlay=b.insertAfter(d(A).last()):(r=i.overlay=d("
",{id:k.substr(1),html:"
",mousedown:function(){return f}}).hide().insertAfter(d(A).last()),d(a).unbind(l).bind("resize"+l,c),c(),r)},toggle:function(a,b,c){if(a&&a.isDefaultPrevented())return g;var i=h.effect,k=b?"show":"hide",l=r.is(":visible"),p=d("["+n+"]").filter(":visible").not(j),q;return r||(r=g.create()),r.is(":animated")&&l===b||!b&&p.length?g:(b?(r.css({left:0,top:0}),r.toggleClass("blurs",h.blur),h.stealfocus!==f&&(o.bind("focusin"+m,v),t(d("body :focus")))):o.unbind("focusin"+m),r.stop(e,f),d.isFunction(i)?i.call(r,b):i===f?r[k]():r.fadeTo(parseInt(c,10)||90,b?1:0,function(){b||d(this).hide()}),b||r.queue(function(a){r.css({left:"",top:""}),a()}),g)},show:function(a,b){return g.toggle(a,e,b)},hide:function(a,b){return g.toggle(a,f,b)},destroy:function(){var a=r;return a&&(a=d("["+n+"]").not(j).length<1,a?(i.overlay.remove(),d(b).unbind(l)):i.overlay.unbind(l+c.id),o.undelegate("*","focusin"+m)),j.removeAttr(n).unbind(l)}}),g.init()}function P(a){var b=this,c=a.elements,e=c.tooltip,f=".bgiframe-"+a.id;d.extend(b,{init:function(){c.bgiframe=d(''),c.bgiframe.appendTo(e),e.bind("tooltipmove"+f,b.adjust)},adjust:function(){var b=a.get("dimensions"),d=a.plugins.tip,f=c.tip,g,h;h=parseInt(e.css("border-left-width"),10)||0,h={left:-h,top:-h},d&&f&&(g=d.corner.precedance==="x"?["width","left"]:["height","top"],h[g[1]]-=f[g[0]]()),c.bgiframe.css(h).css(b)},destroy:function(){c.bgiframe.remove(),e.unbind(f)}}),b.init()}var e=!0,f=!1,g=null,h="x",i="y",j="width",k="height",l="top",m="left",n="bottom",o="right",p="center",q="flip",r="flipinvert",s="shift",t,u,v,w={},x="ui-tooltip",y="ui-widget",z="ui-state-disabled",A="div.qtip."+x,B=x+"-default",C=x+"-focus",D=x+"-hover",E="_replacedByqTip",F="oldtitle",G,H;H=d("
",{id:"qtip-rcontainer"}),d(function(){H.appendTo(b.body)}),t=d.fn.qtip=function(a,b,h){var i=(""+a).toLowerCase(),j=g,k=d.makeArray(arguments).slice(1),l=k[k.length-1],m=this[0]?d.data(this[0],"qtip"):g;if(!arguments.length&&m||i==="api")return m;if("string"==typeof a)return this.each(function(){var a=d.data(this,"qtip");if(!a)return e;l&&l.timeStamp&&(a.cache.event=l);if(i!=="option"&&i!=="options"||!b)a[i]&&a[i].apply(a[i],k);else if(d.isPlainObject(b)||h!==c)a.set(b,h);else return j=a.get(b),f}),j!==g?j:this;if("object"==typeof a||!arguments.length)return m=I(d.extend(e,{},a)),t.bind.call(this,m,l)},t.bind=function(a,b){return this.each(function(g){function n(a){function b(){l.render(typeof a=="object"||h.show.ready),i.show.add(i.hide).unbind(k)}if(l.cache.disabled)return f;l.cache.event=d.extend({},a),l.cache.target=a?d(a.target):[c],h.show.delay>0?(clearTimeout(l.timers.show),l.timers.show=setTimeout(b,h.show.delay),j.show!==j.hide&&i.hide.bind(j.hide,function(){clearTimeout(l.timers.show)})):b()}var h,i,j,k,l,m;m=d.isArray(a.id)?a.id[g]:a.id,m=!m||m===f||m.length<1||w[m]?t.nextid++:w[m]=m,k=".qtip-"+m+"-create",l=K.call(this,m,a);if(l===f)return e;h=l.options,d.each(u,function(){this.initialize==="initialize"&&this(l)}),i={show:h.show.target,hide:h.hide.target},j={show:d.trim(""+h.show.event).replace(/ /g,k+" ")+k,hide:d.trim(""+h.hide.event).replace(/ /g,k+" ")+k},/mouse(over|enter)/i.test(j.show)&&!/mouse(out|leave)/i.test(j.hide)&&(j.hide+=" mouseleave"+k),i.show.bind("mousemove"+k,function(a){v={pageX:a.pageX,pageY:a.pageY,type:"mousemove"},l.cache.onTarget=e}),i.show.bind(j.show,n),(h.show.ready||h.prerender)&&n(b)})},u=t.plugins={Corner:function(a){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,p).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var b=a.charAt(0);this.precedance=b==="t"||b==="b"?i:h,this.string=function(){return this.precedance===i?this.y+this.x:this.x+this.y},this.abbrev=function(){var a=this.x.substr(0,1),b=this.y.substr(0,1);return a===b?a:this.precedance===i?b+a:a+b},this.invertx=function(a){this.x=this.x===m?o:this.x===o?m:a||this.x},this.inverty=function(a){this.y=this.y===l?n:this.y===n?l:a||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(a,b){function j(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}var c=a.offset(),e=a.closest("body")[0],f=b,g,h,i;if(f){do f.css("position")!=="static"&&(h=f.position(),c.left-=h.left+(parseInt(f.css("borderLeftWidth"),10)||0)+(parseInt(f.css("marginLeft"),10)||0),c.top-=h.top+(parseInt(f.css("borderTopWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0),!g&&(i=f.css("overflow"))!=="hidden"&&i!=="visible"&&(g=f));while((f=d(f[0].offsetParent)).length);g&&g[0]!==e&&j(g,1)}return c},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||f,fn:{attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,F):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(F,b))}return d.fn["attr"+E].apply(this,arguments)},clone:function(a){var b=d([]),c="title",e=d.fn["clone"+E].apply(this,arguments);return a||e.filter("["+F+"]").attr("title",function(){return d.attr(this,F)}).removeAttr(F),e}}},d.each(u.fn,function(a,b){if(!b||d.fn[a+E])return e;var c=d.fn[a+E]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+E]=d.cleanData,d.cleanData=function(a){for(var b=0,e;(e=a[b])!==c;b++)try{d(e).triggerHandler("removeqtip")}catch(f){}d["cleanData"+E](a)}),t.version="@VERSION",t.nextid=0,t.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),t.zindex=15e3,t.defaults={prerender:f,id:f,overwrite:e,suppress:e,content:{text:e,attr:"title",title:{text:f,button:f}},position:{my:"top left",at:"bottom right",target:f,container:f,viewport:f,adjust:{x:0,y:0,mouse:e,resize:e,method:"flip flip"},effect:function(a,b,c){d(this).animate(b,{duration:200,queue:f})}},show:{target:f,event:"mouseenter",effect:e,delay:90,solo:f,ready:f,autofocus:f},hide:{target:f,event:"mouseleave",effect:e,delay:0,fixed:f,inactive:f,leave:"window",distance:f},style:{classes:"",widget:f,width:f,height:f,def:e},events:{render:g,move:g,show:g,hide:g,toggle:g,visible:g,hidden:g,focus:g,blur:g}},u.svg=function(a,c,e,f){var g=d(b),h=c[0],i={width:0,height:0,position:{top:1e10,left:1e10}},j,k,l,m,n;while(!h.getBBox)h=h.parentNode;if(h.getBBox&&h.parentNode){j=h.getBBox(),k=h.getScreenCTM(),l=h.farthestViewportElement||h;if(!l.createSVGPoint)return i;m=l.createSVGPoint(),m.x=j.x,m.y=j.y,n=m.matrixTransform(k),i.position.left=n.x,i.position.top=n.y,m.x+=j.width,m.y+=j.height,n=m.matrixTransform(k),i.width=n.x-i.position.left,i.height=n.y-i.position.top,i.position.left+=g.scrollLeft(),i.position.top+=g.scrollTop()}return i},u.ajax=function(a){var b=a.plugins.ajax;return"object"==typeof b?b:a.plugins.ajax=new L(a)},u.ajax.initialize="render",u.ajax.sanitize=function(a){var b=a.content,c;b&&"ajax"in b&&(c=b.ajax,typeof c!="object"&&(c=a.content.ajax={url:c}),"boolean"!=typeof c.once&&c.once&&(c.once=!!c.once))},d.extend(e,t.defaults,{content:{ajax:{loading:e,once:e}}}),u.tip=function(a){var b=a.plugins.tip;return"object"==typeof b?b:a.plugins.tip=new N(a)},u.tip.initialize="render",u.tip.sanitize=function(a){var b=a.style,c;b&&"tip"in b&&(c=a.style.tip,typeof c!="object"&&(a.style.tip={corner:c}),/string|boolean/i.test(typeof c.corner)||(c.corner=e),typeof c.width!="number"&&delete c.width,typeof c.height!="number"&&delete c.height,typeof c.border!="number"&&c.border!==e&&delete c.border,typeof c.offset!="number"&&delete c.offset)},d.extend(e,t.defaults,{style:{tip:{corner:e,mimic:f,width:6,height:6,border:e,offset:0}}}),u.modal=function(a){var b=a.plugins.modal;return"object"==typeof b?b:a.plugins.modal=new O(a)},u.modal.initialize="render",u.modal.sanitize=function(a){a.show&&(typeof a.show.modal!="object"?a.show.modal={on:!!a.show.modal}:typeof a.show.modal.on=="undefined"&&(a.show.modal.on=e))},u.modal.zindex=t.zindex-200,u.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],d.extend(e,t.defaults,{show:{modal:{on:f,effect:e,blur:e,stealfocus:e,escape:e}}}),u.viewport=function(c,d,e,f,g,q,t){function L(a,b,c,e,f,g,h,i,j){var k=d[f],l=w[a],m=y[a],n=c===s,o=-E.offset[f]+D.offset[f]+D["scroll"+f],q=l===f?j:l===g?-j:-j/2,t=m===f?i:m===g?-i:-i/2,u=G&&G.size?G.size[h]||0:0,v=G&&G.corner&&G.corner.precedance===a&&!n?u:0,x=o-k+v,z=k+j-D[h]-o+v,A=q-(w.precedance===a||l===w[b]?t:0)-(m===p?i/2:0);return n?(v=G&&G.corner&&G.corner.precedance===b?u:0,A=(l===f?1:-1)*q-v,d[f]+=x>0?x:z>0?-z:0,d[f]=Math.max(-E.offset[f]+D.offset[f]+(v&&G.corner[a]===p?G.offset:0),k-A,Math.min(Math.max(-E.offset[f]+D.offset[f]+D[h],k+A),d[f]))):(e*=c===r?2:0,x>0&&(l!==f||z>0)?(d[f]-=A+e,J["invert"+a](f)):z>0&&(l!==g||x>0)&&(d[f]-=(l===p?-A:A)+e,J["invert"+a](g)),d[f]z&&(d[f]=k,J=w.clone())),d[f]-k}var u=e.target,v=c.elements.tooltip,w=e.my,y=e.at,z=e.adjust,A=z.method.split(" "),B=A[0],C=A[1]||A[0],D=e.viewport,E=e.container,F=c.cache,G=c.plugins.tip,H={left:0,top:0},I,J,K;if(!D.jquery||u[0]===a||u[0]===b.body||z.method==="none")return H;I=v.css("position")==="fixed",D={elem:D,height:D[(D[0]===a?"h":"outerH")+"eight"](),width:D[(D[0]===a?"w":"outerW")+"idth"](),scrollleft:I?0:D.scrollLeft(),scrolltop:I?0:D.scrollTop(),offset:D.offset()||{left:0,top:0}},E={elem:E,scrollLeft:E.scrollLeft(),scrollTop:E.scrollTop(),offset:E.offset()||{left:0,top:0}};if(B!=="shift"||C!=="shift")J=w.clone();return H={left:B!=="none"?L(h,i,B,z.x,m,o,j,f,q):0,top:C!=="none"?L(i,h,C,z.y,l,n,k,g,t):0},J&&F.lastClass!==(K=x+"-pos-"+J.abbrev())&&v.removeClass(c.cache.lastClass).addClass(c.cache.lastClass=K),H},u.imagemap=function(a,b,c,e){function v(a,b,c){var d=0,e=1,f=1,g=0,h=0,i=a.width,j=a.height;while(i>0&&j>0&&e>0&&f>0){i=Math.floor(i/2),j=Math.floor(j/2),c.x===m?e=i:c.x===o?e=a.width-i:e+=Math.floor(i/2),c.y===l?f=j:c.y===n?f=a.height-j:f+=Math.floor(j/2),d=b.length;while(d--){if(b.length<2)break;g=b[d][0]-a.position.left,h=b[d][1]-a.position.top,(c.x===m&&g>=e||c.x===o&&g<=e||c.x===p&&(ga.width-e)||c.y===l&&h>=f||c.y===n&&h<=f||c.y===p&&(ha.height-f))&&b.splice(d,1)}}return{left:b[0][0],top:b[0][1]}}b.jquery||(b=d(b));var f=a.cache.areas={},g=(b[0].shape||b.attr("shape")).toLowerCase(),h=b[0].coords||b.attr("coords"),i=h.split(","),j=[],k=d('img[usemap="#'+b.parent("map").attr("name")+'"]'),q=k.offset(),r={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},s=0,t=0,u;q.left+=Math.ceil((k.outerWidth()-k.width())/2),q.top+=Math.ceil((k.outerHeight()-k.height())/2);if(g==="poly"){s=i.length;while(s--)t=[parseInt(i[--s],10),parseInt(i[s+1],10)],t[0]>r.position.right&&(r.position.right=t[0]),t[0]r.position.bottom&&(r.position.bottom=t[1]),t[1]', +closeClass:"simplemodal-close",escClose:!0,overlayClose:!1,fixed:!0,position:null,persist:!1,modal:!0,onOpen:null,onShow:null,onClose:null};b.modal.impl={d:{},init:function(a,d){if(this.d.data)return!1;n=b.browser.msie&&!b.support.boxModel;this.o=b.extend({},b.modal.defaults,d);this.zIndex=this.o.zIndex;this.occb=!1;if("object"===typeof a){if(a=a instanceof b?a:b(a),this.d.placeholder=!1,0").attr("id","simplemodal-placeholder").css({display:"none"})), +this.d.placeholder=!0,this.display=a.css("display"),!this.o.persist))this.d.orig=a.clone(!0)}else if("string"===typeof a||"number"===typeof a)a=b("
").html(a);else return alert("SimpleModal Error: Unsupported data type: "+typeof a),this;this.create(a);this.open();b.isFunction(this.o.onShow)&&this.o.onShow.apply(this,[this.d]);return this},create:function(a){this.getDimensions();if(this.o.modal&&m)this.d.iframe=b('').css(b.extend(this.o.iframeCss, +{display:"none",opacity:0,position:"fixed",height:h[0],width:h[1],zIndex:this.o.zIndex,top:0,left:0})).appendTo(this.o.appendTo);this.d.overlay=b("
").attr("id",this.o.overlayId).addClass("simplemodal-overlay").css(b.extend(this.o.overlayCss,{display:"none",opacity:this.o.opacity/100,height:this.o.modal?j[0]:0,width:this.o.modal?j[1]:0,position:"fixed",left:0,top:0,zIndex:this.o.zIndex+1})).appendTo(this.o.appendTo);this.d.container=b("
").attr("id",this.o.containerId).addClass("simplemodal-container").css(b.extend({position:this.o.fixed? +"fixed":"absolute"},this.o.containerCss,{display:"none",zIndex:this.o.zIndex+2})).append(this.o.close&&this.o.closeHTML?b(this.o.closeHTML).addClass(this.o.closeClass):"").appendTo(this.o.appendTo);this.d.wrap=b("
").attr("tabIndex",-1).addClass("simplemodal-wrap").css({height:"100%",outline:0,width:"100%"}).appendTo(this.d.container);this.d.data=a.attr("id",a.attr("id")||this.o.dataId).addClass("simplemodal-data").css(b.extend(this.o.dataCss,{display:"none"})).appendTo("body");this.setContainerDimensions(); +this.d.data.appendTo(this.d.wrap);(m||n)&&this.fixIE()},bindEvents:function(){var a=this;b("."+a.o.closeClass).bind("click.simplemodal",function(b){b.preventDefault();a.close()});a.o.modal&&a.o.close&&a.o.overlayClose&&a.d.overlay.bind("click.simplemodal",function(b){b.preventDefault();a.close()});l.bind("keydown.simplemodal",function(b){a.o.modal&&9===b.keyCode?a.watchTab(b):a.o.close&&a.o.escClose&&27===b.keyCode&&(b.preventDefault(),a.close())});k.bind("resize.simplemodal orientationchange.simplemodal", +function(){a.getDimensions();a.o.autoResize?a.setContainerDimensions():a.o.autoPosition&&a.setPosition();m||n?a.fixIE():a.o.modal&&(a.d.iframe&&a.d.iframe.css({height:h[0],width:h[1]}),a.d.overlay.css({height:j[0],width:j[1]}))})},unbindEvents:function(){b("."+this.o.closeClass).unbind("click.simplemodal");l.unbind("keydown.simplemodal");k.unbind(".simplemodal");this.d.overlay.unbind("click.simplemodal")},fixIE:function(){var a=this.o.position;b.each([this.d.iframe||null,!this.o.modal?null:this.d.overlay, +"fixed"===this.d.container.css("position")?this.d.container:null],function(b,f){if(f){var g=f[0].style;g.position="absolute";if(2>b)g.removeExpression("height"),g.removeExpression("width"),g.setExpression("height",'document.body.scrollHeight > document.body.clientHeight ? document.body.scrollHeight : document.body.clientHeight + "px"'),g.setExpression("width",'document.body.scrollWidth > document.body.clientWidth ? document.body.scrollWidth : document.body.clientWidth + "px"');else{var c,e;a&&a.constructor=== +Array?(c=a[0]?"number"===typeof a[0]?a[0].toString():a[0].replace(/px/,""):f.css("top").replace(/px/,""),c=-1===c.indexOf("%")?c+' + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"':parseInt(c.replace(/%/,""))+' * ((document.documentElement.clientHeight || document.body.clientHeight) / 100) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"',a[1]&&(e="number"===typeof a[1]? +a[1].toString():a[1].replace(/px/,""),e=-1===e.indexOf("%")?e+' + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"':parseInt(e.replace(/%/,""))+' * ((document.documentElement.clientWidth || document.body.clientWidth) / 100) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"')):(c='(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (t = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"', +e='(document.documentElement.clientWidth || document.body.clientWidth) / 2 - (this.offsetWidth / 2) + (t = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft) + "px"');g.removeExpression("top");g.removeExpression("left");g.setExpression("top",c);g.setExpression("left",e)}}})},focus:function(a){var d=this,a=a&&-1!==b.inArray(a,["first","last"])?a:"first",f=b(":input:enabled:visible:"+a,d.d.wrap);setTimeout(function(){0c?c:dc?c:this.o.minHeight&&"auto"!==i&&fe?e:ae?e:this.o.minWidth&&"auto"!==c&&gd||g>a?"auto":"visible"});this.o.autoPosition&&this.setPosition()},setPosition:function(){var a,b;a=h[0]/2-this.d.container.outerHeight(!0)/2;b=h[1]/2-this.d.container.outerWidth(!0)/2;var f="fixed"!==this.d.container.css("position")?k.scrollTop():0;this.o.position&&"[object Array]"===Object.prototype.toString.call(this.o.position)?(a=f+(this.o.position[0]||a),b=this.o.position[1]|| +b):a=f+a;this.d.container.css({left:b,top:a})},watchTab:function(a){if(0
')) + .appendTo(document.body) + .addClass('ui-widget ' + + 'ui-corner-top ' + + 'ui-chatbox' + ) + .attr('outline', 0) + .focusin(function() { + // ui-state-highlight is not really helpful here + //self.uiChatbox.removeClass('ui-state-highlight'); + self.uiChatboxTitlebar.addClass('ui-state-focus'); + }) + .focusout(function() { + self.uiChatboxTitlebar.removeClass('ui-state-focus'); + }), + // titlebar + uiChatboxTitlebar = (self.uiChatboxTitlebar = $('
')) + .addClass('ui-widget-header ' + + 'ui-corner-top ' + + 'ui-chatbox-titlebar ' + + 'ui-dialog-header' // take advantage of dialog header style + ) + .click(function(event) { + self.toggleContent(event); + }) + .appendTo(uiChatbox), + uiChatboxTitle = (self.uiChatboxTitle = $('')) + .html(title) + .appendTo(uiChatboxTitlebar), + uiChatboxTitlebarClose = (self.uiChatboxTitlebarClose = $('')) + .addClass('ui-corner-all ' + + 'ui-chatbox-icon ' + ) + .attr('role', 'button') + .hover(function() { uiChatboxTitlebarClose.addClass('ui-state-hover'); }, + function() { uiChatboxTitlebarClose.removeClass('ui-state-hover'); }) + .click(function(event) { + uiChatbox.hide(); + self.options.boxClosed(self.options.id); + return false; + }) + .appendTo(uiChatboxTitlebar), + uiChatboxTitlebarCloseText = $('') + .addClass('ui-icon ' + + 'ui-icon-closethick') + .text('close') + .appendTo(uiChatboxTitlebarClose), + uiChatboxTitlebarMinimize = (self.uiChatboxTitlebarMinimize = $('')) + .addClass('ui-corner-all ' + + 'ui-chatbox-icon' + ) + .attr('role', 'button') + .hover(function() { uiChatboxTitlebarMinimize.addClass('ui-state-hover'); }, + function() { uiChatboxTitlebarMinimize.removeClass('ui-state-hover'); }) + .click(function(event) { + self.toggleContent(event); + return false; + }) + .appendTo(uiChatboxTitlebar), + uiChatboxTitlebarMinimizeText = $('') + .addClass('ui-icon ' + + 'ui-icon-minusthick') + .text('minimize') + .appendTo(uiChatboxTitlebarMinimize), + // content + uiChatboxContent = (self.uiChatboxContent = $('
')) + .addClass('ui-widget-content ' + + 'ui-chatbox-content ' + ) + .appendTo(uiChatbox), + uiChatboxLog = (self.uiChatboxLog = self.element) + .addClass('ui-widget-content ' + + 'ui-chatbox-log' + ) + .appendTo(uiChatboxContent), + uiChatboxInput = (self.uiChatboxInput = $('
')) + .addClass('ui-widget-content ' + + 'ui-chatbox-input' + ) + .click(function(event) { + // anything? + }) + .appendTo(uiChatboxContent), + uiChatboxInputBox = (self.uiChatboxInputBox = $('')) + .addClass('ui-widget-content ' + + 'ui-chatbox-input-box ' + + 'ui-corner-all' + ) + .appendTo(uiChatboxInput) + .keydown(function(event) { + if (event.keyCode && event.keyCode == $.ui.keyCode.ENTER) { + msg = $.trim($(this).val()); + if (msg.length > 0) { + self.options.messageSent(self.options.id, self.options.user, msg); + } + $(this).val(''); + return false; + } + }) + .focusin(function() { + uiChatboxInputBox.addClass('ui-chatbox-input-focus'); + var box = $(this).parent().prev(); + box.scrollTop(box.get(0).scrollHeight); + }) + .focusout(function() { + uiChatboxInputBox.removeClass('ui-chatbox-input-focus'); + }); + + // disable selection + uiChatboxTitlebar.find('*').add(uiChatboxTitlebar).disableSelection(); + + // switch focus to input box when whatever clicked + uiChatboxContent.children().click(function() { + // click on any children, set focus on input box + self.uiChatboxInputBox.focus(); + }); + + self._setWidth(self.options.width); + self._position(self.options.offset); + + self.options.boxManager.init(self); + + if (!self.options.hidden) { + uiChatbox.show(); + } + }, + _setOption: function(option, value) { + if (value != null) { + switch (option) { + case "hidden": + if (value) + this.uiChatbox.hide(); + else + this.uiChatbox.show(); + break; + case "offset": + this._position(value); + break; + case "width": + this._setWidth(value); + break; + } + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + _setWidth: function(width) { + this.uiChatboxTitlebar.width(width + "px"); + this.uiChatboxLog.width(width + "px"); + this.uiChatboxInput.css("maxWidth", width + "px"); + // padding:2, boarder:2, margin:5 + this.uiChatboxInputBox.css("width", (width - 18) + "px"); + }, + _position: function(offset) { + this.uiChatbox.css("right", offset); + } + }); +}(jQuery)); diff --git a/v3/js/matrixtutor.js b/v3/js/matrixtutor.js new file mode 100644 index 000000000..9dd9f62c3 --- /dev/null +++ b/v3/js/matrixtutor.js @@ -0,0 +1,315 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// TODO: refactor to be more like composingprograms.js and use more +// of the common functionality in opt-frontend-common.js + + +// custom version of opt-frontend.js for ../matrixtutor.html + +var originFrontendJsFile = 'matrixtutor.js'; + +// Pre-reqs: +// - pytutor.js +// - jquery.ba-bbq.min.js +// - opt-frontend-common.js +// should all be imported BEFORE this file + +var problemName = null; + +var appMode = 'edit'; // 'edit', 'display', or 'display_no_frills' + +var preseededCurInstr = null; // if you passed in a 'curInstr=' in the URL, then set this var + +var myVisualizer = null; // singleton ExecutionVisualizer instance + +var VIZ_LABEL = "Run and Visualize Code"; + + +var pyInputCodeMirror; // CodeMirror object that contains the solution code +var pyTestInputCodeMirror; // CodeMirror object that contains the test code + + +$(document).ready(function() { + useCodeMirror = true; // set global defined in opt-frontend-common.js + + problemName = window.location.search; + if (!problemName) { + alert("Error! Pass in a valid problem name in the url as '?'"); + } + else { + problemName = problemName.slice(1); // strip off '?' + } + + + $("#embedLinkDiv,#gradingPane,#pyOutputPane").hide(); + + pyInputCodeMirror = CodeMirror(document.getElementById('codeInputPane'), { + mode: 'python', + lineNumbers: true, + tabSize: 4, + indentUnit: 4, + // convert tab into four spaces: + extraKeys: {Tab: function(cm) {cm.replaceSelection(" ", "end");}} + }); + pyInputCodeMirror.setSize(null, '300px'); + + pyTestInputCodeMirror = CodeMirror(document.getElementById('testInputPane'), { + mode: 'python', + lineNumbers: true, + tabSize: 4, + indentUnit: 4, + // convert tab into four spaces: + extraKeys: {Tab: function(cm) {cm.replaceSelection(" ", "end");}} + }); + pyTestInputCodeMirror.setSize(null, '100px'); + + + // be friendly to the browser's forward and back buttons + // thanks to http://benalman.com/projects/jquery-bbq-plugin/ + $(window).bind("hashchange", function(e) { + appMode = $.bbq.getState('mode'); // assign this to the GLOBAL appMode + + if (appMode === undefined || appMode == 'edit') { + $("#pyInputPane").show(); + $("#pyOutputPane,#gradingPane").hide(); + $("#embedLinkDiv").hide(); + + // destroy all annotation bubbles (NB: kludgy) + if (myVisualizer) { + myVisualizer.destroyAllAnnotationBubbles(); + } + } + else if (appMode == 'display') { + $("#pyInputPane").hide(); + $("#pyOutputPane,#gradingPane").show(); + $("#embedLinkDiv").show(); + + $('#executeBtn').html(VIZ_LABEL); + $('#executeBtn').attr('disabled', false); + + + // do this AFTER making #pyOutputPane visible, or else + // jsPlumb connectors won't render properly + myVisualizer.updateOutput(); + + // customize edit button click functionality AFTER rendering (NB: awkward!) + $('#pyOutputPane #editCodeLinkDiv').show(); + $('#pyOutputPane #editBtn').click(function() { + enterEditMode(); + }); + + $('#gradeStdout').val(''); // clear 'em + $('#submitGradeBtn').html('Submit for Grading'); + $('#submitGradeBtn').attr('disabled', false); + } + else if (appMode == 'display_no_frills') { + $("#pyInputPane").hide(); + $("#pyOutputPane,#gradingPane").show(); + $("#embedLinkDiv").show(); + } + else { + assert(false); + } + + $('#urlOutput,#embedCodeOutput').val(''); // clear to avoid stale values + }); + + + function executeCode(inputCod, testCod) { + backend_script = python3_backend_script; + + var allCod = inputCod + '\n\n# test code (ungraded)\n' + testCod; + + var nCodeLines = inputCod.split('\n').length + 2; + + $('#executeBtn').html("Please wait ... processing your code"); + $('#executeBtn').attr('disabled', true); + $("#pyOutputPane,#gradingPane").hide(); + $("#embedLinkDiv").hide(); + + var backendOptionsObj = {cumulative_mode: false, + heap_primitives: false, + show_only_outputs: false, + py_crazy_mode: false, + origin: originFrontendJsFile}; + + var frontendOptionsObj = {updateOutputCallback: function() {$('#urlOutput,#embedCodeOutput').val('');}, + compactFuncLabels: true, + jumpToEnd: true, + } + + function f1(errorLineNo) { + pyInputCodeMirror.removeLineClass(errorLineNo, null, 'errorLine'); // reset line back to normal + pyInputCodeMirror.off('change', f1); + } + function f2(errorLineNo) { + pyTestInputCodeMirror.removeLineClass(errorLineNo, null, 'errorLine'); // reset line back to normal + pyTestInputCodeMirror.off('change', f2); + } + + function handleUncaughtExceptionFunc(trace) { + if (trace.length == 1) { + var errorLineNo = trace[0].line - 1; /* CodeMirror lines are zero-indexed */ + if (errorLineNo !== undefined) { + if (errorLineNo < nCodeLines) { + // highlight the faulting line in pyInputCodeMirror + pyInputCodeMirror.focus(); + pyInputCodeMirror.setCursor(errorLineNo, 0); + pyInputCodeMirror.addLineClass(errorLineNo, null, 'errorLine'); + pyInputCodeMirror.on('change', f1.bind(errorLineNo)); + } + else { + // instead highlight the faulting line in pyTestInputCodeMirror + errorLineNo -= nCodeLines; + + pyTestInputCodeMirror.focus(); + pyTestInputCodeMirror.setCursor(errorLineNo, 0); + pyTestInputCodeMirror.addLineClass(errorLineNo, null, 'errorLine'); + pyTestInputCodeMirror.on('change', f2.bind(errorLineNo)); + } + } + + $('#executeBtn').html(VIZ_LABEL); + $('#executeBtn').attr('disabled', false); + } + } + + executeCodeAndCreateViz(allCod, + backend_script, backendOptionsObj, + frontendOptionsObj, + 'pyOutputPane', + enterDisplayMode, handleUncaughtExceptionFunc); + } + + function executeCodeFromScratch() { + var inputCod = pyInputCodeMirror.getValue(); + var testCod = pyTestInputCodeMirror.getValue(); + + // don't execute empty string: + if (($.trim(inputCod) == '') && ($.trim(testCod) == '')) { + alert('Type in some code to visualize.'); + return; + } + + executeCode(inputCod, testCod); + } + + $("#executeBtn").attr('disabled', false); + $("#executeBtn").click(executeCodeFromScratch); + + + var queryStrOptions = getQueryStringOptions(); + + appMode = queryStrOptions.appMode; // assign this to the GLOBAL appMode + if ((appMode == "display") && queryStrOptions.preseededCode /* jump to display only with pre-seeded code */) { + preseededCurInstr = queryStrOptions.preseededCurInstr; // ugly global + $("#executeBtn").trigger('click'); + } + else { + if (appMode === undefined) { + // default mode is 'edit', don't trigger a "hashchange" event + appMode = 'edit'; + } + else { + // fail-soft by killing all passed-in hashes and triggering a "hashchange" + // event, which will then go to 'edit' mode + $.bbq.removeState(); + } + } + + + // log a generic AJAX error handler + $(document).ajaxError(function() { + alert("Server error (possibly due to memory/resource overload). " + + "Report a bug to philip@pgbovine.net\n\n" + + "(Click the 'Generate URL' button to include a unique URL in your email bug report.)"); + + $('#executeBtn').html(VIZ_LABEL); + $('#executeBtn').attr('disabled', false); + }); + + + // redraw connector arrows on window resize + $(window).resize(function() { + if (appMode == 'display') { + myVisualizer.redrawConnectors(); + } + }); + + if (problemName) { + $.get('load_matrix_problem.py', + {problem_name: problemName}, + function(dataFromBackend) { + if (dataFromBackend.status == 'error') { + alert("Error: " + problemName + " is not a valid problem name"); + } + else { + pyInputCodeMirror.setValue(dataFromBackend.code.rtrim()); + pyTestInputCodeMirror.setValue(dataFromBackend.test.rtrim()); + $(".problemDescClass").html(dataFromBackend.description); + } + }, + "json"); + + $('#submitGradeBtn').bind('click', function() { + $('#submitGradeBtn').html('Now Grading ...'); + $('#submitGradeBtn').attr('disabled', true); + + // some JSONP action! + // http://learn.jquery.com/ajax/working-with-jsonp/ + $.ajax({ + url: "http://104.237.139.253:4000/grade", + // The name of the callback parameter, as specified by the YQL service + jsonp: "callback", + // Tell jQuery we're expecting JSONP + dataType: "jsonp", + data: {submitted_code: pyInputCodeMirror.getValue(), + problem_name: problemName}, + + // Work with the response + success: function(dataFromBackend) { + if (dataFromBackend.err) { + $('#gradeStdout').val(dataFromBackend.err); + } else { + if (dataFromBackend.user_stderr) { + $('#gradeStdout').val(dataFromBackend.user_stdout + '\nErrors:\n' + dataFromBackend.user_stderr); + } else { + $('#gradeStdout').val(dataFromBackend.user_stdout); + } + + } + + $('#submitGradeBtn').html('Submit for Grading'); + $('#submitGradeBtn').attr('disabled', false); + }, + }); + }); + } +}); diff --git a/v3/js/opt-frontend-common.js b/v3/js/opt-frontend-common.js new file mode 100644 index 000000000..0a3156627 --- /dev/null +++ b/v3/js/opt-frontend-common.js @@ -0,0 +1,2147 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +// include this file BEFORE any OPT frontend file + + +// backend scripts to execute (Python 2 and 3 variants, if available) +// make two copies of ../web_exec.py and give them the following names, +// then change the first line (starting with #!) to the proper version +// of the Python interpreter (i.e., Python 2 or Python 3). +// Note that your hosting provider might have stringent rules for what +// kind of scripts are allowed to execute. For instance, my provider +// (Webfaction) seems to let scripts execute only if permissions are +// something like: +// -rwxr-xr-x 1 pgbovine pgbovine 2.5K Jul 5 22:46 web_exec_py2.py* +// (most notably, only the owner of the file should have write +// permissions) +//var python2_backend_script = 'web_exec_py2.py'; +//var python3_backend_script = 'web_exec_py3.py'; + +// uncomment below if you're running on Google App Engine using the built-in app.yaml +var python2_backend_script = 'exec'; +var python3_backend_script = 'exec'; + +// KRAZY experimental KODE!!! Use a custom hacked CPython interpreter +var python2crazy_backend_script = 'web_exec_py2-crazy.py'; +// On Google App Engine, simply run dev_appserver.py with the +// crazy custom py2crazy CPython interpreter to get 2crazy mode +//var python2crazy_backend_script = 'exec'; + +// empty dummy just to do logging on the Apache's server +var js_backend_script = 'web_exec_js.py'; +var ts_backend_script = 'web_exec_ts.py'; +var java_backend_script = 'web_exec_java.py'; +var ruby_backend_script = 'web_exec_ruby.py'; + +// this is customized to my own Linode server: +// these are the REAL endpoints, accessed via jsonp. code is in ../../v4-cokapi/ +if (window.location.protocol === 'https:') { + // my certificate for https is registered via cokapi.com, so use it for now: + var JS_JSONP_ENDPOINT = 'https://cokapi.com:8001/exec_js_jsonp'; + var TS_JSONP_ENDPOINT = 'https://cokapi.com:8001/exec_ts_jsonp'; + var JAVA_JSONP_ENDPOINT = 'https://cokapi.com:8001/exec_java_jsonp'; + var RUBY_JSONP_ENDPOINT = 'https://cokapi.com:8001/exec_ruby_jsonp'; +} else { + var JS_JSONP_ENDPOINT = 'http://104.237.139.253:3000/exec_js_jsonp'; // for deployment + var TS_JSONP_ENDPOINT = 'http://104.237.139.253:3000/exec_ts_jsonp'; // for deployment + var JAVA_JSONP_ENDPOINT = 'http://104.237.139.253:3000/exec_java_jsonp'; // for deployment + var RUBY_JSONP_ENDPOINT = 'http://104.237.139.253:3000/exec_ruby_jsonp'; // for deployment +} + + +function langToBackendScript(lang) { + var backend_script = null; + if (lang == '2') { + backend_script = python2_backend_script; + } else if (lang == '3') { + backend_script = python3_backend_script; + } else if (lang == '2crazy') { + backend_script = python2crazy_backend_script; + } else if (lang == 'js') { + backend_script = js_backend_script; + } else if (lang == 'ts') { + backend_script = ts_backend_script; + } else if (lang == 'ruby') { + backend_script = ruby_backend_script; + } else if (lang == 'java') { + backend_script = java_backend_script; + } + assert(backend_script); + return backend_script; +} + + +var domain = "http://pythontutor.com/"; // for deployment + + +var isExecutingCode = false; // nasty, nasty global + +var appMode = 'edit'; // 'edit' or 'display'. also support + // 'visualize' for backward compatibility (same as 'display') + +var pyInputCodeMirror; // CodeMirror object that contains the input code +var pyInputAceEditor; // Ace editor object that contains the input code + +var useCodeMirror = false; // true -> use CodeMirror, false -> use Ace + +// a list of previous consecutive executions with "compile"-time exceptions +var prevExecutionExceptionObjLst = []; + + +var loggingSocketIO = undefined; // socket.io instance -- OPTIONAL: not all frontends use it + +// From http://stackoverflow.com/a/8809472 +function generateUUID(){ + var d = new Date().getTime(); + var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = (d + Math.random()*16)%16 | 0; + d = Math.floor(d/16); + return (c=='x' ? r : (r&0x7|0x8)).toString(16); + }); + return uuid; +}; + +var sessionUUID = generateUUID(); // remains constant throughout one page load ("session") + + +// OMG nasty wtf?!? + +// From: http://stackoverflow.com/questions/21159301/quotaexceedederror-dom-exception-22-an-attempt-was-made-to-add-something-to-st + +// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem +// throw QuotaExceededError. We're going to detect this and just silently drop any calls to setItem +// to avoid the entire page breaking, without having to do a check at each usage of Storage. +if (typeof localStorage === 'object') { + try { + localStorage.setItem('localStorage', 1); + localStorage.removeItem('localStorage'); + } catch (e) { + Storage.prototype._setItem = Storage.prototype.setItem; + Storage.prototype.setItem = function() {}; + alert('Your web browser does not support storing settings locally. In Safari, the most common cause of this is using "Private Browsing Mode". Some settings may not save or some features may not work properly for you.'); + } +} + + +var dmp = new diff_match_patch(); +var curCode = ''; +var deltaObj = undefined; + +function initDeltaObj() { + // make sure the editor already exists + // (editor doesn't exist when you're, say, doing an iframe embed) + if (!pyInputAceEditor && !pyInputCodeMirror) { + return; + } + + // v is the version number + // 1 (version 1 was released on 2014-11-05) + // 2 (version 2 was released on 2015-09-16, added a startTime field) + deltaObj = {start: pyInputGetValue(), deltas: [], v: 2, + startTime: new Date().getTime()}; +} + +function initAceEditor(height) { + pyInputAceEditor = ace.edit('codeInputPane'); + var s = pyInputAceEditor.getSession(); + // tab -> 4 spaces + s.setTabSize(4); + s.setUseSoftTabs(true); + // disable extraneous indicators: + s.setFoldStyle('manual'); // no code folding indicators + pyInputAceEditor.setHighlightActiveLine(false); + pyInputAceEditor.setShowPrintMargin(false); + pyInputAceEditor.setBehavioursEnabled(false); + + // auto-grow height as fit + pyInputAceEditor.setOptions({minLines: 18, maxLines: 1000}); + + $('#codeInputPane').css('width', '700px'); + $('#codeInputPane').css('height', height + 'px'); // VERY IMPORTANT so that it works on I.E., ugh! + + initDeltaObj(); + pyInputAceEditor.on('change', function(e) { + $.doTimeout('pyInputAceEditorChange', 1000, snapshotCodeDiff); // debounce + clearFrontendError(); + s.clearAnnotations(); + }); + + // don't do real-time syntax checks: + // https://github.com/ajaxorg/ace/wiki/Syntax-validation + s.setOption("useWorker", false); + + setAceMode(); + + pyInputAceEditor.focus(); +} + +var JAVA_BLANK_TEMPLATE = 'public class YourClassNameHere {\n\ + public static void main(String[] args) {\n\ +\n\ + }\n\ +}' + +function setAceMode() { + var selectorVal = $('#pythonVersionSelector').val(); + var mod; + var tabSize = 2; + if (selectorVal === 'java') { + mod = 'java'; + // if blank empty, then initialize to a Java skeleton: + if ($.trim(pyInputGetValue()) === '') { + pyInputSetValue(JAVA_BLANK_TEMPLATE); + } + } else if (selectorVal === 'js') { + mod = 'javascript'; + // if it's just a Java skeleton, then reset to blank: + if (pyInputGetValue() === JAVA_BLANK_TEMPLATE) { + pyInputSetValue(''); + } + } else if (selectorVal === 'ts') { + mod = 'typescript'; + // if it's just a Java skeleton, then reset to blank: + if (pyInputGetValue() === JAVA_BLANK_TEMPLATE) { + pyInputSetValue(''); + } + } else if (selectorVal === 'ruby') { + mod = 'ruby'; + // if it's just a Java skeleton, then reset to blank: + if (pyInputGetValue() === JAVA_BLANK_TEMPLATE) { + pyInputSetValue(''); + } + } else { + mod = 'python'; + tabSize = 4; // PEP8 + // if it's just a Java skeleton, then reset to blank: + if (pyInputGetValue() === JAVA_BLANK_TEMPLATE) { + pyInputSetValue(''); + } + } + assert(mod); + + var s = pyInputAceEditor.getSession(); + s.setMode("ace/mode/" + mod); + s.setTabSize(tabSize); + s.setUseSoftTabs(true); + + // clear all error displays when switching modes + var s = pyInputAceEditor.getSession(); + s.clearAnnotations(); + clearFrontendError(); +} + +function snapshotCodeDiff() { + if (!deltaObj) { + return; + } + + var newCode = pyInputGetValue(); + var timestamp = new Date().getTime(); + + //console.log('Orig:', curCode); + //console.log('New:', newCode); + if (curCode != newCode) { + var diff = dmp.diff_toDelta(dmp.diff_main(curCode, newCode)); + //var patch = dmp.patch_toText(dmp.patch_make(curCode, newCode)); + var delta = {t: timestamp, d: diff}; + deltaObj.deltas.push(delta); + + curCode = newCode; + logEvent({type: 'editCode', delta: delta}); + + if (typeof TogetherJS !== 'undefined' && TogetherJS.running) { + TogetherJS.send({type: "editCode", delta: delta}); + } + } +} + +function reconstructCode() { + var cur = ''; + + var dmp = new diff_match_patch(); + var deltas = []; + var patches = []; + + var prevTimestamp = undefined; + $.each(deltaObj.deltas, function(i, e) { + if (prevTimestamp) { + assert(e.t >= prevTimestamp); + prevTimestamp = e.t; + } + deltas.push(e.d); + patches.push(e.p); + }); + + console.log(patches); + console.log(deltas); + + //var d = dmp.diff_fromDelta('', "+x = 1") + //var p = dmp.patch_make(d) + //dmp.patch_apply(p, '') + + //x = dmp.patch_fromText("@@ -0,0 +1,5 @@\n+x = 1\n") + //dmp.patch_apply(x, '') + //x = dmp.patch_fromText("@@ -1,5 +1,12 @@\n x = 1\n+%0Ax = 2%0A\n") + //dmp.patch_apply(x, 'x = 1') +} + + +// BEGIN - shared session stuff + +// grab this as early as possible before TogetherJS munges the URL +var togetherjsInUrl = ($.bbq.getState('togetherjs') !== undefined); + +// XXX: to deploy, substitute in the online TogetherJS server URL here +var TogetherJSConfig_hubBase = "http://localhost:30035/"; // local + +// TogetherJS common configuration +var TogetherJSConfig_disableWebRTC = true; +var TogetherJSConfig_suppressJoinConfirmation = true; +var TogetherJSConfig_dontShowClicks = false; + +// stop popping up boring intro dialog box: +var TogetherJSConfig_seenIntroDialog = true; + +// suppress annoying pop-ups: +var TogetherJSConfig_suppressInvite = true; +var TogetherJSConfig_suppressJoinConfirmation = true; + +// clone clicks ONLY in certain elements to keep things simple: +var TogetherJSConfig_cloneClicks = '#pyInputPane select'; + +var TogetherJSConfig_siteName = "Online Python Tutor shared session"; +var TogetherJSConfig_toolName = "Online Python Tutor shared session"; + +// more nasty global state vars +var updateOutputSignalFromRemote = false; +var executeCodeSignalFromRemote = false; +var togetherjsSyncRequested = false; +var pendingCodeOutputScrollTop = null; + +TogetherJSConfig_ignoreForms = ['.togetherjsIgnore']; // do NOT sync these elements + + +function requestSync() { + if (TogetherJS.running) { + togetherjsSyncRequested = true; + TogetherJS.send({type: "requestSync"}); + } +} + +function syncAppState(appState) { + setToggleOptions(appState); + + // VERY VERY subtle -- temporarily prevent TogetherJS from sending + // form update events while we set the input value. otherwise + // this will send an incorrect delta to the other end and screw things + // up because the initial states of the two forms aren't equal. + var orig = TogetherJS.config.get('ignoreForms'); + TogetherJS.config('ignoreForms', true); + pyInputSetValue(appState.code); + TogetherJS.config('ignoreForms', orig); + + if (appState.rawInputLst) { + rawInputLst = $.parseJSON(appState.rawInputLstJSON); + } + else { + rawInputLst = []; + } +} + + +// get OPT ready for integration with TogetherJS +function initTogetherJS() { + if (togetherjsInUrl) { + $("#ssDiv").hide(); // hide ASAP! + $("#togetherjsStatus").html("Please wait ... loading shared session"); + } + + + // clear your name from the cache every time to prevent privacy leaks + if (supports_html5_storage()) { + localStorage.removeItem('togetherjs.settings.name'); + } + + + // This event triggers when you first join a session and say 'hello', + // and then one of your peers says hello back to you. If they have the + // exact same name as you, then change your own name to avoid ambiguity. + // Remember, they were here first (that's why they're saying 'hello-back'), + // so they keep their own name, but you need to change yours :) + TogetherJS.hub.on("togetherjs.hello-back", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + var p = TogetherJS.require("peers"); + + var peerNames = p.getAllPeers().map(function(e) {return e.name}); + + if (msg.name == p.Self.name) { + var newName = undefined; + var toks = msg.name.split(' '); + var count = Number(toks[1]); + + // make sure the name is truly unique, incrementing count as necessary + do { + if (!isNaN(count)) { + newName = toks[0] + ' ' + String(count + 1); // e.g., "Tutor 3" + count++; + } + else { + // the original name was something like "Tutor", so make + // newName into, say, "Tutor 2" + newName = p.Self.name + ' 2'; + count = 2; + } + } while ($.inArray(newName, peerNames) >= 0); // i.e., is newName in peerNames? + + p.Self.update({name: newName}); // change our own name + } + }); + + TogetherJS.hub.on("updateOutput", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + if (isExecutingCode) { + return; + } + + if (myVisualizer) { + // to prevent this call to updateOutput from firing its own TogetherJS event + updateOutputSignalFromRemote = true; + try { + myVisualizer.renderStep(msg.step); + } + finally { + updateOutputSignalFromRemote = false; + } + } + }); + + TogetherJS.hub.on("executeCode", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + if (isExecutingCode) { + return; + } + + executeCodeSignalFromRemote = true; + try { + executeCode(msg.forceStartingInstr, msg.rawInputLst); + } + finally { + executeCodeSignalFromRemote = false; + } + + }); + + TogetherJS.hub.on("hashchange", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + if (isExecutingCode) { + return; + } + + console.log("TogetherJS RECEIVE hashchange", msg.appMode); + if (msg.appMode != appMode) { + updateAppDisplay(msg.appMode); + + if (appMode == 'edit' && msg.codeInputScrollTop !== undefined && + pyInputGetScrollTop() != msg.codeInputScrollTop) { + // hack: give it a bit of time to settle first ... + $.doTimeout('pyInputCodeMirrorInit', 200, function() { + pyInputSetScrollTop(msg.codeInputScrollTop); + }); + } + } + }); + + TogetherJS.hub.on("codemirror-edit", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + $("#codeInputWarnings").hide(); + $("#someoneIsTypingDiv").show(); + + $.doTimeout('codeMirrorWarningTimeout', 1000, function() { // debounce + $("#codeInputWarnings").show(); + $("#someoneIsTypingDiv").hide(); + }); + }); + + TogetherJS.hub.on("requestSync", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + if (TogetherJS.running) { + TogetherJS.send({type: "myAppState", + myAppState: getAppState(), + codeInputScrollTop: pyInputGetScrollTop(), + pyCodeOutputDivScrollTop: myVisualizer ? + myVisualizer.domRoot.find('#pyCodeOutputDiv').scrollTop() : + undefined}); + } + }); + + TogetherJS.hub.on("myAppState", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + // if we didn't explicitly request a sync, then don't do anything + if (!togetherjsSyncRequested) { + return; + } + + togetherjsSyncRequested = false; + + var learnerAppState = msg.myAppState; + + if (learnerAppState.mode == 'display') { + if (appStateEq(getAppState(), learnerAppState)) { + // update curInstr only + console.log("on:myAppState - app states equal, renderStep", learnerAppState.curInstr); + myVisualizer.renderStep(learnerAppState.curInstr); + + if (msg.pyCodeOutputDivScrollTop !== undefined) { + myVisualizer.domRoot.find('#pyCodeOutputDiv').scrollTop(msg.pyCodeOutputDivScrollTop); + } + } + else if (!isExecutingCode) { // if already executing from a prior signal, ignore + console.log("on:myAppState - app states unequal, executing", learnerAppState); + syncAppState(learnerAppState); + + executeCodeSignalFromRemote = true; + try { + if (msg.pyCodeOutputDivScrollTop !== undefined) { + pendingCodeOutputScrollTop = msg.pyCodeOutputDivScrollTop; // NASTY global + } + executeCode(learnerAppState.curInstr); + } + finally { + executeCodeSignalFromRemote = false; + } + } + } + else { + assert(learnerAppState.mode == 'edit'); + if (!appStateEq(getAppState(), learnerAppState)) { + console.log("on:myAppState - edit mode sync"); + syncAppState(learnerAppState); + enterEditMode(); + } + } + + if (msg.codeInputScrollTop !== undefined) { + // give pyInputCodeMirror/pyInputAceEditor a bit of time to settle with + // its new value. this is hacky; ideally we have a callback function for + // when setValue() completes. + $.doTimeout('pyInputCodeMirrorInit', 200, function() { + pyInputSetScrollTop(msg.codeInputScrollTop); + }); + } + }); + + TogetherJS.hub.on("syncAppState", function(msg) { + syncAppState(msg.myAppState); + }); + + TogetherJS.hub.on("codeInputScroll", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + if (useCodeMirror) { + pyInputSetScrollTop(msg.scrollTop); + } + else { + // don't sync for Ace since I can't get it working properly yet + } + }); + + TogetherJS.hub.on("pyCodeOutputDivScroll", function(msg) { + // do NOT use a msg.sameUrl guard since that will miss some signals + // due to our funky URLs + + if (myVisualizer) { + myVisualizer.domRoot.find('#pyCodeOutputDiv').scrollTop(msg.scrollTop); + } + }); + + $("#sharedSessionBtn").click(startSharedSession); + $("#stopTogetherJSBtn").click(TogetherJS); // toggles off + + // fired when TogetherJS is activated. might fire on page load if there's + // already an open session from a prior page load in the recent past. + TogetherJS.on("ready", function () { + console.log("TogetherJS ready"); + + $("#sharedSessionDisplayDiv").show(); + $("#adInfo").hide(); + $("#ssDiv").hide(); + $("#adHeader").hide(); + + // send this to the server for the purposes of logging, but other + // clients shouldn't do anything with this data + if (TogetherJS.running) { + TogetherJS.send({type: "initialAppState", + myAppState: getAppState(), + user_uuid: supports_html5_storage() ? localStorage.getItem('opt_uuid') : undefined, + // so that you can tell whether someone else + // shared a TogetherJS URL with you to invite you + // into this shared session: + togetherjsInUrl: togetherjsInUrl}); + } + + requestSync(); // immediately try to sync upon startup so that if + // others are already in the session, we will be + // synced up. and if nobody is here, then this is a NOP. + + TogetherjsReadyHandler(); // needs to be defined in each frontend + redrawConnectors(); // update all arrows at the end + }); + + // emitted when TogetherJS is closed. This is not emitted when the + // webpage simply closes or navigates elsewhere, ONLY when TogetherJS + // is explicitly stopped via a call to TogetherJS() + TogetherJS.on("close", function () { + console.log("TogetherJS close"); + + $("#togetherjsStatus").html(''); // clear it + $("#sharedSessionDisplayDiv").hide(); + $("#adInfo").show(); + $("#ssDiv").show(); + $("#adHeader").show(); + + TogetherjsCloseHandler(); // needs to be defined in each frontend + redrawConnectors(); // update all arrows at the end + }); +} + +function TogetherjsReadyHandler() { + alert("ERROR: need to override TogetherjsReadyHandler()"); +} + +function TogetherjsCloseHandler() { + alert("ERROR: need to override TogetherjsCloseHandler()"); +} + +function startSharedSession() { + $("#ssDiv").hide(); // hide ASAP! + $("#togetherjsStatus").html("Please wait ... loading shared session"); + TogetherJS(); +} + +function populateTogetherJsShareUrl() { + // without anything after the '#' in the hash + var cleanUrl = $.param.fragment(location.href, {}, 2 /* override */); + var urlToShare = cleanUrl + 'togetherjs=' + TogetherJS.shareId(); + $("#togetherjsStatus").html('
\ + Send the URL below to invite someone to join this shared session:\ +
\ + \ + \ + '); + $("#togetherjsURL").val(urlToShare).attr('size', urlToShare.length + 20); + $("#syncBtn").click(requestSync); + + // deployed on 2015-03-06 + $("#togetherjsStatus").append(emailNotificationHtml); + + // append post shared session survey + // + // survey for shared sessions, deployed on 2014-06-06, taken down on + // 2015-03-06 due to lack of useful responses + /* + $("#togetherjsStatus").append(postSessionSurvey); + $('.star-rating :radio').change(function() { + if (TogetherJS.running) { + TogetherJS.send({type: "surveyHowUsefulStars", + stars: Number(this.value)}); + } + }); + + $('#submitSessionSurveyBtn').click(function() { + var resp = $('#sharedSessionWhatLearned').val(); + if (TogetherJS.running && resp) { + TogetherJS.send({type: "surveyFreetextQuestion", + question: "What did you just learn?", + answer: $('#sharedSessionWhatLearned').val()}); + + $("#sharedSessionWhatLearned").val(''); + $("#sharedSessionWhatLearnedThanks").show(); + $.doTimeout('sharedSessionWhatLearnedThanksFadeOut', 1000, function() { + $("#sharedSessionWhatLearnedThanks").fadeOut(2000); + }); + } + }); + */ +} + +// END - shared session stuff + + +var myVisualizer = null; // singleton ExecutionVisualizer instance + +var rawInputLst = []; // a list of strings inputted by the user in response to raw_input or mouse_input events + + +// each frontend must implement its own executeCode function +function executeCode() { + alert("Configuration error. Need to override executeCode(). This is an empty stub."); +} + +function redrawConnectors() { + if (appMode == 'display' || appMode == 'visualize' /* deprecated */) { + if (myVisualizer) { + myVisualizer.redrawConnectors(); + } + } +} + +function setFronendError(lines) { + $("#frontendErrorOutput").html(lines.map(htmlspecialchars).join('
')); + $("#frontendErrorOutput").show(); +} + +function clearFrontendError() { + $("#frontendErrorOutput").hide(); +} + + +// From http://diveintohtml5.info/storage.html +function supports_html5_storage() { + try { + return 'localStorage' in window && window['localStorage'] !== null; + } catch (e) { + return false; + } +} + +// abstraction so that we can use either CodeMirror or Ace as our code editor +function pyInputGetValue() { + if (useCodeMirror) { + return pyInputCodeMirror.getValue(); + } + else { + return pyInputAceEditor.getValue(); + } +} + +function pyInputSetValue(dat) { + if (useCodeMirror) { + pyInputCodeMirror.setValue(dat.rtrim() /* kill trailing spaces */); + } + else { + pyInputAceEditor.setValue(dat.rtrim() /* kill trailing spaces */, + -1 /* do NOT select after setting text */); + } + + $('#urlOutput,#embedCodeOutput').val(''); + + clearFrontendError(); + + // also scroll to top to make the UI more usable on smaller monitors + $(document).scrollTop(0); +} + + +var codeMirrorScroller = '#codeInputPane .CodeMirror-scroll'; + +function pyInputGetScrollTop() { + if (useCodeMirror) { + return $(codeMirrorScroller).scrollTop(); + } + else { + return pyInputAceEditor.getSession().getScrollTop(); + } +} + +function pyInputSetScrollTop(st) { + if (useCodeMirror) { + $(codeMirrorScroller).scrollTop(st); + } + else { + pyInputAceEditor.getSession().setScrollTop(st); + } +} + + +var num414Tries = 0; // hacky global + +// run at the END so that everything else can be initialized first +function genericOptFrontendReady() { + initTogetherJS(); // initialize early + + + // be friendly to the browser's forward and back buttons + // thanks to http://benalman.com/projects/jquery-bbq-plugin/ + $(window).bind("hashchange", function(e) { + // if you've got some preseeded code, then parse the entire query + // string from scratch just like a page reload + if ($.bbq.getState('code')) { + parseQueryString(); + } + // otherwise just do an incremental update + else { + var newMode = $.bbq.getState('mode'); + //console.log('hashchange:', newMode, window.location.hash); + updateAppDisplay(newMode); + } + + if (TogetherJS.running && !isExecutingCode) { + TogetherJS.send({type: "hashchange", + appMode: appMode, + codeInputScrollTop: pyInputGetScrollTop(), + myAppState: getAppState()}); + } + }); + + + if (useCodeMirror) { + pyInputCodeMirror = CodeMirror(document.getElementById('codeInputPane'), { + mode: 'python', + lineNumbers: true, + tabSize: 4, + indentUnit: 4, + // convert tab into four spaces: + extraKeys: {Tab: function(cm) {cm.replaceSelection(" ", "end");}} + }); + + pyInputCodeMirror.setSize(null, '420px'); + } + else { + initAceEditor(420); + } + + + if (useCodeMirror) { + // for shared sessions + pyInputCodeMirror.on("change", function(cm, change) { + // only trigger when the user explicitly typed something + if (change.origin != 'setValue') { + if (TogetherJS.running) { + TogetherJS.send({type: "codemirror-edit"}); + } + } + }); + } + else { + pyInputAceEditor.getSession().on("change", function(e) { + // unfortunately, Ace doesn't detect whether a change was caused + // by a setValue call + if (TogetherJS.running) { + TogetherJS.send({type: "codemirror-edit"}); + } + }); + } + + + if (useCodeMirror) { + $(codeMirrorScroller).scroll(function(e) { + if (TogetherJS.running) { + var elt = $(this); + $.doTimeout('codeInputScroll', 100, function() { // debounce + // note that this will send a signal back and forth both ways + // (there's no easy way to prevent this), but it shouldn't keep + // bouncing back and forth indefinitely since no the second signal + // causes no additional scrolling + TogetherJS.send({type: "codeInputScroll", + scrollTop: elt.scrollTop()}); + }); + } + }); + } + else { + // don't sync for Ace since I can't get it working properly yet + /* + pyInputAceEditor.getSession().on('changeScrollTop', function() { + if (TogetherJS.running) { + $.doTimeout('codeInputScroll', 100, function() { // debounce + // note that this will send a signal back and forth both ways + // (there's no easy way to prevent this), but it shouldn't keep + // bouncing back and forth indefinitely since no the second signal + // causes no additional scrolling + TogetherJS.send({type: "codeInputScroll", + scrollTop: pyInputGetScrollTop()}); + }); + } + }); + */ + } + + + // first initialize options from HTML LocalStorage. very important + // that this code runs first so that options get overridden by query + // string options and anything else the user wants to override with. + if (supports_html5_storage()) { + var lsKeys = ['cumulative', + 'heapPrimitives', + 'py', + 'textReferences']; + // restore toggleState if available + var lsOptions = {}; + $.each(lsKeys, function(i, k) { + var v = localStorage.getItem(k); + if (v) { + lsOptions[k] = v; + } + }); + setToggleOptions(lsOptions); + + // store in localStorage whenever user explicitly changes any toggle option: + $('#cumulativeModeSelector,#heapPrimitivesSelector,#textualMemoryLabelsSelector,#pythonVersionSelector').change(function() { + var ts = getToggleState(); + $.each(ts, function(k, v) { + localStorage.setItem(k, v); + }); + }); + + // generate a unique UUID per "user" (as indicated by a single browser + // instance on a user's machine, which can be more precise than IP + // addresses due to sharing of IP addresses within, say, a school + // computer lab) + // added on 2015-01-27 for more precise user identification + if (!localStorage.getItem('opt_uuid')) { + localStorage.setItem('opt_uuid', generateUUID()); + } + } + + parseQueryString(); + + $(window).resize(redrawConnectors); + + $('#genUrlBtn').bind('click', function() { + var myArgs = getAppState(); + var urlStr = $.param.fragment(window.location.href, myArgs, 2 /* clobber all */); + urlStr = urlStr.replace(/\)/g, '%29') // replace ) with %29 so that links embed well in Markdown + $('#urlOutput').val(urlStr); + }); + + + // register a generic AJAX error handler + $(document).ajaxError(function(evt, jqxhr, settings, exception) { + // ignore errors related to togetherjs stuff: + if (settings.url.indexOf('togetherjs') > -1) { + return; // get out early + } + + // ugh other idiosyncratic stuff + if (settings.url.indexOf('name_lookup.py') > -1) { + return; // get out early + } + + if (settings.url.indexOf('syntax_err_survey.py') > -1) { + return; // get out early + } + + if (settings.url.indexOf('viz_interaction.py') > -1) { + return; // get out early + } + + /* + This jqxhr.responseText might be indicative of the URL being too + long, since the error message returned by the server is something + like this in nginx: + + +414 Request-URI Too Large + +

414 Request-URI Too Large

+
nginx
+ + + + Note that you'll probably need to customize this check for your server. */ + if (jqxhr && jqxhr.responseText.indexOf('414') >= 0) { + + // ok this is an UBER UBER hack. If this happens just once, then + // force click the "Visualize Execution" button again and re-try. + // why? what's the difference the second time around? the diffs_json + // parameter (derived from deltaObj) will be *empty* the second time + // around since it gets reset on every execution. if diffs_json is + // HUGE, then that might force the URL to be too big without your + // code necessarily being too big, so give it a second shot with an + // empty diffs_json. if it STILL fails, then display the error + // message and give up. + if (num414Tries === 0) { + num414Tries++; + $("#executeBtn").click(); + } else { + num414Tries = 0; + setFronendError(["Server error! Your code might be too long for this tool. Shorten your code and re-try."]); + } + } else { + setFronendError(["Server error! Your code might be taking too much time to run or using too much memory.", + "Report a bug to philip@pgbovine.net by clicking the 'Generate permanent link' button", + "at the bottom of this page and including a URL in your email."]); + } + + doneExecutingCode(); + }); + + clearFrontendError(); + + $("#embedLinkDiv").hide(); + $("#executeBtn").attr('disabled', false); + $("#executeBtn").click(executeCodeFromScratch); + + // for Versions 1 and 2, initialize here. But for version 3+, dynamically + // generate a survey whenever the user successfully executes a piece of code + //initializeDisplayModeSurvey(); + + // when you leave or reload the page, submit an updateHistoryJSON if you + // have one. beforeunload seems to work better than unload(), but it's + // still a bit flaky ... TODO: investigate :( + $(window).on('beforeunload', function(){ + submitUpdateHistory('beforeunload'); + return null; // so that no dialog is triggered + }); + + // just do this as well, even though it might be hella redundant + $(window).unload(function(){ + submitUpdateHistory('unload'); + return null; // so that no dialog is triggered + }); + + // periodically do submitUpdateHistory() to handle the case when + // someone is simply idle on the page without reloading it or + // re-editing code; that way, we can still get some signals rather + // than nothing. + var lastSubmittedUpdateHistoryLength = 0; + setInterval(function() { + if (myVisualizer) { + var uh = myVisualizer.updateHistory; + // don't submit identical entries repeatedly since that's redundant + if (uh.length != lastSubmittedUpdateHistoryLength) { + lastSubmittedUpdateHistoryLength = uh.length; + submitUpdateHistory('periodic'); + } + } + }, 1000 * 60); +} + + +// sets globals such as rawInputLst, code input box, and toggle options +function parseQueryString() { + var queryStrOptions = getQueryStringOptions(); + setToggleOptions(queryStrOptions); + if (queryStrOptions.preseededCode) { + pyInputSetValue(queryStrOptions.preseededCode); + } + if (queryStrOptions.rawInputLst) { + rawInputLst = queryStrOptions.rawInputLst; // global + } + else { + rawInputLst = []; + } + + if (queryStrOptions.testCasesLst) { + $("#createTestsLink").hide(); + initTestcasesPane('#testCasesPane'); + queryStrOptions.testCasesLst.forEach(function(e) { + addTestcase(e); + }); + } + + // ugh tricky -- always start in edit mode by default, and then + // switch to display mode only after the code successfully executes + appMode = 'edit'; + if ((queryStrOptions.appMode == 'display' || + queryStrOptions.appMode == 'visualize' /* 'visualize' is deprecated */) && + queryStrOptions.preseededCode /* jump to display only with pre-seeded code */) { + executeCode(queryStrOptions.preseededCurInstr); // will switch to 'display' mode + } + $.bbq.removeState(); // clean up the URL no matter what +} + +// parsing the URL query string hash +function getQueryStringOptions() { + var ril = $.bbq.getState('rawInputLstJSON'); + var testCasesLstJSON = $.bbq.getState('testCasesJSON'); + // note that any of these can be 'undefined' + return {preseededCode: $.bbq.getState('code'), + preseededCurInstr: Number($.bbq.getState('curInstr')), + verticalStack: $.bbq.getState('verticalStack'), + appMode: $.bbq.getState('mode'), + py: $.bbq.getState('py'), + cumulative: $.bbq.getState('cumulative'), + heapPrimitives: $.bbq.getState('heapPrimitives'), + textReferences: $.bbq.getState('textReferences'), + rawInputLst: ril ? $.parseJSON(ril) : undefined, + testCasesLst: testCasesLstJSON ? $.parseJSON(testCasesLstJSON) : undefined + }; +} + +function setToggleOptions(dat) { + // ugh, ugly tristate due to the possibility of each being undefined + if (dat.py !== undefined) { + $('#pythonVersionSelector').val(dat.py); + } + if (dat.cumulative !== undefined) { + $('#cumulativeModeSelector').val(dat.cumulative); + } + if (dat.heapPrimitives !== undefined) { + $('#heapPrimitivesSelector').val(dat.heapPrimitives); + } + if (dat.textReferences !== undefined) { + $('#textualMemoryLabelsSelector').val(dat.textReferences); + } +} + +// get the ENTIRE current state of the app +function getAppState() { + assert(originFrontendJsFile); // global var defined in each frontend + + var ret = {code: pyInputGetValue(), + mode: appMode, + origin: originFrontendJsFile, + cumulative: $('#cumulativeModeSelector').val(), + heapPrimitives: $('#heapPrimitivesSelector').val(), + textReferences: $('#textualMemoryLabelsSelector').val(), + py: $('#pythonVersionSelector').val(), + /* ALWAYS JSON serialize rawInputLst, even if it's empty! */ + rawInputLstJSON: JSON.stringify(rawInputLst), + curInstr: myVisualizer ? myVisualizer.curInstr : undefined}; + + // keep this really clean by avoiding undefined values + if (ret.cumulative === undefined) + delete ret.cumulative; + if (ret.heapPrimitives === undefined) + delete ret.heapPrimitives; + if (ret.textReferences === undefined) + delete ret.textReferences; + if (ret.py === undefined) + delete ret.py; + if (ret.rawInputLstJSON === undefined) + delete ret.rawInputLstJSON; + if (ret.curInstr === undefined) + delete ret.curInstr; + + // different frontends can optionally AUGMENT the app state with + // custom fields + if (typeof(appStateAugmenter) !== 'undefined') { + appStateAugmenter(ret); + } + return ret; +} + +// return whether two states match, except don't worry about curInstr +function appStateEq(s1, s2) { + assert(s1.origin == s2.origin); // sanity check! + + return (s1.code == s2.code && + s1.mode == s2.mode && + s1.cumulative == s2.cumulative && + s1.heapPrimitives == s1.heapPrimitives && + s1.textReferences == s2.textReferences && + s1.py == s2.py && + s1.rawInputLstJSON == s2.rawInputLstJSON); +} + +// strip it down to the bare minimum +function getToggleState() { + var x = getAppState(); + delete x.code; + delete x.mode; + delete x.rawInputLstJSON; + delete x.curInstr; + return x; +} + +// sets the global appMode variable if relevant and also the URL hash to +// support some amount of Web browser back button goodness +function updateAppDisplay(newAppMode) { + // idempotence is VERY important here + if (newAppMode == appMode) { + return; + } + + appMode = newAppMode; // global! + + if (appMode === undefined || appMode == 'edit' || + !myVisualizer /* subtle -- if no visualizer, default to edit mode */) { + appMode = 'edit'; // canonicalize + + $("#pyInputPane").show(); + $("#pyOutputPane").hide(); + $("#embedLinkDiv").hide(); + + $(".surveyQ").val(''); // clear all survey results when user hits forward/back + + // destroy all annotation bubbles (NB: kludgy) + if (myVisualizer) { + myVisualizer.destroyAllAnnotationBubbles(); + } + + // Potentially controversial: when you enter edit mode, DESTROY any + // existing visualizer object. note that this simplifies the app's + // conceptual model but breaks the browser's expected Forward and + // Back button flow + $("#pyOutputPane").empty(); + // right before destroying, submit the visualizer's updateHistory + submitUpdateHistory('editMode'); + myVisualizer = null; + + $(document).scrollTop(0); // scroll to top to make UX better on small monitors + + $.bbq.pushState({ mode: 'edit' }, 2 /* completely override other hash strings to keep URL clean */); + } + else if (appMode == 'display' || appMode == 'visualize' /* 'visualize' is deprecated */) { + assert(myVisualizer); + appMode = 'display'; // canonicalize + + $("#pyInputPane").hide(); + $("#pyOutputPane").show(); + $("#embedLinkDiv").show(); + + if (typeof TogetherJS === 'undefined' || !TogetherJS.running) { + $("#surveyHeader").show(); + } + + doneExecutingCode(); + + // do this AFTER making #pyOutputPane visible, or else + // jsPlumb connectors won't render properly + myVisualizer.updateOutput(); + + // customize edit button click functionality AFTER rendering (NB: awkward!) + $('#pyOutputPane #editCodeLinkDiv').show(); + $('#pyOutputPane #editBtn').click(function() { + enterEditMode(); + }); + + $(document).scrollTop(0); // scroll to top to make UX better on small monitors + + + // NASTY global :( + if (pendingCodeOutputScrollTop) { + myVisualizer.domRoot.find('#pyCodeOutputDiv').scrollTop(pendingCodeOutputScrollTop); + pendingCodeOutputScrollTop = null; + } + + $.doTimeout('pyCodeOutputDivScroll'); // cancel any prior scheduled calls + + // TODO: this might interfere with experimentalPopUpSyntaxErrorSurvey (2015-04-19) + myVisualizer.domRoot.find('#pyCodeOutputDiv').scroll(function(e) { + var elt = $(this); + // debounce + $.doTimeout('pyCodeOutputDivScroll', 100, function() { + // note that this will send a signal back and forth both ways + if (typeof TogetherJS !== 'undefined' && TogetherJS.running) { + // (there's no easy way to prevent this), but it shouldn't keep + // bouncing back and forth indefinitely since no the second signal + // causes no additional scrolling + TogetherJS.send({type: "pyCodeOutputDivScroll", + scrollTop: elt.scrollTop()}); + } + }); + }); + + $.bbq.pushState({ mode: 'display' }, 2 /* completely override other hash strings to keep URL clean */); + } + else { + assert(false); + } + + $('#urlOutput,#embedCodeOutput').val(''); // clear to avoid stale values + + // log at the end after appMode gets canonicalized + logEvent({type: 'updateAppDisplay', mode: appMode, appState: getAppState()}); +} + + +function executeCodeFromScratch() { + // don't execute empty string: + if ($.trim(pyInputGetValue()) == '') { + setFronendError(["Type in some code to visualize."]); + return; + } + + rawInputLst = []; // reset! + executeCode(); +} + +function executeCodeWithRawInput(rawInputStr, curInstr) { + rawInputLst.push(rawInputStr); + console.log('executeCodeWithRawInput', rawInputStr, curInstr, rawInputLst); + executeCode(curInstr); +} + + +function handleUncaughtExceptionFunc(trace) { + if (trace.length == 1 && trace[0].line) { + var errorLineNo = trace[0].line - 1; /* CodeMirror lines are zero-indexed */ + if (errorLineNo !== undefined && errorLineNo != NaN) { + // highlight the faulting line + if (useCodeMirror) { + pyInputCodeMirror.focus(); + pyInputCodeMirror.setCursor(errorLineNo, 0); + pyInputCodeMirror.addLineClass(errorLineNo, null, 'errorLine'); + + function f() { + pyInputCodeMirror.removeLineClass(errorLineNo, null, 'errorLine'); // reset line back to normal + pyInputCodeMirror.off('change', f); + } + pyInputCodeMirror.on('change', f); + } + else { + var s = pyInputAceEditor.getSession(); + s.setAnnotations([{row: errorLineNo, + type: 'error', + text: trace[0].exception_msg}]); + pyInputAceEditor.gotoLine(errorLineNo + 1 /* one-indexed */); + // if we have both a line and column number, then move over to + // that column. (going to the line first prevents weird + // highlighting bugs) + if (trace[0].col !== undefined) { + pyInputAceEditor.moveCursorTo(errorLineNo, trace[0].col); + } + pyInputAceEditor.focus(); + } + } + } +} + +function startExecutingCode() { + $('#executeBtn').html("Please wait ... executing (takes up to 10 seconds)"); + $('#executeBtn').attr('disabled', true); + isExecutingCode = true; // nasty global +} + +function doneExecutingCode() { + $('#executeBtn').html("Visualize Execution"); + $('#executeBtn').attr('disabled', false); + isExecutingCode = false; // nasty global +} + + +function enterDisplayMode() { + updateAppDisplay('display'); +} + +function enterEditMode() { + updateAppDisplay('edit'); +} + + +function optFinishSuccessfulExecution() { + enterDisplayMode(); // do this first! + + // 2014-05-25: implemented more detailed tracing for surveys + myVisualizer.creationTime = new Date().getTime(); + // each element will be a two-element list consisting of: + // [step number, timestamp] + // (debounce entries that are less than 1 second apart to + // compress the logs a bit when there's rapid scrubbing or scrolling) + // + // the first entry has a THIRD field: + // [step number, timestamp, total # steps] + // + // subsequent entries don't need it since it will always be the same. + // the invariant is that step number < total # steps (since it's + // zero-indexed + myVisualizer.updateHistory = []; + myVisualizer.updateHistory.push([myVisualizer.curInstr, + myVisualizer.creationTime, + myVisualizer.curTrace.length]); + //console.log(JSON.stringify(myVisualizer.updateHistory)); + + // For version 3+, dynamically generate a survey whenever the user + // successfully executes a piece of code + initializeDisplayModeSurvey(); + + if (typeof(activateSyntaxErrorSurvey) !== 'undefined' && + activateSyntaxErrorSurvey && + experimentalPopUpSyntaxErrorSurvey) { + experimentalPopUpSyntaxErrorSurvey(); + } +} + + +// TODO: cut reliance on the nasty rawInputLst global +function executeCodeAndCreateViz(codeToExec, + backendScript, backendOptionsObj, + frontendOptionsObj, + outputDiv, + handleSuccessFunc, handleUncaughtExceptionFunc) { + + function execCallback(dataFromBackend) { + var trace = dataFromBackend.trace; + + var killerException = null; + + // don't enter visualize mode if there are killer errors: + if (!trace || + (trace.length == 0) || + (trace[trace.length - 1].event == 'uncaught_exception')) { + + handleUncaughtExceptionFunc(trace); + + if (trace.length == 1) { + killerException = trace[0]; // killer! + setFronendError([trace[0].exception_msg]); + } + else if (trace[trace.length - 1].exception_msg) { + killerException = trace[trace.length - 1]; // killer! + setFronendError([trace[trace.length - 1].exception_msg]); + } + else { + setFronendError(["Unknown error. Reload the page and try again.", + "Report a bug to philip@pgbovine.net by clicking on the 'Generate URL'", + "button at the bottom and including a URL in your email."]); + } + } + else { + // fail-soft to prevent running off of the end of trace + if (frontendOptionsObj.startingInstruction >= trace.length) { + frontendOptionsObj.startingInstruction = 0; + } + + if (frontendOptionsObj.runTestCaseCallback) { + // hacky! DO NOT actually create a visualization! instead call: + frontendOptionsObj.runTestCaseCallback(trace); + } else if (frontendOptionsObj.holisticMode) { + // do NOT override, or else bad things will happen with + // jsPlumb arrows interfering ... + delete frontendOptionsObj.visualizerIdOverride; + + myVisualizer = new HolisticVisualizer(outputDiv, dataFromBackend, frontendOptionsObj); + } else { + myVisualizer = new ExecutionVisualizer(outputDiv, dataFromBackend, frontendOptionsObj); + + myVisualizer.add_pytutor_hook("end_updateOutput", function(args) { + if (updateOutputSignalFromRemote) { + return; + } + if (typeof TogetherJS !== 'undefined' && TogetherJS.running && !isExecutingCode) { + TogetherJS.send({type: "updateOutput", step: args.myViz.curInstr}); + } + + // debounce to compress a bit ... 250ms feels "right" + $.doTimeout('updateOutputLogEvent', 250, function() { + var obj = {type: 'updateOutput', step: args.myViz.curInstr, + curline: args.myViz.curLineNumber, + prevline: args.myViz.prevLineNumber}; + // optional fields + if (args.myViz.curLineExceptionMsg) { + obj.exception = args.myViz.curLineExceptionMsg; + } + if (args.myViz.curLineIsReturn) { + obj.curLineIsReturn = true; + } + if (args.myViz.prevLineIsReturn) { + obj.prevLineIsReturn = true; + } + logEvent(obj); + }); + + // 2014-05-25: implemented more detailed tracing for surveys + if (args.myViz.creationTime) { + var curTs = new Date().getTime(); + + var uh = args.myViz.updateHistory; + assert(uh.length > 0); // should already be seeded with an initial value + var lastTs = uh[uh.length - 1][1]; + + // (debounce entries that are less than 1 second apart to + // compress the logs a bit when there's rapid scrubbing or scrolling) + if ((curTs - lastTs) < 1000) { + uh.pop(); // get rid of last entry before pushing a new entry + } + uh.push([args.myViz.curInstr, curTs]); + //console.log(JSON.stringify(uh)); + } + return [false]; // pass through to let other hooks keep handling + }); + } + // SUPER HACK -- slip in backendOptionsObj as an extra field + if (myVisualizer) { + myVisualizer.backendOptionsObj = backendOptionsObj; + } + + handleSuccessFunc(); + + // VERY SUBTLE -- reinitialize TogetherJS so that it can detect + // and sync any new elements that are now inside myVisualizer + if (typeof TogetherJS !== 'undefined' && TogetherJS.running) { + TogetherJS.reinitialize(); + } + } + + doneExecutingCode(); // rain or shine, we're done executing! + // run this at the VERY END after all the dust has settled + + // do logging at the VERY END after the dust settles ... + // and don't do it for iframe-embed.js since getAppState doesn't + // work in that case ... + if (originFrontendJsFile !== 'iframe-embed.js') { + logEvent({type: 'doneExecutingCode', + appState: getAppState(), + // enough to reconstruct the ExecutionVisualizer object + backendDataJSON: JSON.stringify(dataFromBackend), // for easier transport and compression + frontendOptionsObj: frontendOptionsObj, + backendOptionsObj: backendOptionsObj, + killerException: killerException, // if there's, say, a syntax error + }); + } + + if (killerException) { + var excObj = {killerException: killerException, myAppState: getAppState()}; + prevExecutionExceptionObjLst.push(excObj); + } else { + prevExecutionExceptionObjLst = []; // reset!!! + } + + // tricky hacky reset + num414Tries = 0; + } + + if (!backendScript) { + setFronendError(["Server configuration error: No backend script", + "Report a bug to philip@pgbovine.net by clicking on the 'Generate URL'", + "button at the bottom and including a URL in your email."]); + return; + } + + if (typeof TogetherJS !== 'undefined' && + TogetherJS.running && !executeCodeSignalFromRemote) { + TogetherJS.send({type: "executeCode", + myAppState: getAppState(), + forceStartingInstr: frontendOptionsObj.startingInstruction, + rawInputLst: rawInputLst}); + } + + snapshotCodeDiff(); // do ONE MORE snapshot before we execute, or else + // we'll miss a diff if the user hits Visualize Execution + // very shortly after finishing coding + if (deltaObj) { + deltaObj.executeTime = new Date().getTime(); + } + + // if you're in display mode, kick back into edit mode before + // executing or else the display might not refresh properly ... ugh + // krufty FIXME + enterEditMode(); + + clearFrontendError(); + startExecutingCode(); + + jsonp_endpoint = null; + + // hacky! + if (backendScript === python2_backend_script) { + frontendOptionsObj.lang = 'py2'; + } else if (backendScript === python3_backend_script) { + frontendOptionsObj.lang = 'py3'; + } else if (backendScript === js_backend_script) { + frontendOptionsObj.lang = 'js'; + jsonp_endpoint = JS_JSONP_ENDPOINT; + } else if (backendScript === ts_backend_script) { + frontendOptionsObj.lang = 'ts'; + jsonp_endpoint = TS_JSONP_ENDPOINT; + } else if (backendScript === ruby_backend_script) { + frontendOptionsObj.lang = 'ruby'; + jsonp_endpoint = RUBY_JSONP_ENDPOINT; + } else if (backendScript === java_backend_script) { + frontendOptionsObj.lang = 'java'; + frontendOptionsObj.disableHeapNesting = true; // never nest Java objects, seems like a good default + jsonp_endpoint = JAVA_JSONP_ENDPOINT; + } + + if (backendScript === js_backend_script || + backendScript === ts_backend_script || + backendScript === java_backend_script || + backendScript === ruby_backend_script) { + // hack! should just be a dummy script for logging only + $.get(backendScript, + {user_script : codeToExec, + options_json: JSON.stringify(backendOptionsObj), + user_uuid: supports_html5_storage() ? localStorage.getItem('opt_uuid') : undefined, + session_uuid: sessionUUID, + // if we don't have any deltas, then don't bother sending deltaObj: + diffs_json: deltaObj && (deltaObj.deltas.length > 0) ? JSON.stringify(deltaObj) : null}, + function(dat) {} /* don't do anything since this is a dummy call */, "text"); + + // the REAL call uses JSONP + // http://learn.jquery.com/ajax/working-with-jsonp/ + assert(jsonp_endpoint); + $.ajax({ + url: jsonp_endpoint, + // The name of the callback parameter, as specified by the YQL service + jsonp: "callback", + dataType: "jsonp", + data: {user_script : codeToExec, + options_json: JSON.stringify(backendOptionsObj)}, + success: execCallback, + }); + } else { + // Python 2 or 3 + $.get(backendScript, + {user_script : codeToExec, + raw_input_json: rawInputLst.length > 0 ? JSON.stringify(rawInputLst) : '', + options_json: JSON.stringify(backendOptionsObj), + user_uuid: supports_html5_storage() ? localStorage.getItem('opt_uuid') : undefined, + session_uuid: sessionUUID, + // if we don't have any deltas, then don't bother sending deltaObj: + diffs_json: deltaObj && (deltaObj.deltas.length > 0) ? JSON.stringify(deltaObj) : null}, + execCallback, "json"); + } + + initDeltaObj(); // clear deltaObj to start counting over again +} + + +// this feature was deployed on 2015-09-17, so check logs for +// viz_interaction.py +function submitUpdateHistory(why) { + if (myVisualizer) { + // Compress updateHistory before encoding and sending to + // the server so that it takes up less room in the URL. Have each + // entry except for the first be a delta from the FIRST entry. + var uh = myVisualizer.updateHistory; + var encodedUh = []; + encodedUh.push(uh[0]); + + var firstTs = uh[0][1]; + for (var i = 1; i < uh.length; i++) { + var e = uh[i]; + encodedUh.push([e[0], e[1] - firstTs]); + } + + // finally push a final entry with the current timestamp delta + var curTs = new Date().getTime(); + encodedUh.push([myVisualizer.curInstr, curTs - firstTs]); + + var uhJSON = JSON.stringify(uh); + var encodedUhJSON = JSON.stringify(encodedUh); + + //console.log(uhJSON); + //console.log(encodedUhJSON); + + //console.log(uhJSON.length); + //console.log(encodedUhJSON.length); + + var myArgs = {session_uuid: sessionUUID, + updateHistoryJSON: encodedUhJSON}; + if (why) { + myArgs.why = why; + } + $.get('viz_interaction.py', myArgs, function(dat) {}); + } +} + + +/* For survey questions: + +Versions of survey wording: + +v1: (deployed around 2014-04-09, revoked on 2014-06-20) + +var survey_v1 = '\n\ +

\n\ +[Optional] Please answer these questions to support our research and to help improve this tool.
\n\ +Where is your code from?
\n\ +What do you hope to learn by visualizing it?
\n\ +How did you find this web site? \n\ + \n\ +

' + +v2: (deployed on 2014-06-20, revoked on 2014-06-28) + +var survey_v2 = '\n\ +

\n\ +[Optional] Please answer these questions to support our research and to help improve this tool.
\n\ +What do you hope to learn by visualizing this code?
\n\ +Paste a website link to a course that uses Python:
\n\ +(This could be a course that you\'re taking or teaching in school, or that you\'ve taken or taught in the past.)\n\ + \n\ +

' + +v3: (deployed on 2014-06-28, revoked on 2014-07-13) [it's a simplified version of v1] +var survey_v3 = '\n\ +

\n\ +[Optional] Please answer these questions to support our research and to help improve this tool.
\n\ +Where is your code from?
\n\ +What do you hope to learn by visualizing it?
\n\ + \n\ +

' + +v4: (deployed on 2014-07-13, revoked on 2015-03-01) +[an even more simplified version of v1 just to focus on ONE important question] +var survey_v4 = '\n\ +

\n\ +[Optional] What do you hope to learn by visualizing this code?
\n\ +
\n\ + \n\ +

' + +v5: (deployed on 2015-03-01, retired on 2015-08-31) - target older population +var survey_v5 = '\n\ +

\n\ +If you are at least 60 years old and would like to help our research on how older people learn programming, please enter your email address here:\n\ +
\n\ + \n\ +

' + +v6: (deployed on 2015-08-31) - use Google Forms links +*/ +var survey_v6 = '\n\ +

\n\ +Please support our research and keep this tool free by filling out this short survey.
\n\ +If you are at least 60 years old, please also fill out this survey.

' + +var survey_html = survey_v6; + +function setSurveyHTML() { + $('#surveyPane').html(survey_html); +} + +function getSurveyObject() { + /* v1 + var code_origin_Q_val = $('#code-origin-Q').val(); + var what_learn_Q_val = $('#what-learn-Q').val(); + var how_find_Q_val = $('#how-find-Q').val(); + + var ret = null; + + if (code_origin_Q_val || what_learn_Q_val || how_find_Q_val) { + ret = { + ver: $('#Q-version').val(), + code_origin_Q: code_origin_Q_val, + what_learn_Q: what_learn_Q_val, + how_find_Q: how_find_Q_val, + } + } + */ + + /* v2 + var what_learn_Q_val = $('#what-learn-Q').val(); + var course_website_Q_val = $('#course-website-Q').val(); + + var ret = null; + + if (what_learn_Q_val || course_website_Q_val) { + ret = { + ver: $('#Q-version').val(), + what_learn_Q: what_learn_Q_val, + course_website_Q: course_website_Q_val, + } + } + */ + + /* v3 + var code_origin_Q_val = $('#code-origin-Q').val(); + var what_learn_Q_val = $('#what-learn-Q').val(); + + var ret = null; + + if (code_origin_Q_val || what_learn_Q_val) { + ret = { + ver: $('#Q-version').val(), + code_origin_Q: code_origin_Q_val, + what_learn_Q: what_learn_Q_val, + } + } + */ + + /* v4 */ + /* + var ret = { + ver: $('#Q-version').val(), + } + + var what_learn_Q_val = $('#what-learn-Q').val(); + if ($.trim(what_learn_Q_val)) { + ret.what_learn_Q = what_learn_Q_val; + ret.testing_group = 'c'; // special group for users who have filled out this + // execution-time survey + } else { + // assign to 'a' or 'b' group for A/B testing: + var grp = 'ERROR'; // default error sentinel + + // if we have localStorage, then get/set a testing_group field to ensure + // some consistency across different sessions from the same user. + // of course, this isn't foolproof by any means, but it's a start + if (supports_html5_storage()) { + var saved_grp = localStorage.getItem('testing_group'); + if (saved_grp) { + grp = saved_grp; + } else { + grp = (Math.random() < 0.5) ? 'a' : 'b'; + localStorage.setItem('testing_group', grp); + } + } else { + grp = (Math.random() < 0.5) ? 'a' : 'b'; + } + + ret.testing_group = grp; + } + */ + + /* v5 + var ret = { + ver: $('#Q-version').val(), + } + + var email_Q_val = $('#email-addr-Q').val(); + if ($.trim(email_Q_val)) { + ret.email_Q_val = email_Q_val; + } + + return ret; + */ + + return null; +} + + +// survey for shared sessions, deployed on 2014-06-06, taken down on +// 2015-03-06 due to lack of useful responses +var postSessionSurvey = '\n\ +
\n\ +Support our research by giving anonymous feedback before ending your session.
\n\ +How useful was this particular session? (click star to rate)\n\ +\n\ + \n\ + \n\ + \n\ + \n\ + \n\ +\n\ +
\ +What did you just learn? \n\ +\n\ +\n\ +
' + +// deployed on 2015-03-06 +var emailNotificationHtml = '
If you enjoyed using this shared sessions feature, please take a minute to fill out a three-question survey to help our research. Thank you!
' + +// display-mode survey, which is shown when the user is in 'display' mode +// As of Version 3, this runs every time code is executed, so make sure event +// handlers don't unnecessarily stack up +function initializeDisplayModeSurvey() { + /* Version 1 - started experiment on 2014-04-09, put on hold on 2014-05-02 + +Hard-coded HTML in surveyHeader: + + + +[when any button is clicked a pop-up modal prompt tells the user to type +in some details elaborating on what they just clicked] + + $('.surveyBtn').click(function(e) { + // wow, massive copy-and-paste action from above! + var myArgs = getAppState(); + + var buttonPrompt = $(this).html(); + var res = prompt('"' + buttonPrompt + '"' + '\nPlease elaborate if you can and hit OK to submit:'); + // don't do ajax call when Cancel button is pressed + // (note that if OK button is pressed with no response, then an + // empty string will still be sent to the server + if (res !== null) { + myArgs.surveyQuestion = buttonPrompt; + myArgs.surveyResponse = res; + $.get('survey.py', myArgs, function(dat) {}); + } + }); + + */ + + /* Version 2 - greatly simplified and deployed on 2014-05-24, revoked on 2014-07-13 + +Hard-coded HTML in surveyHeader: + + + +[when the user clicks the "Submit" button, send results to survey.py and +display a brief "Thanks!" note] + + $('#iJustLearnedSubmission').click(function(e) { + var resp = $("#iJustLearnedInput").val(); + + if (!$.trim(resp)) { + return; + } + + // wow, massive copy-and-paste action from above! + var myArgs = getAppState(); + + // myArgs.surveyQuestion = "I just learned that ..."; // retired on 2014-06-04 + myArgs.surveyQuestion = "What did you just learn?"; + myArgs.surveyResponse = resp; + myArgs.surveyVersion = 'v2'; + + // 2014-05-25: implemented more detailed tracing for surveys + if (myVisualizer) { + myArgs.updateHistoryJSON = JSON.stringify(myVisualizer.updateHistory); + } + + $.get('survey.py', myArgs, function(dat) {}); + + $("#iJustLearnedInput").val(''); + $("#iJustLearnedThanks").show(); + $.doTimeout('iJustLearnedThanksFadeOut', 1200, function() { + $("#iJustLearnedThanks").fadeOut(1000); + }); + }); + + */ + + /* Version 3 - deployed on 2014-07-13, revoked on 2015-03-01 (revoked + along with v4 of the "Visualize Execution" survey) + + Display one of 3 display-mode surveys, depending on the contents of + myVisualizer.backendOptionsObj.survey.testing_group + + 'a' / 'b' -- A/B testing of two kinds of surveys + + 'c' -- if the user has filled in an answer to 'What do you hope to + learn by visualizing this code?' when hitting "Visualize Execution", + then echo that phrase back to them and display a custom survey + + if (!myVisualizer || !myVisualizer.backendOptionsObj.survey) { + return; + } + + var surveyObj = myVisualizer.backendOptionsObj.survey; + + var display_mode_survey_v3a = '\n\ +
\n\ + Support our research by clicking a button whenever you learn something.
\n\ +
\n\ +
\n\ + \n\ + \n\ + \n\ +
\n\ +
\n'; + + var display_mode_survey_v3b = '\n\ +
\n\ + Support our research and help future learners by describing what you are learning.\n\ +
\n\ +
\n\ + What did you just learn?\n\ + \n\ + \n\ + \n\ +
'; + + var display_mode_survey_v3c = '\n\ +
\n\ + Support our research by clicking a button whenever you learn something.
\n\ +
\n\ +
\n\ + You hoped to learn:\n\ + ""
\n\ + \n\ + \n\ +
\n\ +
\n'; + + var testingGroup = surveyObj.testing_group; + + var display_mode_survey_HTML = ''; + if (testingGroup == 'a') { + display_mode_survey_HTML = display_mode_survey_v3a; + } else if (testingGroup == 'b') { + display_mode_survey_HTML = display_mode_survey_v3b; + } else if (testingGroup == 'c') { + display_mode_survey_HTML = display_mode_survey_v3c; + } else { + assert(false); + } + + $("#surveyHeader").html(display_mode_survey_HTML); + + $("#vizSurveyLabel").css('font-size', '8pt') + .css('color', '#666') + .css('margin-bottom', '5pt'); + $(".surveyBtn").css('margin-right', '6px'); + + if (testingGroup == 'c') { + $("#userHopeLearn").html(htmlspecialchars(surveyObj.what_learn_Q)); + } + + + // testingGroup == 'a' || testingGroup == 'c' + // use unbind first so that this function is idempotent + $('.surveyBtn').unbind().click(function(e) { + var buttonPrompt = $(this).html(); + var res = prompt('You said, "' + buttonPrompt + '"' + '\nPlease describe what you just learned:'); + + if (!$.trim(res)) { + return; + } + + var myArgs = getAppState(); + myArgs.surveyQuestion = buttonPrompt; + myArgs.surveyResponse = res; + myArgs.surveyVersion = 'v3'; + myArgs.testing_group = testingGroup; // use underscore for consistency + + myArgs.updateHistoryJSON = JSON.stringify(myVisualizer.updateHistory); + + if (surveyObj.what_learn_Q) { + myArgs.what_learn_Q = surveyObj.what_learn_Q; + } + + if (supports_html5_storage()) { + myArgs.user_uuid = localStorage.getItem('opt_uuid'); + } + + $.get('survey.py', myArgs, function(dat) {}); + + logEvent({type: 'survey', + appState: getAppState(), + surveyQuestion: myArgs.surveyQuestion, + surveyResponse: myArgs.surveyResponse, + surveyVersion: myArgs.surveyVersion, + testing_group: myArgs.testing_group, + what_learn_Q: myArgs.what_learn_Q, + }); + }); + + // testingGroup == 'b' + // use unbind first so that this function is idempotent + $('#iJustLearnedSubmission').unbind().click(function(e) { + var resp = $("#iJustLearnedInput").val(); + + if (!$.trim(resp)) { + return; + } + + var myArgs = getAppState(); + myArgs.surveyQuestion = "What did you just learn?"; + myArgs.surveyResponse = resp; + myArgs.surveyVersion = 'v3'; + myArgs.testing_group = testingGroup; // use underscore for consistency + + myArgs.updateHistoryJSON = JSON.stringify(myVisualizer.updateHistory); + + if (supports_html5_storage()) { + myArgs.user_uuid = localStorage.getItem('opt_uuid'); + } + + $.get('survey.py', myArgs, function(dat) {}); + + + $("#iJustLearnedInput").val(''); + $("#iJustLearnedThanks").show(); + $.doTimeout('iJustLearnedThanksFadeOut', 1200, function() { + $("#iJustLearnedThanks").fadeOut(1000); + }); + + logEvent({type: 'survey', + appState: getAppState(), + surveyQuestion: myArgs.surveyQuestion, + surveyResponse: myArgs.surveyResponse, + surveyVersion: myArgs.surveyVersion, + testing_group: myArgs.testing_group, + }); + }); + */ +} + + +// using socket.io: +function logEvent(obj) { + //console.log(obj); + if (loggingSocketIO) { + if (supports_html5_storage()) { + obj.user_uuid = localStorage.getItem('opt_uuid'); + } + // this probably won't match the server time due to time zones, etc. + obj.clientTime = new Date().getTime(); + + if (loggingSocketIO.connected) { + loggingSocketIO.emit('opt-client-event', obj); + //console.log('emitted opt-client-event:', obj); + } else { + // TODO: be careful about this getting HUGE if loggingSocketIO + // never connects properly ... + logEventQueue.push(obj); // queue this up to be logged when the client + // finishes successfully connecting to the server + + // we're not yet connected, or we've been disconnected by the + // server, so try to connect/reconnect first before emitting the event + loggingSocketIO.connect(); // will trigger the .on('connect', ...) handler + } + } +} diff --git a/v3/js/opt-frontend.js b/v3/js/opt-frontend.js new file mode 100644 index 000000000..ea7d1d0ab --- /dev/null +++ b/v3/js/opt-frontend.js @@ -0,0 +1,803 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// TODO: combine and minify with https://github.com/mishoo/UglifyJS2 +// and add version numbering using a ?-style query string to prevent +// caching snafus + + +// Pre-reqs: +// - pytutor.js +// - jquery.ba-bbq.min.js +// - jquery.ba-dotimeout.min.js // for event debouncing: http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/ +// - opt-frontend-common.js +// - js/togetherjs/togetherjs-min.js +// should all be imported BEFORE this file + + +// NASTY GLOBALS for socket.io! +var reconnectAttempts = 0; +var logEventQueue = []; // TODO: make sure this doesn't grow too large if socketio isn't enabled + + +var originFrontendJsFile = 'opt-frontend.js'; + +// for OPT live chat tutoring interface +var tutorRequested = false; +var helpQueueSize = 0; +var tutorAvailable = false; +var tutorWaitText = 'Please wait for the next available tutor.'; + +var activateSyntaxErrorSurvey = true; // true; + +function setHelpQueueSizeLabel() { + if (helpQueueSize == 1) { + $("#helpQueueText").html('There is 1 person in line.'); + } + else if (helpQueueSize == 0 || helpQueueSize > 1) { + $("#helpQueueText").html('There are ' + helpQueueSize + ' people in line.'); + } +} + +function requestTutor() { + $("#getTutorBtn,#ssDiv,#surveyHeader").hide(); // hide ASAP! + $("#togetherjsStatus").html("Please wait ... requesting a tutor"); + tutorRequested = true; + TogetherJS(); +} + +function startSharedSession() { // override default + $("#getTutorBtn,#ssDiv,#surveyHeader").hide(); // hide ASAP! + $("#adHeader").hide(); // hide ASAP! + $("#togetherjsStatus").html("Please wait ... loading shared session"); + tutorRequested = false; + TogetherJS(); +} + + +function TogetherjsReadyHandler() { + $("#getTutorBtn,#surveyHeader").hide(); + + if (tutorRequested) { + $.get(TogetherJSConfig_hubBase + 'request-help', + {url: TogetherJS.shareUrl(), id: TogetherJS.shareId()}, + null /* don't use a callback; rely on SSE */); + + $("#togetherjsStatus").html('
\ + Please wait for the next available tutor. \ +
'); + setHelpQueueSizeLabel(); // run after creating span#helpQueueText + } + else { + populateTogetherJsShareUrl(); + } +} + +function TogetherjsCloseHandler() { + if (tutorAvailable) { + $("#getTutorBtn").show(); + } + + if (appMode == "display") { + $("#surveyHeader").show(); + } +} + +function getBaseBackendOptionsObj() { + var ret = {cumulative_mode: ($('#cumulativeModeSelector').val() == 'true'), + heap_primitives: ($('#heapPrimitivesSelector').val() == 'true'), + show_only_outputs: false, + py_crazy_mode: ($('#pythonVersionSelector').val() == '2crazy'), + origin: originFrontendJsFile}; + + var surveyObj = getSurveyObject(); + if (surveyObj) { + ret.survey = surveyObj; + } + + return ret; +} + +function getBaseFrontendOptionsObj() { + var ret = {// tricky: selector 'true' and 'false' values are strings! + disableHeapNesting: ($('#heapPrimitivesSelector').val() == 'true'), + textualMemoryLabels: ($('#textualMemoryLabelsSelector').val() == 'true'), + executeCodeWithRawInputFunc: executeCodeWithRawInput, + + // always use the same visualizer ID for all + // instantiated ExecutionVisualizer objects, + // so that they can sync properly across + // multiple clients using TogetherJS. this + // shouldn't lead to problems since only ONE + // ExecutionVisualizer will be shown at a time + visualizerIdOverride: '1', + updateOutputCallback: function() {$('#urlOutput,#embedCodeOutput').val('');}, + + // undocumented experimental modes: + pyCrazyMode: ($('#pythonVersionSelector').val() == '2crazy'), + holisticMode: ($('#cumulativeModeSelector').val() == 'holistic') + }; + return ret; +} + +function executeCode(forceStartingInstr, forceRawInputLst) { + if (forceRawInputLst !== undefined) { + rawInputLst = forceRawInputLst; // UGLY global across modules, FIXME + } + + var backend_script = langToBackendScript($('#pythonVersionSelector').val()); + var backendOptionsObj = getBaseBackendOptionsObj(); + + var startingInstruction = forceStartingInstr ? forceStartingInstr : 0; + + var frontendOptionsObj = getBaseFrontendOptionsObj(); + frontendOptionsObj.startingInstruction = startingInstruction; + + executeCodeAndCreateViz(pyInputGetValue(), + backend_script, backendOptionsObj, + frontendOptionsObj, + 'pyOutputPane', + optFinishSuccessfulExecution, handleUncaughtExceptionFunc); +} + + +// domID is the ID of the element to attach to (without the leading '#' sign) +function SyntaxErrorSurveyBubble(parentViz, domID) { + this.parentViz = parentViz; + + this.domID = domID; + this.hashID = '#' + domID; + + this.my = 'left center'; + this.at = 'right center'; + + this.qtipHidden = false; // is there a qtip object present but hidden? (TODO: kinda confusing) +} + +SyntaxErrorSurveyBubble.prototype.destroyQTip = function() { + $(this.hashID).qtip('destroy'); +} + +SyntaxErrorSurveyBubble.prototype.redrawCodelineBubble = function() { + if (isOutputLineVisibleForBubbles(this.domID)) { + if (this.qtipHidden) { + $(this.hashID).qtip('show'); + } + else { + $(this.hashID).qtip('reposition'); + } + + this.qtipHidden = false; + } + else { + $(this.hashID).qtip('hide'); + this.qtipHidden = true; + } +} + +SyntaxErrorSurveyBubble.prototype.qTipContentID = function() { + return '#ui-tooltip-' + this.domID + '-content'; +} + +SyntaxErrorSurveyBubble.prototype.qTipID = function() { + return '#ui-tooltip-' + this.domID; +} + + +// created on 2015-04-18 +function experimentalPopUpSyntaxErrorSurvey() { + if (prevExecutionExceptionObjLst.length > 0) { + // work with the most recent entry + var prevExecutionExceptionObj = prevExecutionExceptionObjLst[prevExecutionExceptionObjLst.length - 1]; + var offendingLine = prevExecutionExceptionObj.killerException.line; + + if (offendingLine === undefined) { + return; // get out early! + } + + // make sure jquery.qtip has been imported + + var codelineIDs = []; + $.each(myVisualizer.domRoot.find('#pyCodeOutput .cod'), function(i, e) { + // hacky! + var domID = $(e).attr('id'); + var lineRE = new RegExp('cod' + String(offendingLine) + '$'); // $ for end-of-line match + if (lineRE.test(domID)) { + codelineIDs.push($(e).attr('id')); + } + }); + + // should find only 1 match, or else something is wonky, maybe + // because the code changed so much that the line number in question + // is no longer available + if (codelineIDs.length === 1) { + var codLineId = codelineIDs[0]; + + var bub = new SyntaxErrorSurveyBubble(myVisualizer, codLineId); + + // if pyCodeOutputDiv is narrower than the current line, then + // adjust the x position of the pop-up bubble accordingly to be + // flush with the right of pyCodeOutputDiv + var pcodWidth = myVisualizer.domRoot.find('#pyCodeOutputDiv').width(); + var codLineWidth = myVisualizer.domRoot.find('#' + codLineId).parent().width(); // get enclosing 'tr' + var adjustX = 0; // default + + // actually nix this for now to keep things simple ... + //if (pcodWidth < codLineWidth) { + // adjustX = pcodWidth - codLineWidth; // should be negative! + //} + + // destroy then create a new tip: + bub.destroyQTip(); + $(bub.hashID).qtip($.extend({}, qtipShared, { + content: ' ', // can't be empty! + id: bub.domID, + position: { + my: bub.my, + at: bub.at, + adjust: { + x: adjustX, + }, + effect: null, // disable all cutesy animations + }, + style: { + classes: 'ui-tooltip-pgbootstrap ui-tooltip-pgbootstrap-RED' + } + })); + + // need to set both max-width and width() ... + $(bub.qTipID()).css('max-width', '350px').width('350px'); + + var myUuid = supports_html5_storage() ? localStorage.getItem('opt_uuid') : ''; + + // Wording of the survey bubble: + /* + var version = 'v1'; // deployed on 2015-04-19, revoked on 2015-04-20 + var surveyBubbleHTML = '
\ +
You just fixed the following error:
\ +
\ +
\ +
\ + If you think this message wasn\'t helpful, what would have been the best error message for you here?
\ +
\ + \ + \ +
\ +
' + */ + + /* + var version = 'v2'; // deployed on 2015-04-20, revoked on 2015-09-08 + var surveyBubbleHTML = '
\ +
You just fixed the following error:
\ +
\ +
\ +
\ + If you think this message wasn\'t helpful, what would have been the best error message for you here?
\ +
\ + \ + \ + Hide all pop-ups\ +
\ +
' + */ + + var version = 'v3'; // deployed on 2015-09-08 + var surveyBubbleHTML = '
\ +
You just fixed the following error:
\ +
\ +
\ +
\ + Please help us improve error messages for future users.\ + If you think the above message wasn\'t helpful, what would have been the best message for you here?
\ +
\ + \ + \ + Hide all of these pop-ups\ +
\ +
' + + + $(bub.qTipContentID()).html(surveyBubbleHTML); + + // unbind first, then bind a new one + myVisualizer.domRoot.find('#pyCodeOutputDiv') + .unbind('scroll') + .scroll(function() { + bub.redrawCodelineBubble(); + }); + + $(bub.qTipContentID() + ' #syntaxErrSubmitBtn').click(function() { + var res = $(bub.qTipContentID() + ' #syntaxErrTxtInput').val(); + var resObj = {appState: getAppState(), + exc: prevExecutionExceptionObj, // note that prevExecutionExceptionObjLst is BLOWN AWAY by now + opt_uuid: myUuid, + reply: res, + type: 'submit', + v: version}; + + //console.log(resObj); + $.get('syntax_err_survey.py', {arg: JSON.stringify(resObj)}, function(dat) {}); + + bub.destroyQTip(); + }); + + $(bub.qTipContentID() + ' #syntaxErrCloseBtn').click(function() { + // grab the value anyways in case the learner wrote something decent ... + var res = $(bub.qTipContentID() + ' #syntaxErrTxtInput').val(); + var resObj = {appState: getAppState(), + exc: prevExecutionExceptionObj, // note that prevExecutionExceptionObjLst is BLOWN AWAY by now + opt_uuid: myUuid, + reply: res, + type: 'close', + v: version}; + + //console.log(resObj); + $.get('syntax_err_survey.py', {arg: JSON.stringify(resObj)}, function(dat) {}); + + bub.destroyQTip(); + }); + + $(bub.qTipContentID() + ' #syntaxErrHideAllLink').click(function() { + // grab the value anyways in case the learner wrote something decent ... + var res = $(bub.qTipContentID() + ' #syntaxErrTxtInput').val(); + var resObj = {appState: getAppState(), + exc: prevExecutionExceptionObj, // note that prevExecutionExceptionObjLst is BLOWN AWAY by now + opt_uuid: myUuid, + reply: res, + type: 'killall', + v: version}; + + activateSyntaxErrorSurvey = false; // global! + + //console.log(resObj); + $.get('syntax_err_survey.py', {arg: JSON.stringify(resObj)}, function(dat) {}); + + bub.destroyQTip(); + + return false; // otherwise the 'a href' will trigger a page reload, ergh! + }); + + + var bubbleAceEditor = ace.edit('syntaxErrCodeDisplay'); + // set the size and value ASAP to get alignment working well ... + bubbleAceEditor.setOptions({minLines: 1, maxLines: 5}); // keep this SMALL + bubbleAceEditor.setValue(prevExecutionExceptionObj.myAppState.code.rtrim() /* kill trailing spaces */, + -1 /* do NOT select after setting text */); + + var s = bubbleAceEditor.getSession(); + // tab -> 4 spaces + s.setTabSize(4); + s.setUseSoftTabs(true); + // disable extraneous indicators: + s.setFoldStyle('manual'); // no code folding indicators + bubbleAceEditor.setHighlightActiveLine(false); + bubbleAceEditor.setShowPrintMargin(false); + bubbleAceEditor.setBehavioursEnabled(false); + + bubbleAceEditor.setFontSize(10); + + + $('#syntaxErrCodeDisplay').css('width', '320px'); + $('#syntaxErrCodeDisplay').css('height', '90px'); // VERY IMPORTANT so that it works on I.E., ugh! + + // don't do real-time syntax checks: + // https://github.com/ajaxorg/ace/wiki/Syntax-validation + s.setOption("useWorker", false); + + var lang = prevExecutionExceptionObj.myAppState.py; + var mod = 'python'; + if (lang === 'java') { + mod = 'java'; + } else if (lang === 'js') { + mod = 'javascript'; + } else if (lang === 'ts') { + mod = 'typescript'; + } else if (lang === 'ruby') { + mod = 'ruby'; + } + s.setMode("ace/mode/" + mod); + + bubbleAceEditor.setReadOnly(true); + + s.setAnnotations([{row: offendingLine - 1 /* zero-indexed */, + type: 'error', + text: prevExecutionExceptionObj.killerException.exception_msg}]); + + // scroll down to the line where the error occurred, trying to center it + // by subtracing 3 from it (which should center it, assuming we're + // displaying 5 lines of context) + if ((offendingLine - 3) > 0) { + bubbleAceEditor.scrollToLine(offendingLine - 3); + } + + // don't forget htmlspecialchars + $("#syntaxErrMsg").html(htmlspecialchars(prevExecutionExceptionObj.killerException.exception_msg)); + + bub.redrawCodelineBubble(); // do an initial redraw to align everything + + //globalBub = bub; // for debugging + + // log an event whenever this bubble is show (i.e., an 'impression') + // NB: it might actually be hidden if it appears on a line that + // isn't initially visible to the user, but whatevers ... + var impressionObj = {appState: getAppState(), + exceptionLst: prevExecutionExceptionObjLst, + opt_uuid: myUuid, + type: 'show', + v: version}; + //console.log(impressionObj); + $.get('syntax_err_survey.py', {arg: JSON.stringify(impressionObj)}, function(dat) {}); + } + } +} + + +function initAceAndOptions() { + if ($('#pythonVersionSelector').val() === 'java') { + $("#javaOptionsPane").show(); + } else { + $("#javaOptionsPane").hide(); + } + setAceMode(); // update syntax highlighting mode +} + + +var JS_EXAMPLES = { + jsFactExLink: 'js-example-code/fact.js', + jsDatatypesExLink: 'js-example-code/data-types.js', + jsExceptionExLink: 'js-example-code/caught-exception.js', + jsClosureExLink: 'js-example-code/closure1.js', + jsShadowingExLink: 'js-example-code/var-shadowing2.js', + jsConstructorExLink: 'js-example-code/constructor.js', + jsInhExLink: 'js-example-code/inheritance.js', +}; + +var TS_EXAMPLES = { + tsHelloExLink: 'ts-example-code/hello.ts', + tsGreeterExLink: 'ts-example-code/greeter.ts', + tsGreeterGenericsExLink: 'ts-example-code/greeter-generics.ts', + tsInheritanceExLink: 'ts-example-code/inheritance.ts', +}; + +var JAVA_EXAMPLES = { + javaVarLink: 'java-example-code/Variables.java', + javaCFLink: 'java-example-code/ControlFlow.java', + javaSqrtLink: 'java-example-code/Sqrt.java', + javaExecLimitLink: 'java-example-code/ExecLimit.java', + javaStringsLink: 'java-example-code/Strings.java', + + javaPassByValLink: 'java-example-code/PassByValue.java', + javaRecurLink: 'java-example-code/Recursion.java', + javaSOLink: 'java-example-code/StackOverflow.java', + + javaRolexLink: 'java-example-code/Rolex.java', + javaPersonLink: 'java-example-code/Person.java', + javaComplexLink: 'java-example-code/Complex.java', + javaCastingLink: 'java-example-code/Casting.java', + + javaLLLink: 'java-example-code/LinkedList.java', + javaStackQueueLink: 'java-example-code/StackQueue.java', + javaPostfixLink: 'java-example-code/Postfix.java', + javaSTLink: 'java-example-code/SymbolTable.java', + + javaToStringLink: 'java-example-code/ToString.java', + javaReflectLink: 'java-example-code/Reflect.java', + javaExceptionLink: 'java-example-code/Exception.java', + javaExceptionFlowLink: 'java-example-code/ExceptionFlow.java', + javaTwoClassesLink: 'java-example-code/TwoClasses.java', + + javaForestLink: 'java-example-code/Forest.java', + javaKnapsackLink: 'java-example-code/Knapsack.java', + javaStaticInitLink: 'java-example-code/StaticInitializer.java', + javaSyntheticLink: 'java-example-code/Synthetic.java', +}; + +var PY2_EXAMPLES = { + tutorialExampleLink: "example-code/py_tutorial.txt", + strtokExampleLink: "example-code/strtok.txt", + listCompLink: "example-code/list-comp.txt", + compsLink: "example-code/comprehensions.txt", + fibonacciExampleLink: "example-code/fib.txt", + memoFibExampleLink: "example-code/memo_fib.txt", + factExampleLink: "example-code/fact.txt", + filterExampleLink: "example-code/filter.txt", + insSortExampleLink: "example-code/ins_sort.txt", + aliasExampleLink: "example-code/aliasing.txt", + happyExampleLink: "example-code/happy.txt", + newtonExampleLink: "example-code/sqrt.txt", + oopSmallExampleLink: "example-code/oop_small.txt", + mapExampleLink: "example-code/map.txt", + rawInputExampleLink: "example-code/raw_input.txt", + oop1ExampleLink: "example-code/oop_1.txt", + oop2ExampleLink: "example-code/oop_2.txt", + inheritanceExampleLink: "example-code/oop_inherit.txt", + sumExampleLink: "example-code/sum.txt", + pwGcdLink: "example-code/wentworth_gcd.txt", + pwSumListLink: "example-code/wentworth_sumList.txt", + towersOfHanoiLink: "example-code/towers_of_hanoi.txt", + pwTryFinallyLink: "example-code/wentworth_try_finally.txt", + sumCubesLink: "example-code/sum-cubes.txt", + decoratorsLink: "example-code/decorators.txt", + genPrimesLink: "example-code/gen_primes.txt", + genExprLink: "example-code/genexpr.txt", + closure1Link: "example-code/closures/closure1.txt", + closure2Link: "example-code/closures/closure2.txt", + closure3Link: "example-code/closures/closure3.txt", + closure4Link: "example-code/closures/closure4.txt", + closure5Link: "example-code/closures/closure5.txt", + lambdaParamLink: "example-code/closures/lambda-param.txt", + aliasing1Link: "example-code/aliasing/aliasing1.txt", + aliasing2Link: "example-code/aliasing/aliasing2.txt", + aliasing3Link: "example-code/aliasing/aliasing3.txt", + aliasing4Link: "example-code/aliasing/aliasing4.txt", + aliasing5Link: "example-code/aliasing/aliasing5.txt", + aliasing6Link: "example-code/aliasing/aliasing6.txt", + aliasing7Link: "example-code/aliasing/aliasing7.txt", + aliasing8Link: "example-code/aliasing/aliasing8.txt", + ll1Link: "example-code/linked-lists/ll1.txt", + ll2Link: "example-code/linked-lists/ll2.txt", + sumListLink: "example-code/sum-list.txt", + varargsLink: "example-code/varargs.txt", + forElseLink: "example-code/for-else.txt", + metaclassLink: "example-code/metaclass.txt", +} + +var PY3_EXAMPLES = { + tortureLink: "example-code/closures/student-torture.txt", + nonlocalLink: "example-code/nonlocal.txt", +} + +var RUBY_EXAMPLES = { + rubyBlocksLink: 'ruby-example-code/blocks-basic.rb', + rubyBlocksScopingLink: 'ruby-example-code/blocks-scoping-2.rb', + rubyInheritanceLink: 'ruby-example-code/class-inheritance.rb', + rubyConstantsLink: 'ruby-example-code/constants-4.rb', + rubyContainersLink: 'ruby-example-code/container-data-types.rb', + rubyGlobalsLink: 'ruby-example-code/globals.rb', + rubyLambdaScopingLink: 'ruby-example-code/lambda-scoping-2.rb', + rubyMegagreeterLink: 'ruby-example-code/megagreeter.rb', + rubyProcLink: 'ruby-example-code/proc-basic.rb', + rubyProcScopingLink: 'ruby-example-code/proc-scoping.rb', + rubySymbolsLink: 'ruby-example-code/symbols.rb', + rubyPrivateProtectedLink: 'ruby-example-code/class-private-protected.rb', + rubyInstClassVarsComplexLink: 'ruby-example-code/inst-class-vars-complex.rb', + rubyToplevelLink: 'ruby-example-code/toplevel-inst-class-vars.rb', + rubyBlocksScoping3Link: 'ruby-example-code/blocks-scoping-3.rb', + rubyProcReturnLink: 'ruby-example-code/proc-return.rb', +}; + +var chatBox = undefined; +function createChatBox() { + assert(!chatBox); + chatBox = $("#chat_div").chatbox({id: "Me", + user: {key : "value"}, + title: "Live Chat With Tutor", + width: 250, + offset: 2, // offset from right edge + messageSent: chatMsgSent, + boxClosed: chatBoxClosed, + chatboxToggled: chatBoxToggled, + }); +} + +function chatMsgSent(id, user, msg) { + $("#chat_div").chatbox("option", "boxManager").addMsg(id, msg); + logEvent({type: 'opt-client-chat', text: msg, sid: loggingSocketIO ? loggingSocketIO.id : undefined}); +} + +// only called when the user hits the X button to explicitly close the chat box +function chatBoxClosed(id) { + logEvent({type: 'opt-client-chat', text: '[closed chat box]', sid: loggingSocketIO ? loggingSocketIO.id : undefined}); +} + +// called when the user toggles the chat box open or close +function chatBoxToggled(visible) { + var msg = '[minimized chat box]'; + if (visible) { + msg = '[maximized chat box]'; + } + logEvent({type: 'opt-client-chat', text: msg, sid: loggingSocketIO ? loggingSocketIO.id : undefined}); +} + +$(document).ready(function() { + setSurveyHTML(); + + // for OPT live chat tutoring interface -- DEPRECATED FOR NOW + /* + try { + var source = new EventSource(TogetherJSConfig_hubBase + 'learner-SSE'); + source.onmessage = function(e) { + var dat = JSON.parse(e.data); + + // nasty globals + helpQueueSize = dat.helpQueueUrls; + tutorAvailable = dat.helpAvailable; + + setHelpQueueSizeLabel(); + + if (tutorAvailable && !TogetherJS.running) { + $("#getTutorBtn").fadeIn(750, redrawConnectors); + } + else { + $("#getTutorBtn").fadeOut(750, redrawConnectors); + } + }; + } + catch(err) { + // ugh, SSE doesn't seem to work in Safari + console.warn("Sad ... EventSource not supported :("); + } + + $("#getTutorBtn").click(requestTutor); + */ + + $("#hideHeaderLink").click(function() { + $("#experimentalHeader").hide(); + if (myVisualizer) { + myVisualizer.updateOutput(); // redraw arrows + } + return false; // don't reload da page + }); + + // canned examples + $(".exampleLink").click(function() { + var myId = $(this).attr('id'); + var exFile; + var lang; + if (JS_EXAMPLES[myId] !== undefined) { + exFile = JS_EXAMPLES[myId]; + lang = 'js'; + } else if (TS_EXAMPLES[myId] !== undefined) { + exFile = TS_EXAMPLES[myId]; + lang = 'ts'; + } else if (JAVA_EXAMPLES[myId] !== undefined) { + exFile = JAVA_EXAMPLES[myId]; + lang = 'java'; + } else if (RUBY_EXAMPLES[myId] !== undefined) { + exFile = RUBY_EXAMPLES[myId]; + lang = 'ruby'; + } else if (PY2_EXAMPLES[myId] !== undefined) { + exFile = PY2_EXAMPLES[myId]; + + // only switch Python mode to 2 if we're not on '2' or '3'; otherwise + // leave as-is so as not to rock the boat + if ($('#pythonVersionSelector').val() !== '2' && + $('#pythonVersionSelector').val() !== '3') { + lang = '2'; + } + } else { + exFile = PY3_EXAMPLES[myId]; + assert(exFile !== undefined); + lang = '3'; + } + + + if (lang) { + $('#pythonVersionSelector').val(lang); + } + + $.get(exFile, function(dat) { + pyInputSetValue(dat); + initAceAndOptions(); + + // very subtle! for TogetherJS to sync #pythonVersionSelector + // properly, we must manually send a sync request event: + if (TogetherJS && TogetherJS.running) { + TogetherJS.send({type: "syncAppState", + myAppState: getAppState(), + codeInputScrollTop: pyInputGetScrollTop(), + pyCodeOutputDivScrollTop: myVisualizer ? + myVisualizer.domRoot.find('#pyCodeOutputDiv').scrollTop() : + undefined}); + } + + }, 'text' /* data type - set to text or else jQuery tries to EXECUTE the JS example code! */); + return false; // prevent 'a' click from going to an actual link + }); + $('#pythonVersionSelector').change(initAceAndOptions); + + + $('#genEmbedBtn').bind('click', function() { + assert(appMode == 'display' || appMode == 'visualize' /* 'visualize' is deprecated */); + var myArgs = getAppState(); + delete myArgs.mode; + myArgs.codeDivWidth = myVisualizer.DEFAULT_EMBEDDED_CODE_DIV_WIDTH; + myArgs.codeDivHeight = myVisualizer.DEFAULT_EMBEDDED_CODE_DIV_HEIGHT; + + var embedUrlStr = $.param.fragment(domain + "iframe-embed.html", myArgs, 2 /* clobber all */); + embedUrlStr = embedUrlStr.replace(/\)/g, '%29') // replace ) with %29 so that links embed well in Markdown + var iframeStr = ''; + $('#embedCodeOutput').val(iframeStr); + }); + + genericOptFrontendReady(); // initialize at the end + + + // deployed on 2015-03-12, taken down on 2015-03-16 + //$("#surveyHeader").html('Click here to help our research by collaboratively annotating
a piece of Python code to create a tutorial for beginners.'); + //$("#surveyHeader").css('font-size', '12pt'); + + // run this AFTER genericOptFrontendReady so that opt_uuid is already + // set by now + var myUuid = supports_html5_storage() ? localStorage.getItem('opt_uuid') : ''; + // deployed on 2015-03-19, added opt_uuid param on 2015-03-20 + // taken down on 2015-05-14 + //$("#surveyHeader") + // .html('') + // .css('margin-bottom', '10px'); + + + initAceAndOptions(); // do this after genericOptFrontendReady + + // connect on-demand in logEvent(), not here + //loggingSocketIO = io('http://104.237.139.253:5000/userlog'); // PRODUCTION_PORT + //loggingSocketIO = io('http://104.237.139.253:5001/userlog'); // DEBUG_PORT + + + if (loggingSocketIO) { + loggingSocketIO.on('connect', function() { + //console.log('CONNECTED and emitting', logEventQueue.length, 'events'); + + if (logEventQueue.length > 0) { + // the reconnectAttempts field that denotes how many times you've + // attempted to reconnect (which is also how many times you've + // been kicked off by the logging server for, say, being idle). + // add this as an extra field on the FIRST event + if (reconnectAttempts > 0) { + logEventQueue[0].reconnectAttempts = reconnectAttempts; + } + + while (logEventQueue.length > 0) { + loggingSocketIO.emit('opt-client-event', logEventQueue.pop()); + } + } + assert(logEventQueue.length === 0); + + reconnectAttempts++; + }); + + loggingSocketIO.on('opt-codeopticon-observer-chat', function(msg) { + if (!chatBox) { + createChatBox(); + } else { + $("#chat_div").chatbox("option", "hidden", false); + $("#chat_div").chatbox("showContent"); + } + + $("#chat_div").chatbox("option", "boxManager").addMsg('Tutor', msg.text); + }); + } + + $("#createTestsLink").click(function() { + initTestcasesPane('#testCasesPane'); + $(this).hide(); + return false; + }); +}); diff --git a/v3/js/opt-ipy.js b/v3/js/opt-ipy.js new file mode 100644 index 000000000..57ed5c6ee --- /dev/null +++ b/v3/js/opt-ipy.js @@ -0,0 +1,134 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// Front-end for OPT + IPython shell integration + + +// Pre-reqs: pytutor.js and jquery.ba-bbq.min.js should be imported BEFORE this file + + +var myVisualizer = null; // singleton ExecutionVisualizer instance + + +$(document).ready(function() { + // redraw connector arrows on window resize + $(window).resize(function() { + myVisualizer.redrawConnectors(); + }); + + updater.start(); +}); + + +// Adapted from https://github.com/facebook/tornado/tree/master/demos/websocket + +// Copyright 2009 FriendFeed +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +var updater = { + socket: null, + start: function() { + var url = "ws://" + location.host + "/chatsocket"; + updater.socket = new WebSocket(url); + updater.socket.onmessage = function(event) { + updater.showMessage(JSON.parse(event.data)); + } + }, + + showMessage: function(message) { + if (message.type == 'wholetrace') { + payload = message.payload + + var curInstr = 0; + var jumpToEnd = true; // yes by default + + // if the user isn't currently viewing the final element of + // the trace, then restore their original position, so that + // their display doesn't suddenly jump to the end + if (myVisualizer) { + curInstr = myVisualizer.curInstr; + jumpToEnd = (curInstr == myVisualizer.curTrace.length - 1); + } + + if (jumpToEnd) { + myVisualizer = new ExecutionVisualizer('vizDiv', + payload, + {embeddedMode: true, + jumpToEnd: true}); + } + else { + myVisualizer = new ExecutionVisualizer('vizDiv', + payload, + {embeddedMode: true, + startingInstruction: curInstr}); + } + + // set keyboard bindings + // VERY IMPORTANT to clear and reset this every time or + // else the handlers might be bound multiple times + $(document).unbind('keydown'); + $(document).keydown(function(k) { + if (k.keyCode == 37) { // left arrow + if (myVisualizer.stepBack()) { + k.preventDefault(); // don't horizontally scroll the display + } + } + else if (k.keyCode == 39) { // right arrow + if (myVisualizer.stepForward()) { + k.preventDefault(); // don't horizontally scroll the display + } + } + }); + } + else if (message.type == 'difftrace') { + // TODO: implement optimization based on, say, + // https://code.google.com/p/google-diff-match-patch/ + + // for starters, simply create a new ExecutionVisualizer + // object using the patched version of the payload + } + else if (message.type == 'clear') { + myVisualizer = null; + $('#vizDiv').empty(); + $(document).unbind('keydown'); + return; + } + } +}; diff --git a/v3/js/opt-office-mix.js b/v3/js/opt-office-mix.js new file mode 100644 index 000000000..a3e5e66da --- /dev/null +++ b/v3/js/opt-office-mix.js @@ -0,0 +1,495 @@ +// TODOs: +// + +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// Pre-reqs: +// - pytutor.js +// - jquery.ba-bbq.min.js +// - jquery.ba-dotimeout.min.js // for event debouncing: http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/ +// - opt-frontend-common.js +// should all be imported BEFORE this file + + +var originFrontendJsFile = 'opt-office-mix.js'; + +// modeled after Kurt's simplelab.ts +var _labEditor = null; // for Edit mode +var _labViewer = null; // for View mode + +var _savedCurInstr = undefined; // nasty global +var _lastSavedAppState = undefined; // nasty global + + +function executeCode(forceStartingInstr, forceRawInputLst) { + if (forceRawInputLst !== undefined) { + rawInputLst = forceRawInputLst; // UGLY global across modules, FIXME + } + + var backend_script = null; + if ($('#pythonVersionSelector').val() == '2') { + backend_script = python2_backend_script; + } + else if ($('#pythonVersionSelector').val() == '3') { + backend_script = python3_backend_script; + } + else if ($('#pythonVersionSelector').val() == 'js') { + backend_script = js_backend_script; + } + else if ($('#pythonVersionSelector').val() == 'ts') { + backend_script = ts_backend_script; + } + else if ($('#pythonVersionSelector').val() == 'ruby') { + backend_script = ruby_backend_script; + } + else if ($('#pythonVersionSelector').val() == 'java') { + backend_script = java_backend_script; + } + assert(backend_script); + + var backendOptionsObj = {cumulative_mode: ($('#cumulativeModeSelector').val() == 'true'), + heap_primitives: ($('#heapPrimitivesSelector').val() == 'true'), + show_only_outputs: false, + py_crazy_mode: false, + origin: originFrontendJsFile}; + + var startingInstruction = forceStartingInstr ? forceStartingInstr : 0; + + var frontendOptionsObj = {startingInstruction: startingInstruction, + embeddedMode: true, + + // tricky: selector 'true' and 'false' values are strings! + disableHeapNesting: ($('#heapPrimitivesSelector').val() == 'true'), + textualMemoryLabels: ($('#textualMemoryLabelsSelector').val() == 'true'), + executeCodeWithRawInputFunc: executeCodeWithRawInput, + + // undocumented experimental modes: + pyCrazyMode: false, holisticMode: false + } + + executeCodeAndCreateViz(pyInputGetValue(), + backend_script, backendOptionsObj, + frontendOptionsObj, + 'pyOutputPane', + officeMixFinishSuccessfulExecution, handleUncaughtExceptionFunc); +} + + +function officeMixFinishSuccessfulExecution() { + updateAppDisplayForMix('display'); // do this first + + $("#executeBtn").attr('disabled', false); + $("#executeBtn").hide(); + + if (_savedCurInstr !== undefined) { + myVisualizer.renderStep(_savedCurInstr); + _savedCurInstr = undefined; + } + + saveCurrentConfiguration(); + // save configuration on every step action + myVisualizer.add_pytutor_hook("end_updateOutput", function(args) { + saveCurrentConfiguration(); + return [false]; // pass through to let other hooks keep handling + }); +} + + +// Adapted from Kurt's simplelab.ts +// +// Returns the lab configuration from the provided data +function getConfigurationFromData(dat) { + var appVersion = { major: 1, minor: 0 }; + var activityComponent = { + type: Labs.Components.ActivityComponentType, + name: "", // XXX: can this be blank? + values: {}, + data: dat, + secure: false + }; + var configuration = { + appVersion: appVersion, + components: [activityComponent], + name: "", // XXX: can this be blank? + timeline: null, + analytics: null + }; + + return configuration; +} + + +// a wrapper for getAppState() that caches the value of the current +// execution trace if we're in display mode +function getAppStateWithTraceCache() { + var ret = getAppState(); + + // only do caching in Mix Edit mode, *not* in View mode, since we + // don't want to invalidate the original cache entry that was populated + // in Edit mode just because we're messing around in View mode. + if (_labEditor /* in Mix Edit mode */ && + ret.mode === 'display' /* in OPT Display mode */ && + myVisualizer) { + ret.cachedTrace = myVisualizer.curTrace; + ret.cachedCod = myVisualizer.curInputCode; + ret.cachedLang = myVisualizer.params.lang; + } + return ret; +} + +function enterOPTEditCodeMode() { + updateAppDisplayForMix('edit'); + $("#executeBtn").html("Visualize Execution").show(); + $("#executeBtn").attr('disabled', false); + + // https://groups.google.com/forum/#!msg/ace-discuss/TQHqey_NkBg/q9x_tLrvsXoJ + pyInputAceEditor.resize(); // weird hack that's necessary to refresh the editor's latest text values. #weird + + setAceMode(); // for syntax coloring + + saveCurrentConfiguration(); +} + + +function updateAppDisplayForMix(newAppMode) { + // idempotence is VERY important here + if (newAppMode == appMode) { + return; + } + + appMode = newAppMode; // global! + + if (appMode === undefined || appMode == 'edit' || + !myVisualizer /* subtle -- if no visualizer, default to edit mode */) { + appMode = 'edit'; // canonicalize + + $("#pyInputPane").show(); + $("#pyOutputPane").hide(); + $("#embedLinkDiv").hide(); + + // Potentially controversial: when you enter edit mode, DESTROY any + // existing visualizer object. note that this simplifies the app's + // conceptual model but breaks the browser's expected Forward and + // Back button flow + $("#pyOutputPane").empty(); + myVisualizer = null; + + $.bbq.pushState({ mode: 'edit' }, 2 /* completely override other hash strings to keep URL clean */); + } else if (appMode == 'display' || appMode == 'visualize' /* 'visualize' is deprecated */) { + assert(myVisualizer); + appMode = 'display'; // canonicalize + + $("#pyInputPane").hide(); + $("#pyOutputPane").show(); + $("#embedLinkDiv").show(); + + doneExecutingCode(); + + // do this AFTER making #pyOutputPane visible, or else + // jsPlumb connectors won't render properly + myVisualizer.updateOutput(); + + // customize edit button click functionality AFTER rendering (NB: awkward!) + $('#pyOutputPane #editCodeLinkDiv').show(); + $('#pyOutputPane #editBtn').click(function() { + enterOPTEditCodeMode(); + }); + + $.bbq.pushState({ mode: 'display' }, 2 /* completely override other hash strings to keep URL clean */); + } else { + assert(false); + } +} + + +// note that nothing in 'configuration' is saved when in View mode, +// since that's previewing how end-users will interact with the lab +function officeMixEnterViewMode() { + if (_labEditor) { + _labEditor.done(function() { _labEditor = null; }); + } + + Labs.takeLab(function(err, labInstance) { + if (labInstance) { + _labViewer = labInstance; // global + + myVisualizer = null; // clear this before doing anything else, so + // that we don't accidentally invalidate cache + var savedAppState = _labViewer.components[0].component.data; + + // very important so that trace cache can work when loading a saved Mix: + if (_lastSavedAppState === undefined) { + _lastSavedAppState = savedAppState; + } + + setToggleOptions(savedAppState); + if (savedAppState.code) { + pyInputSetValue(savedAppState.code); + if (savedAppState.mode === 'display') { + _savedCurInstr = savedAppState.curInstr; // #crufty + mixLazyExecuteCode(); + } + } + + if (savedAppState.testCasesJSON) { + var testCasesLst = JSON.parse(savedAppState.testCasesJSON); + $("#createTestsLink").hide(); + initTestcasesPane('#testCasesPane', saveCurrentConfiguration); + testCasesLst.forEach(function(e) { + addTestcase(e, saveCurrentConfiguration); + }); + } + + if (savedAppState.mode === 'edit') { + enterOPTEditCodeMode(); + } + } + }); +} + +function officeMixEnterEditMode() { + if (_labViewer) { + _labViewer.done(function() { _labViewer = null; }); + } + + Labs.editLab(function(err, labEditor) { + if (labEditor) { + _labEditor = labEditor; // global + + // this seems to run every time editLab runs + _labEditor.getConfiguration(function(err, configuration) { + if (configuration) { + myVisualizer = null; // clear this before doing anything else, so + // that we don't accidentally invalidate cache + var savedAppState = configuration.components[0].data; + + // very important so that trace cache can work when loading a saved Mix: + if (_lastSavedAppState === undefined) { + _lastSavedAppState = savedAppState; + } + + setToggleOptions(savedAppState); + if (savedAppState.code) { + pyInputSetValue(savedAppState.code); + if (savedAppState.mode === 'display') { + _savedCurInstr = savedAppState.curInstr; // #crufty + mixLazyExecuteCode(); + } + } + + if (savedAppState.testCasesJSON) { + var testCasesLst = JSON.parse(savedAppState.testCasesJSON); + $("#createTestsLink").hide(); + initTestcasesPane('#testCasesPane', saveCurrentConfiguration); + testCasesLst.forEach(function(e) { + addTestcase(e, saveCurrentConfiguration); + }); + } + + if (savedAppState.mode === 'edit') { + enterOPTEditCodeMode(); + } + } + }); + + // set configuration on every code edit and option toggle, to + // set the 'dirty bit' on the enclosing PPT file + pyInputAceEditor.getSession().on("change", saveCurrentConfiguration); + $('select').change(saveCurrentConfiguration); + } + }); +} + +function saveCurrentConfiguration() { + if (_labEditor) { + var x = getAppStateWithTraceCache(); + // propagate cachedTrace only if x doesn't already have one + // i.e., don't clobber the new cachedTrace if it exists + if (x.cachedTrace === undefined && + _lastSavedAppState && _lastSavedAppState.cachedTrace) { + x.cachedTrace = _lastSavedAppState.cachedTrace; + x.cachedCod = _lastSavedAppState.cachedCod; // rtrim() already applied + x.cachedLang = _lastSavedAppState.cachedLang; + } + //console.log('saveCurrentConfiguration', x); + _labEditor.setConfiguration(getConfigurationFromData(x), + function() {} /* empty error handler */); + _lastSavedAppState = x; // global! + } +} + + +function mixLazyExecuteCode() { + var curState = getAppState(); + var curCod = curState.code.rtrim(); // rtrim to match cachedCod + var curLang = curState.py; + + // ugh legacy naming mismatches: + if (curLang === '2') { + curLang = 'py2'; + } else if (curLang === '3') { + curLang = 'py3'; + } + + if (_lastSavedAppState && + curCod === _lastSavedAppState.cachedCod && + curLang === _lastSavedAppState.cachedLang) { + // cache hit! + console.log('mixLazyExecuteCode CACHE HIT!'); + + // copy-pasta from excerpts of executeCodeFromScratch and friends: + + // if you're in display mode, kick back into edit mode before + // executing or else the display might not refresh properly ... ugh + // krufty FIXME + enterEditMode(); + clearFrontendError(); + + var frontendOptionsObj = {embeddedMode: true, + executeCodeWithRawInputFunc: executeCodeWithRawInput, + lang: _lastSavedAppState.cachedLang, // important! + }; + myVisualizer = new ExecutionVisualizer('pyOutputPane', + {code: _lastSavedAppState.cachedCod, + trace: _lastSavedAppState.cachedTrace}, + frontendOptionsObj); + + officeMixFinishSuccessfulExecution(); + } else { + // cache miss + executeCodeFromScratch(); // ends with officeMixFinishSuccessfulExecution or handleUncaughtExceptionFunc + } +} + + +// for opt-testcases.js +function getBaseBackendOptionsObj() { + var ret = {cumulative_mode: false, + heap_primitives: false, + show_only_outputs: false, + py_crazy_mode: false, + origin: originFrontendJsFile}; + return ret; +} + +function getBaseFrontendOptionsObj() { + ret = {embeddedMode: true}; + return ret; +} + + +$(document).ready(function() { + $('#pythonVersionSelector').change(setAceMode); + + $("#executeBtn").click(function() { + mixLazyExecuteCode(); + }); + + $("#createTestsLink").click(function() { + initTestcasesPane('#testCasesPane', saveCurrentConfiguration); + $(this).hide(); + return false; + }); + + // To run in https://labsjs.blob.core.windows.net/sdk/LabsJS-1.0.4/labshost.html + // append "?PostMessageLabHost" to the query string. + Labs.DefaultHostBuilder = function() { + if (window.location.href.indexOf("PostMessageLabHost") !== -1) { + return new Labs.PostMessageLabHost("test", parent, "*"); + } else { + return new Labs.OfficeJSLabHost(); + } + }; + + // still needed to track and trigger appMode changes + $(window).bind("hashchange", function(e) { + // if you've got some preseeded code, then parse the entire query + // string from scratch just like a page reload + if ($.bbq.getState('code')) { + parseQueryString(); + } + // otherwise just do an incremental update + else { + var newMode = $.bbq.getState('mode'); + //console.log('hashchange:', newMode, window.location.hash); + updateAppDisplay(newMode); + } + }); + + // TODO: in the future, make it flexible height but for now, just make + // it fixed-height but kinda small-ish + initAceEditor(200); + pyInputAceEditor.setOptions({minLines: 10, maxLines: 1000}); + + // no frills footer + $("#footer").css("margin-top", "0px") + .css("padding-top", "0px") + .css("border-top", "0px"); + + $(window).resize(redrawConnectors); + + // register a generic AJAX error handler + $(document).ajaxError(function(evt, jqxhr, settings, exception) { + setFronendError(["Server error! Your code might be taking too much time to run or using too much memory.", + "Report a bug to philip@pgbovine.net by clicking the 'Generate permanent link' button", + "at the bottom of this page and including a URL in your email."]); + + doneExecutingCode(); + }); + + clearFrontendError(); + + + Labs.connect(function (err, connectionResponse) { + var initialMode = Labs.Core.LabMode[connectionResponse.mode]; + + if (initialMode == 'Edit') { + officeMixEnterEditMode(); + enterOPTEditCodeMode(); // do this once initially + } else if (initialMode == 'View') { + officeMixEnterViewMode(); + } + + // initialize these callbacks only after Labs.connect is successful + Labs.on(Labs.Core.EventTypes.ModeChanged, function(data) { + if (data.mode == 'Edit') { + officeMixEnterEditMode(); + } else if (data.mode == 'View') { + officeMixEnterViewMode(); + } + }); + + Labs.on(Labs.Core.EventTypes.Activate, function() { + }); + + Labs.on(Labs.Core.EventTypes.Deactivate, function() { + }); + }); +}); diff --git a/v3/js/opt-testcases.js b/v3/js/opt-testcases.js new file mode 100644 index 000000000..f894a2d88 --- /dev/null +++ b/v3/js/opt-testcases.js @@ -0,0 +1,296 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +// Pre-reqs: +// - jquery-1.8.2.min.js +// - pytutor.js +// - opt-frontend-common.js +// - ace/src-min-noconflict/ace.js +// should all be imported BEFORE this file + + +var testcasesPaneHtml = '\ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +
TestsResults
\ +\ +Add new test\ +' + +function initTestcasesPane(parentDivId, onChangeCallback /* optional */) { + $(parentDivId).empty(); // just to be paranoid, empty this out + // (and its event handlers, too, supposedly) + $(parentDivId).html(testcasesPaneHtml); + + $("#addNewTestCase").click(function() { + addTestcase(null, onChangeCallback); + return false; // to prevent link from being followed + }); + + $("#runAllTestsButton").click(function() { + $(".runTestCase").click(); + }); +} + +function getCombinedCode(id) { + var userCod = pyInputGetValue(); + var testCod = ace.edit('testCaseEditor_' + id).getValue(); + // for reporting syntax errors separately for user and test code + var userCodNumLines = userCod.split('\n').length; + + var lang = $('#pythonVersionSelector').val(); + if (lang === 'ts' || lang === 'js' || lang === 'java') { + var bufferCod = '\n\n// Test code //\n'; + } else { + var bufferCod = '\n\n## Test code ##\n'; + } + + var bufferCodNumLines = bufferCod.split('\n').length; + + var combinedCod = userCod + bufferCod + testCod; + return {cod: combinedCod, + firstTestLine: userCodNumLines + bufferCodNumLines - 1}; +} + +function startRunningTest(id) { + $("#runAllTestsButton,.runTestCase,.vizTestCase").attr('disabled', true); + var e = ace.edit('testCaseEditor_' + id); + e.getSession().clearAnnotations(); + $('#outputTd_' + id).html(''); +} + +function doneRunningTest() { + $("#runAllTestsButton,.runTestCase,.vizTestCase").attr('disabled', false); + $(".runTestCase").html('Run'); + $(".vizTestCase").html('Visualize'); +} + +function runTestFinishSuccessfulExecution() { + doneRunningTest(); +} + +function vizTestFinishSuccessfulExecution() { + optFinishSuccessfulExecution(); + doneRunningTest(); +} + + +var curTestcaseId = 1; + +function addTestcase(initialCod /* optional code to pre-seed this test */, + onChangeCallback /* to be called if this elt changes */) { + var id = curTestcaseId; + curTestcaseId++; // nasty global + var newTr = $('').attr('id', 'testCaseRow_' + id); + $("#testCasesTable tbody").append(newTr); + var editorTd = $(''); + var runBtnTd = $(''); + var outputTd = $(''); + var visualizeTd = $(''); + var deleteTd = $(''); + + editorTd.append('
'); + runBtnTd.append(''); + outputTd.attr('id', 'outputTd_' + id); + outputTd.attr('class', 'outputTd'); + visualizeTd.append(''); + deleteTd.append('Delete test'); + + newTr.append(editorTd); + newTr.append(runBtnTd); + newTr.append(outputTd); + newTr.append(visualizeTd); + newTr.append(deleteTd); + + + // initialize testCaseEditor with Ace: + var te = ace.edit('testCaseEditor_' + id); + // set the size and value ASAP to get alignment working well ... + te.setOptions({minLines: 2, maxLines: 4}); // keep this SMALL + te.setHighlightActiveLine(false); + te.setShowPrintMargin(false); + te.setBehavioursEnabled(false); + te.setFontSize(11); + //te.setReadOnly(true); + + var s = te.getSession(); + s.setTabSize(2); + s.setUseSoftTabs(true); + // disable extraneous indicators: + s.setFoldStyle('manual'); // no code folding indicators + // don't do real-time syntax checks: + // https://github.com/ajaxorg/ace/wiki/Syntax-validation + s.setOption("useWorker", false); + + // TODO: change syntax highlighting mode if the user changes languages: + var lang = $('#pythonVersionSelector').val(); + var mod = 'python'; + var defaultVal = '\n# assert '; + if (lang === 'java') { + mod = 'java'; + defaultVal = '// sorry, Java tests not yet supported'; + } else if (lang === 'js') { + mod = 'javascript'; + defaultVal = '\n// console.assert();'; + } else if (lang === 'ts') { + mod = 'typescript'; + defaultVal = '\n// console.assert();'; + } else if (lang === 'ruby') { + mod = 'ruby'; + defaultVal = "\n# raise 'fail' unless "; + } + s.setMode("ace/mode/" + mod); + + // detect when the buffer has changed + s.on("change", function() { + if (onChangeCallback) { + onChangeCallback(); + } + }); + + te.setValue(initialCod ? initialCod.rtrim() : defaultVal, + -1 /* do NOT select after setting text */); + + function runOrVizTestCase(isViz /* true for visualize, false for run */) { + if (isViz) { + $('#vizTestCase_' + id).html("Visualizing ..."); + } else { + $('#runTestCase_' + id).html("Running ..."); + } + + startRunningTest(id); + var dat = getCombinedCode(id); + + // adapted from executeCode in opt-frontend.js + var backend_script = langToBackendScript($('#pythonVersionSelector').val()); + var backendOptionsObj = getBaseBackendOptionsObj(); + var frontendOptionsObj = getBaseFrontendOptionsObj(); + frontendOptionsObj.jumpToEnd = true; + + if (isViz) { + backendOptionsObj.viz_test_case = true; // just so we can see this in server logs + } else { + backendOptionsObj.run_test_case = true; // just so we can see this in server logs + frontendOptionsObj.runTestCaseCallback = function(trace) { + // scan through the trace to find any exception events. report + // the first one if found, otherwise assume test is 'passed' + var exceptionMsg = null; + trace.forEach(function(e) { + if (exceptionMsg) { + return; + } + + if (e.event === 'exception') { + exceptionMsg = e.exception_msg; + } + }); + + if (exceptionMsg) { + $('#outputTd_' + id).html(''); + } else { + $('#outputTd_' + id).html(''); + } + }; + } + + function runTestHandleUncaughtExceptionFunc(trace) { + if (trace.length == 1 && trace[0].line) { + var errorLineNo = trace[0].line; + // highlight the faulting line in the test case pane itself + if (errorLineNo !== undefined && + errorLineNo != NaN && + errorLineNo >= dat.firstTestLine) { + var adjustedErrorLineNo = errorLineNo - dat.firstTestLine; + s.setAnnotations([{row: adjustedErrorLineNo, + type: 'error', + text: trace[0].exception_msg}]); + te.gotoLine(adjustedErrorLineNo + 1 /* one-indexed */); + } + } + + var msg = trace[0].exception_msg; + var trimmedMsg = msg.split(':')[0]; + $('#outputTd_' + id).html(htmlspecialchars(trimmedMsg)); + + handleUncaughtExceptionFunc(trace); + doneRunningTest(); + } + + executeCodeAndCreateViz(dat.cod, + backend_script, backendOptionsObj, + frontendOptionsObj, + 'pyOutputPane', + isViz ? vizTestFinishSuccessfulExecution : + runTestFinishSuccessfulExecution, + runTestHandleUncaughtExceptionFunc); + } + + $('#runTestCase_' + id).click(runOrVizTestCase.bind(null, false)); + $('#vizTestCase_' + id).click(runOrVizTestCase.bind(null, true)); + + $('#delTestCase_' + id).click(function() { + // confirm() not supported within Office Mix labs :/ + //var res = confirm("Press OK to delete this test."); + + $('#testCaseRow_' + id).remove(); + if (onChangeCallback) { + onChangeCallback(); + } + return false; // to prevent link from being followed + }); + + if (onChangeCallback) { + onChangeCallback(); + } +} + +// returns a list of strings, each of which is a test case +function getAllTestcases() { + return $.map($("#testCasesTable .testCaseEditor"), function(e) { + var editor = ace.edit($(e).attr('id')); + return editor.getValue(); + }); +} + +// see getAppState to see where it calls out to this function: +function appStateAugmenter(appState) { + var tc = getAllTestcases(); + if (tc.length > 0) { + appState['testCasesJSON'] = JSON.stringify(tc); + } +} diff --git a/v3/js/pytutor.js b/v3/js/pytutor.js new file mode 100644 index 000000000..c52144392 --- /dev/null +++ b/v3/js/pytutor.js @@ -0,0 +1,4437 @@ +/* + +Online Python Tutor +https://github.com/pgbovine/OnlinePythonTutor/ + +Copyright (C) Philip J. Guo (philip@pgbovine.net) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +/* To import, put this at the top of your HTML page: + + + + + + + + + + + + + + + + +*/ + + +/* Coding gotchas: + +- NEVER use naked $(__) or d3.select(__) statements to select DOM elements. + + ALWAYS use myViz.domRoot or myViz.domRootD3 for jQuery and D3, respectively. + + Otherwise things will break in weird ways when you have more than one visualization + embedded within a webpage, due to multiple matches in the global namespace. + + +- always use generateID to generate unique CSS IDs, or else things will break + when multiple ExecutionVisualizer instances are displayed on a webpage + +*/ + +var SVG_ARROW_POLYGON = '0,3 12,3 12,0 18,5 12,10 12,7 0,7'; +var SVG_ARROW_HEIGHT = 10; // must match height of SVG_ARROW_POLYGON + +var curVisualizerID = 1; // global to uniquely identify each ExecutionVisualizer instance + +// domRootID is the string ID of the root element where to render this instance +// dat is data returned by the Python Tutor backend consisting of two fields: +// code - string of executed code +// trace - a full execution trace +// +// params is an object containing optional parameters, such as: +// jumpToEnd - if non-null, jump to the very end of execution +// startingInstruction - the (zero-indexed) execution point to display upon rendering +// hideOutput - hide "Program output" display +// codeDivHeight - maximum height of #pyCodeOutputDiv (in integer pixels) +// codeDivWidth - maximum width of #pyCodeOutputDiv (in integer pixels) +// editCodeBaseURL - the base URL to visit when the user clicks 'Edit code' (if null, then 'Edit code' link hidden) +// allowEditAnnotations - allow user to edit per-step annotations (default: false) +// embeddedMode - shortcut for hideOutput=true, allowEditAnnotations=false, +// codeDivWidth=this.DEFAULT_EMBEDDED_CODE_DIV_WIDTH, +// codeDivHeight=this.DEFAULT_EMBEDDED_CODE_DIV_HEIGHT +// disableHeapNesting - if true, then render all heap objects at the top level (i.e., no nested objects) +// drawParentPointers - if true, then draw environment diagram parent pointers for all frames +// WARNING: there are hard-to-debug MEMORY LEAKS associated with activating this option +// textualMemoryLabels - render references using textual memory labels rather than as jsPlumb arrows. +// this is good for slow browsers or when used with disableHeapNesting +// to prevent "arrow overload" +// showOnlyOutputs - show only program outputs and NOT internal data structures +// updateOutputCallback - function to call (with 'this' as parameter) +// whenever this.updateOutput() is called +// (BEFORE rendering the output display) +// heightChangeCallback - function to call (with 'this' as parameter) +// whenever the HEIGHT of #dataViz changes +// verticalStack - if true, then stack code display ON TOP of visualization +// (else place side-by-side) +// visualizerIdOverride - override visualizer ID instead of auto-assigning it +// (BE CAREFUL ABOUT NOT HAVING DUPLICATE IDs ON THE SAME PAGE, +// OR ELSE ARROWS AND OTHER STUFF WILL GO HAYWIRE!) +// executeCodeWithRawInputFunc - function to call when you want to re-execute the given program +// with some new user input (somewhat hacky!) +// highlightLines - highlight current and previously executed lines (default: false) +// arrowLines - draw arrows pointing to current and previously executed lines (default: true) +// compactFuncLabels - render functions with a 'func' prefix and no type label +// showAllFrameLabels - display frame and parent frame labels for all functions (default: false) +// pyCrazyMode - run with Py2crazy, which provides expression-level +// granularity instead of line-level granularity (HIGHLY EXPERIMENTAL!) +// hideCode - hide the code display and show only the data structure viz +// tabularView - render a tabular view of ALL steps at once (EXPERIMENTAL) +// lang - to render labels in a style appropriate for other languages, +// and to display the proper language in langDisplayDiv +// e.g., 'py2' for Python 2, 'py3' for Python 3, 'js' for JavaScript, 'java' for Java, 'ts' for TypeScript, 'ruby' for Ruby +// [default is Python-style labels] +// debugMode - some extra debugging printouts +function ExecutionVisualizer(domRootID, dat, params) { + this.curInputCode = dat.code.rtrim(); // kill trailing spaces + this.curTrace = dat.trace; + + this.DEFAULT_EMBEDDED_CODE_DIV_WIDTH = 350; + this.DEFAULT_EMBEDDED_CODE_DIV_HEIGHT = 400; + + // if the final entry is raw_input or mouse_input, then trim it from the trace and + // set a flag to prompt for user input when execution advances to the + // end of the trace + if (this.curTrace.length > 0) { + var lastEntry = this.curTrace[this.curTrace.length - 1]; + if (lastEntry.event == 'raw_input') { + this.promptForUserInput = true; + this.userInputPromptStr = htmlspecialchars(lastEntry.prompt); + this.curTrace.pop() // kill last entry so that it doesn't get displayed + } + else if (lastEntry.event == 'mouse_input') { + this.promptForMouseInput = true; + this.userInputPromptStr = htmlspecialchars(lastEntry.prompt); + this.curTrace.pop() // kill last entry so that it doesn't get displayed + } + } + + this.curInstr = 0; + + this.params = params; + if (!this.params) { + this.params = {}; // make it an empty object by default + } + + var arrowLinesDef = (this.params.arrowLines !== undefined); + var highlightLinesDef = (this.params.highlightLines !== undefined); + + if (!arrowLinesDef && !highlightLinesDef) { + // neither is set + this.params.highlightLines = false; + this.params.arrowLines = true; + } + else if (arrowLinesDef && highlightLinesDef) { + // both are set, so just use their set values + } + else if (arrowLinesDef) { + // only arrowLines set + this.params.highlightLines = !(this.params.arrowLines); + } + else { + // only highlightLines set + this.params.arrowLines = !(this.params.highlightLines); + } + + this.compactFuncLabels = this.params.compactFuncLabels; + + // audible! + if (this.params.pyCrazyMode) { + this.params.arrowLines = this.params.highlightLines = false; + } + + if (this.params.visualizerIdOverride) { + this.visualizerID = this.params.visualizerIdOverride; + } + else { + // needs to be unique! + this.visualizerID = curVisualizerID; + curVisualizerID++; + } + + + this.leftGutterSvgInitialized = false; + this.arrowOffsetY = undefined; + this.codeRowHeight = undefined; + + // avoid 'undefined' state + this.disableHeapNesting = (this.params.disableHeapNesting == true); + this.drawParentPointers = (this.params.drawParentPointers == true); + this.textualMemoryLabels = (this.params.textualMemoryLabels == true); + this.showOnlyOutputs = (this.params.showOnlyOutputs == true); + this.tabularView = (this.params.tabularView == true); + this.showAllFrameLabels = (this.params.showAllFrameLabels == true); + + this.executeCodeWithRawInputFunc = this.params.executeCodeWithRawInputFunc; + + // cool, we can create a separate jsPlumb instance for each visualization: + this.jsPlumbInstance = jsPlumb.getInstance({ + Endpoint: ["Dot", {radius:3}], + EndpointStyles: [{fillStyle: connectorBaseColor}, {fillstyle: null} /* make right endpoint invisible */], + Anchors: ["RightMiddle", "LeftMiddle"], + PaintStyle: {lineWidth:1, strokeStyle: connectorBaseColor}, + + // bezier curve style: + //Connector: [ "Bezier", { curviness:15 }], /* too much 'curviness' causes lines to run together */ + //Overlays: [[ "Arrow", { length: 14, width:10, foldback:0.55, location:0.35 }]], + + // state machine curve style: + Connector: [ "StateMachine" ], + Overlays: [[ "Arrow", { length: 10, width:7, foldback:0.55, location:1 }]], + EndpointHoverStyles: [{fillStyle: connectorHighlightColor}, {fillstyle: null} /* make right endpoint invisible */], + HoverPaintStyle: {lineWidth: 1, strokeStyle: connectorHighlightColor}, + }); + + + // true iff trace ended prematurely since maximum instruction limit has + // been reached + var instrLimitReached = false; + + + // the root elements for jQuery and D3 selections, respectively. + // ALWAYS use these and never use naked $(__) or d3.select(__) + this.domRoot = $('#' + domRootID); + this.domRoot.data("vis",this); // bnm store a reference to this as div data for use later. + this.domRootD3 = d3.select('#' + domRootID); + + // stick a new div.ExecutionVisualizer within domRoot and make that + // the new domRoot: + this.domRoot.html('
'); + + this.domRoot = this.domRoot.find('div.ExecutionVisualizer'); + this.domRootD3 = this.domRootD3.select('div.ExecutionVisualizer'); + + // initialize in renderPyCodeOutput() + this.codeOutputLines = null; + this.breakpoints = null; // set of execution points to set as breakpoints + this.sortedBreakpointsList = null; // sorted and synced with breakpointLines + this.hoverBreakpoints = null; // set of breakpoints because we're HOVERING over a given line + + this.classAttrsHidden = {}; // kludgy hack for 'show/hide attributes' for class objects + + // API for adding a hook, created by David Pritchard + this.pytutor_hooks = {}; // keys, hook names; values, list of functions + + if (this.params.lang === 'java') { + this.activateJavaFrontend(); // ohhhh yeah! + } + + this.try_hook("end_constructor", {myViz:this}); + + this.hasRendered = false; + + this.render(); // go for it! +} + + +/* API for adding a hook, created by David Pritchard + https://github.com/daveagp + +[this documentation is a bit deprecated since Philip made try_hook a +method of ExecutionVisualizer, but the general ideas remains] + + An external user should call +add_pytutor_hook("hook_name_here", function(args) {...}) + args will be a javascript object with several named properties; + this is meant to be similar to Python's keyword arguments. + + The hooked function should return an array whose first element is a boolean: + true if it completely handled the situation (no further hooks + nor the base function should be called); false otherwise (wasn't handled). + If the hook semantically represents a function that returns something, + the second value of the returned array is that semantic return value. + + E.g. for the Java visualizer a simplified version of a hook we use is: + +add_pytutor_hook( + "isPrimitiveType", + function(args) { + var obj = args.obj; // unpack + if (obj instanceof Array && obj[0] == "CHAR-LITERAL") + return [true, true]; // yes we handled it, yes it's primitive + return [false]; // didn't handle it, let someone else + }); + + Hook callbacks can return false or undefined (i.e. no return + value) in lieu of [false]. + + NB: If multiple functions are added to a hook, the oldest goes first. +*/ +ExecutionVisualizer.prototype.add_pytutor_hook = function(hook_name, func) { + if (this.pytutor_hooks[hook_name]) + this.pytutor_hooks[hook_name].push(func); + else + this.pytutor_hooks[hook_name] = [func]; +} + +/* + +[this documentation is a bit deprecated since Philip made try_hook a +method of ExecutionVisualizer, but the general ideas remains] + +try_hook(hook_name, args): how the internal codebase invokes a hook. + args will be a javascript object with several named properties; + this is meant to be similar to Python's keyword arguments. + E.g., + +function isPrimitiveType(obj) { + var hook_result = try_hook("isPrimitiveType", {obj:obj}); + if (hook_result[0]) return hook_result[1]; + // go on as normal if the hook didn't handle it + + Although add_pytutor_hook allows the hooked function to + return false or undefined, try_hook will always return + something with the strict format [false], [true] or [true, ...]. +*/ +ExecutionVisualizer.prototype.try_hook = function(hook_name, args) { + if (this.pytutor_hooks[hook_name]) { + for (var i=0; iheap connections) or heap object (for heap->heap connections) + // the format is: '__heap_pointer_src_' + // Value: CSS ID of the div element representing the value rendered in the heap + // (the format is given by generateHeapObjID()) + // + // The reason we need to prepend this.visualizerID is because jsPlumb needs + // GLOBALLY UNIQUE IDs for use as connector endpoints. + // + // TODO: jsPlumb might be able to directly take DOM elements rather + // than IDs, which makes the above point moot. But let's just stick + // with this for now until I want to majorly refactor :) + + // the only elements in these sets are NEW elements to be rendered in this + // particular call to renderDataStructures. + connectionEndpointIDs: d3.map(), + heapConnectionEndpointIDs: d3.map(), // subset of connectionEndpointIDs for heap->heap connections + // analogous to connectionEndpointIDs, except for environment parent pointers + parentPointerConnectionEndpointIDs: d3.map(), + + renderedHeapObjectIDs: d3.map(), // format given by generateHeapObjID() + }; +} + + +// create a unique ID, which is often necessary so that jsPlumb doesn't get confused +// due to multiple ExecutionVisualizer instances being displayed simultaneously +ExecutionVisualizer.prototype.generateID = function(original_id) { + // (it's safer to start names with a letter rather than a number) + return 'v' + this.visualizerID + '__' + original_id; +} + +// create a unique CSS ID for a heap object, which should include both +// its ID and the current step number. this is necessary if we want to +// display the same heap object at multiple execution steps. +ExecutionVisualizer.prototype.generateHeapObjID = function(objID, stepNum) { + return this.generateID('heap_object_' + objID + '_s' + stepNum); +} + + +ExecutionVisualizer.prototype.render = function() { + if (this.hasRendered) { + alert('ERROR: You should only call render() ONCE on an ExecutionVisualizer object.'); + return; + } + + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + var codeDisplayHTML = + '
\ +
\ +
\ + \ +
\ +
\ + \ + \ + Step ? of ?\ + \ + \ +
\ +
\ + \ + \ + \ +
\ +
\ +
\ +
\ + \ +
\ +
\ +
\ +
'; + + var outputsHTML = + '
\ +
\ + Program output:
\ + \ +
'; + + var codeVizHTML = + '
\ + \ + \ + \ + \ + \ +
\ +
\ +
Frames
\ +
\ +
\ +
\ +
\ +
Objects
\ +
\ +
\ +
'; + + // override + if (myViz.tabularView) { + codeVizHTML = '
'; + } + + var vizHeaderHTML = + '
\ + \ +
\ + \ +
\ +
'; + + if (this.params.verticalStack) { + this.domRoot.html(vizHeaderHTML + '
' + + codeDisplayHTML + '
' + + codeVizHTML + '
'); + } + else { + this.domRoot.html(vizHeaderHTML + '
' + + codeDisplayHTML + '' + + codeVizHTML + '
'); + } + + if (this.showOnlyOutputs) { + myViz.domRoot.find('#dataViz').hide(); + this.domRoot.find('#vizLayoutTdSecond').append(outputsHTML); + + if (this.params.verticalStack) { + this.domRoot.find('#vizLayoutTdSecond').css('padding-top', '25px'); + } + else { + this.domRoot.find('#vizLayoutTdSecond').css('padding-left', '25px'); + } + } + else { + this.domRoot.find('#vizLayoutTdFirst').append(outputsHTML); + } + + if (this.params.arrowLines) { + this.domRoot.find('#legendDiv') + .append(' line that has just executed') + .append('

next line to execute

'); + + myViz.domRootD3.select('svg#prevLegendArrowSVG') + .append('polygon') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', lightArrowColor); + + myViz.domRootD3.select('svg#curLegendArrowSVG') + .append('polygon') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', darkArrowColor); + } + else if (this.params.highlightLines) { + myViz.domRoot.find('#legendDiv') + .append('line that has just executed ') + .append('next line to execute') + } + else if (this.params.pyCrazyMode) { + myViz.domRoot.find('#legendDiv') + .append('Py2crazy mode!') + .append(' Stepping through (roughly) each executed expression. Color codes:

') + .append('expression that just executed
') + .append('next expression to execute'); + } + + + if (this.params.editCodeBaseURL) { + // kinda kludgy + var pyVer = '2'; // default + if (this.params.lang === 'js') { + pyVer = 'js'; + } else if (this.params.lang === 'ts') { + pyVer = 'ts'; + } else if (this.params.lang === 'java') { + pyVer = 'java'; + } else if (this.params.lang === 'py3') { + pyVer = '3'; + } + + var urlStr = $.param.fragment(this.params.editCodeBaseURL, + {code: this.curInputCode, py: pyVer}, + 2); + this.domRoot.find('#editBtn').attr('href', urlStr); + } + else { + this.domRoot.find('#editCodeLinkDiv').hide(); // just hide for simplicity! + this.domRoot.find('#editBtn').attr('href', "#"); + this.domRoot.find('#editBtn').click(function(){return false;}); // DISABLE the link! + } + + if (this.params.lang !== undefined) { + if (this.params.lang === 'js') { + this.domRoot.find('#langDisplayDiv').html('JavaScript'); + } else if (this.params.lang === 'ts') { + this.domRoot.find('#langDisplayDiv').html('TypeScript'); + } else if (this.params.lang === 'ruby') { + this.domRoot.find('#langDisplayDiv').html('Ruby'); + } else if (this.params.lang === 'java') { + this.domRoot.find('#langDisplayDiv').html('Java'); + } else if (this.params.lang === 'py2') { + this.domRoot.find('#langDisplayDiv').html('Python 2.7'); + } else if (this.params.lang === 'py3') { + this.domRoot.find('#langDisplayDiv').html('Python 3.3'); + } else { + this.domRoot.find('#langDisplayDiv').hide(); + } + } + + if (this.params.allowEditAnnotations !== undefined) { + this.allowEditAnnotations = this.params.allowEditAnnotations; + } + else { + this.allowEditAnnotations = false; + } + + if (this.params.pyCrazyMode !== undefined) { + this.pyCrazyMode = this.params.pyCrazyMode; + } + else { + this.pyCrazyMode = false; + } + + this.domRoot.find('#stepAnnotationEditor').hide(); + + if (this.params.embeddedMode) { + this.params.hideOutput = true; // put this before hideOutput handler + + // don't override if they've already been set! + if (this.params.codeDivWidth === undefined) { + this.params.codeDivWidth = this.DEFAULT_EMBEDDED_CODE_DIV_WIDTH; + } + + if (this.params.codeDivHeight === undefined) { + this.params.codeDivHeight = this.DEFAULT_EMBEDDED_CODE_DIV_HEIGHT; + } + + this.allowEditAnnotations = false; + + // add an extra label to link back to the main site, so that viewers + // on the embedded page know that they're seeing an OPT visualization + this.domRoot.find('#codeDisplayDiv').append('

Visualized using Online Python Tutor by Philip Guo
'); + } + + myViz.editAnnotationMode = false; + + if (this.allowEditAnnotations) { + var ab = this.domRoot.find('#annotateBtn'); + + ab.click(function() { + if (myViz.editAnnotationMode) { + myViz.enterViewAnnotationsMode(); + + myViz.domRoot.find("#jmpFirstInstr,#jmpLastInstr,#jmpStepBack,#jmpStepFwd,#executionSlider,#editCodeLinkDiv,#stepAnnotationViewer").show(); + myViz.domRoot.find('#stepAnnotationEditor').hide(); + ab.html('Annotate this step'); + } + else { + myViz.enterEditAnnotationsMode(); + + myViz.domRoot.find("#jmpFirstInstr,#jmpLastInstr,#jmpStepBack,#jmpStepFwd,#executionSlider,#editCodeLinkDiv,#stepAnnotationViewer").hide(); + myViz.domRoot.find('#stepAnnotationEditor').show(); + ab.html('Done annotating'); + } + }); + } + else { + this.domRoot.find('#annotateBtn').hide(); + } + + + // not enough room for these extra buttons ... + if (this.params.codeDivWidth && + this.params.codeDivWidth < 470) { + this.domRoot.find('#jmpFirstInstr').hide(); + this.domRoot.find('#jmpLastInstr').hide(); + } + + + if (this.params.codeDivWidth) { + // set width once + this.domRoot.find('#codeDisplayDiv').width(this.params.codeDivWidth); + // it will propagate to the slider + + this.domRoot.find("#pyStdout").css("width", this.params.codeDivWidth - 20 /* wee tweaks */); + } + + // enable left-right draggable pane resizer (originally from David Pritchard) + this.domRoot.find('#codeDisplayDiv').resizable({ + handles: "e", + minWidth: 100, //otherwise looks really goofy + resize: function(event, ui) { // old name: syncStdoutWidth, now not appropriate + // resize stdout box in unison + myViz.domRoot.find("#pyStdout").css("width", $(this).width() - 20 /* wee tweaks */); + + myViz.domRoot.find("#codeDisplayDiv").css("height", "auto"); // redetermine height if necessary + if (myViz.params.updateOutputCallback) // report size change + myViz.params.updateOutputCallback(this); + }}); + + if (this.params.codeDivHeight) { + this.domRoot.find('#pyCodeOutputDiv') + .css('max-height', this.params.codeDivHeight + 'px'); + } + + + // create a persistent globals frame + // (note that we need to keep #globals_area separate from #stack for d3 to work its magic) + this.domRoot.find("#globals_area").append('
' + this.getRealLabel('Global frame') + '
'); + + + if (this.params.hideOutput) { + this.domRoot.find('#progOutputs').hide(); + } + + this.domRoot.find("#jmpFirstInstr").click(function() { + myViz.renderStep(0); + }); + + this.domRoot.find("#jmpLastInstr").click(function() { + myViz.renderStep(myViz.curTrace.length - 1); + }); + + this.domRoot.find("#jmpStepBack").click(function() { + myViz.stepBack(); + }); + + this.domRoot.find("#jmpStepFwd").click(function() { + myViz.stepForward(); + }); + + // disable controls initially ... + this.domRoot.find("#vcrControls #jmpFirstInstr").attr("disabled", true); + this.domRoot.find("#vcrControls #jmpStepBack").attr("disabled", true); + this.domRoot.find("#vcrControls #jmpStepFwd").attr("disabled", true); + this.domRoot.find("#vcrControls #jmpLastInstr").attr("disabled", true); + + + + // must postprocess curTrace prior to running precomputeCurTraceLayouts() ... + var lastEntry = this.curTrace[this.curTrace.length - 1]; + + this.instrLimitReached = (lastEntry.event == 'instruction_limit_reached'); + + if (this.instrLimitReached) { + this.curTrace.pop() // kill last entry + var warningMsg = lastEntry.exception_msg; + myViz.domRoot.find("#errorOutput").html(htmlspecialchars(warningMsg)); + myViz.domRoot.find("#errorOutput").show(); + } + + // set up slider after postprocessing curTrace + + var sliderDiv = this.domRoot.find('#executionSlider'); + sliderDiv.slider({min: 0, max: this.curTrace.length - 1, step: 1}); + //disable keyboard actions on the slider itself (to prevent double-firing of events) + sliderDiv.find(".ui-slider-handle").unbind('keydown'); + // make skinnier and taller + sliderDiv.find(".ui-slider-handle").css('width', '0.8em'); + sliderDiv.find(".ui-slider-handle").css('height', '1.4em'); + this.domRoot.find(".ui-widget-content").css('font-size', '0.9em'); + + this.domRoot.find('#executionSlider').bind('slide', function(evt, ui) { + // this is SUPER subtle. if this value was changed programmatically, + // then evt.originalEvent will be undefined. however, if this value + // was changed by a user-initiated event, then this code should be + // executed ... + if (evt.originalEvent) { + myViz.renderStep(ui.value); + } + }); + + if (this.params.startingInstruction) { + // weird special case for something like: + // e=raw_input(raw_input("Enter something:")) + if (this.params.startingInstruction == this.curTrace.length) { + this.params.startingInstruction--; + } + + assert(0 <= this.params.startingInstruction && + this.params.startingInstruction < this.curTrace.length); + this.curInstr = this.params.startingInstruction; + } + + if (this.params.jumpToEnd) { + this.curInstr = this.curTrace.length - 1; + } + + if (this.params.hideCode) { + this.domRoot.find('#vizLayoutTdFirst').hide(); // gigantic hack! + } + + this.try_hook("end_render", {myViz:this}); + + this.precomputeCurTraceLayouts(); + + if (!this.params.hideCode) { + this.renderPyCodeOutput(); + } + + // EXPERIMENTAL! + if (this.tabularView) { + this.renderTabularView(); + + // scroll vizLayoutTdFirst down to always align with the vertical + // scrolling ... + $(window).scroll(function() { + var codePane = myViz.domRoot.find('#vizLayoutTdFirst'); + var docScrollTop = $(document).scrollTop(); + var offset = codePane.offset().top; + var delta = docScrollTop - offset; + if (delta < 0) { + delta = 0; + } + + // don't scroll past the bottom of the optTabularView table: + var optTable = myViz.domRoot.find('#optTabularView'); + var optTableBottom = optTable.height() + optTable.offset().top; + var codeDisplayHeight = myViz.domRoot.find('#codeDisplayDiv').height(); + if (delta - offset < optTableBottom - codeDisplayHeight) { + codePane.css('padding-top', delta); + } + }); + } + + + var ruiDiv = myViz.domRoot.find('#rawUserInputDiv'); + ruiDiv.find('#userInputPromptStr').html(myViz.userInputPromptStr); + ruiDiv.find('#raw_input_submit_btn').click(function() { + var userInput = ruiDiv.find('#raw_input_textbox').val(); + // advance instruction count by 1 to get to the NEXT instruction + myViz.executeCodeWithRawInputFunc(userInput, myViz.curInstr + 1); + }); + + + this.updateOutput(); + + this.hasRendered = true; +} + + +ExecutionVisualizer.prototype.showVizHeaderViewMode = function() { + var titleVal = this.domRoot.find('#vizTitleEditor').val().trim(); + var descVal = this.domRoot.find('#vizDescriptionEditor').val().trim(); + + this.domRoot.find('#vizTitleEditor,#vizDescriptionEditor').hide(); + + if (!titleVal && !descVal) { + this.domRoot.find('#vizHeader').hide(); + } + else { + this.domRoot.find('#vizHeader,#vizTitleViewer,#vizDescriptionViewer').show(); + if (titleVal) { + this.domRoot.find('#vizTitleViewer').html(htmlsanitize(titleVal)); // help prevent HTML/JS injection attacks + } + + if (descVal) { + this.domRoot.find('#vizDescriptionViewer').html(htmlsanitize(descVal)); // help prevent HTML/JS injection attacks + } + } +} + +ExecutionVisualizer.prototype.showVizHeaderEditMode = function() { + this.domRoot.find('#vizHeader').show(); + + this.domRoot.find('#vizTitleViewer,#vizDescriptionViewer').hide(); + this.domRoot.find('#vizTitleEditor,#vizDescriptionEditor').show(); +} + + +ExecutionVisualizer.prototype.destroyAllAnnotationBubbles = function() { + var myViz = this; + + // hopefully destroys all old bubbles and reclaims their memory + if (myViz.allAnnotationBubbles) { + $.each(myViz.allAnnotationBubbles, function(i, e) { + e.destroyQTip(); + }); + } + + // remove this handler as well! + this.domRoot.find('#pyCodeOutputDiv').unbind('scroll'); + + myViz.allAnnotationBubbles = null; +} + +ExecutionVisualizer.prototype.initStepAnnotation = function() { + var curEntry = this.curTrace[this.curInstr]; + if (curEntry.stepAnnotation) { + this.domRoot.find("#stepAnnotationViewer").html(htmlsanitize(curEntry.stepAnnotation)); // help prevent HTML/JS injection attacks + this.domRoot.find("#stepAnnotationEditor").val(curEntry.stepAnnotation); + } + else { + this.domRoot.find("#stepAnnotationViewer").html(''); + this.domRoot.find("#stepAnnotationEditor").val(''); + } +} + +ExecutionVisualizer.prototype.initAllAnnotationBubbles = function() { + var myViz = this; + + // TODO: check for memory leaks + //console.log('initAllAnnotationBubbles'); + + myViz.destroyAllAnnotationBubbles(); + + var codelineIDs = []; + $.each(this.domRoot.find('#pyCodeOutput .cod'), function(i, e) { + codelineIDs.push($(e).attr('id')); + }); + + var heapObjectIDs = []; + $.each(this.domRoot.find('.heapObject'), function(i, e) { + heapObjectIDs.push($(e).attr('id')); + }); + + var variableIDs = []; + $.each(this.domRoot.find('.variableTr'), function(i, e) { + variableIDs.push($(e).attr('id')); + }); + + var frameIDs = []; + $.each(this.domRoot.find('.stackFrame'), function(i, e) { + frameIDs.push($(e).attr('id')); + }); + + myViz.allAnnotationBubbles = []; + + $.each(codelineIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'codeline', e));}); + $.each(heapObjectIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'object', e));}); + $.each(variableIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'variable', e));}); + $.each(frameIDs, function(i,e) {myViz.allAnnotationBubbles.push(new AnnotationBubble(myViz, 'frame', e));}); + + + this.domRoot.find('#pyCodeOutputDiv').scroll(function() { + $.each(myViz.allAnnotationBubbles, function(i, e) { + if (e.type == 'codeline') { + e.redrawCodelineBubble(); + } + }); + }); + + //console.log('initAllAnnotationBubbles', myViz.allAnnotationBubbles.length); +} + + +ExecutionVisualizer.prototype.enterViewAnnotationsMode = function() { + this.editAnnotationMode = false; + var curEntry = this.curTrace[this.curInstr]; + + // TODO: check for memory leaks!!! + var myViz = this; + + if (!myViz.allAnnotationBubbles) { + if (curEntry.bubbleAnnotations) { + // If there is an existing annotations object, then initiate all annotations bubbles + // and display them in 'View' mode + myViz.initAllAnnotationBubbles(); + + $.each(myViz.allAnnotationBubbles, function(i, e) { + var txt = curEntry.bubbleAnnotations[e.domID]; + if (txt) { + e.preseedText(txt); + } + }); + } + } + + + if (myViz.allAnnotationBubbles) { + var curAnnotations = {}; + + $.each(myViz.allAnnotationBubbles, function(i, e) { + e.enterViewMode(); + + if (e.text) { + curAnnotations[e.domID] = e.text; + } + }); + + // Save annotations directly into the current trace entry as an 'annotations' object + // directly mapping domID -> text. + // + // NB: This scheme can break if the functions for generating domIDs are altered. + curEntry.bubbleAnnotations = curAnnotations; + } + + var stepAnnotationEditorVal = myViz.domRoot.find("#stepAnnotationEditor").val().trim(); + if (stepAnnotationEditorVal) { + curEntry.stepAnnotation = stepAnnotationEditorVal; + } + else { + delete curEntry.stepAnnotation; // go as far as to DELETE this field entirely + } + + myViz.initStepAnnotation(); + + myViz.showVizHeaderViewMode(); + + // redraw all connectors and bubbles in new vertical position .. + myViz.redrawConnectors(); + myViz.redrawAllAnnotationBubbles(); +} + +ExecutionVisualizer.prototype.enterEditAnnotationsMode = function() { + this.editAnnotationMode = true; + + // TODO: check for memory leaks!!! + var myViz = this; + + var curEntry = this.curTrace[this.curInstr]; + + if (!myViz.allAnnotationBubbles) { + myViz.initAllAnnotationBubbles(); + } + + $.each(myViz.allAnnotationBubbles, function(i, e) { + e.enterEditMode(); + }); + + + if (curEntry.stepAnnotation) { + myViz.domRoot.find("#stepAnnotationEditor").val(curEntry.stepAnnotation); + } + else { + myViz.domRoot.find("#stepAnnotationEditor").val(''); + } + + + myViz.showVizHeaderEditMode(); + + // redraw all connectors and bubbles in new vertical position .. + myViz.redrawConnectors(); + myViz.redrawAllAnnotationBubbles(); +} + + +ExecutionVisualizer.prototype.redrawAllAnnotationBubbles = function() { + if (this.allAnnotationBubbles) { + $.each(this.allAnnotationBubbles, function(i, e) { + e.redrawBubble(); + }); + } +} + + +// find the previous/next breakpoint to c or return -1 if it doesn't exist +ExecutionVisualizer.prototype.findPrevBreakpoint = function() { + var myViz = this; + var c = myViz.curInstr; + + if (myViz.sortedBreakpointsList.length == 0) { + return -1; + } + else { + for (var i = 1; i < myViz.sortedBreakpointsList.length; i++) { + var prev = myViz.sortedBreakpointsList[i-1]; + var cur = myViz.sortedBreakpointsList[i]; + if (c <= prev) + return -1; + if (cur >= c) + return prev; + } + + // final edge case: + var lastElt = myViz.sortedBreakpointsList[myViz.sortedBreakpointsList.length - 1]; + return (lastElt < c) ? lastElt : -1; + } +} + +ExecutionVisualizer.prototype.findNextBreakpoint = function() { + var myViz = this; + var c = myViz.curInstr; + + if (myViz.sortedBreakpointsList.length == 0) { + return -1; + } + // usability hack: if you're currently on a breakpoint, then + // single-step forward to the next execution point, NOT the next + // breakpoint. it's often useful to see what happens when the line + // at a breakpoint executes. + else if ($.inArray(c, myViz.sortedBreakpointsList) >= 0) { + return c + 1; + } + else { + for (var i = 0; i < myViz.sortedBreakpointsList.length - 1; i++) { + var cur = myViz.sortedBreakpointsList[i]; + var next = myViz.sortedBreakpointsList[i+1]; + if (c < cur) + return cur; + if (cur <= c && c < next) // subtle + return next; + } + + // final edge case: + var lastElt = myViz.sortedBreakpointsList[myViz.sortedBreakpointsList.length - 1]; + return (lastElt > c) ? lastElt : -1; + } +} + + +// returns true if action successfully taken +ExecutionVisualizer.prototype.stepForward = function() { + var myViz = this; + + if (myViz.editAnnotationMode) { + return; + } + + if (myViz.curInstr < myViz.curTrace.length - 1) { + // if there is a next breakpoint, then jump to it ... + if (myViz.sortedBreakpointsList.length > 0) { + var nextBreakpoint = myViz.findNextBreakpoint(); + if (nextBreakpoint != -1) + myViz.curInstr = nextBreakpoint; + else + myViz.curInstr += 1; // prevent "getting stuck" on a solitary breakpoint + } + else { + myViz.curInstr += 1; + } + myViz.updateOutput(true); + return true; + } + + return false; +} + +// returns true if action successfully taken +ExecutionVisualizer.prototype.stepBack = function() { + var myViz = this; + + if (myViz.editAnnotationMode) { + return; + } + + if (myViz.curInstr > 0) { + // if there is a prev breakpoint, then jump to it ... + if (myViz.sortedBreakpointsList.length > 0) { + var prevBreakpoint = myViz.findPrevBreakpoint(); + if (prevBreakpoint != -1) + myViz.curInstr = prevBreakpoint; + else + myViz.curInstr -= 1; // prevent "getting stuck" on a solitary breakpoint + } + else { + myViz.curInstr -= 1; + } + myViz.updateOutput(); + return true; + } + + return false; +} + + +ExecutionVisualizer.prototype.renderPyCodeOutput = function() { + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + + // initialize! + this.breakpoints = d3.map(); + this.sortedBreakpointsList = []; + this.hoverBreakpoints = d3.map(); + + // an array of objects with the following fields: + // 'text' - the text of the line of code + // 'lineNumber' - one-indexed (always the array index + 1) + // 'executionPoints' - an ordered array of zero-indexed execution points where this line was executed + // 'breakpointHere' - has a breakpoint been set here? + this.codeOutputLines = []; + + + function renderSliderBreakpoints() { + myViz.domRoot.find("#executionSliderFooter").empty(); + + // I originally didn't want to delete and re-create this overlay every time, + // but if I don't do so, there are weird flickering artifacts with clearing + // the SVG container; so it's best to just delete and re-create the container each time + var sliderOverlay = myViz.domRootD3.select('#executionSliderFooter') + .append('svg') + .attr('id', 'sliderOverlay') + .attr('width', myViz.domRoot.find('#executionSlider').width()) + .attr('height', 12); + + var xrange = d3.scale.linear() + .domain([0, myViz.curTrace.length - 1]) + .range([0, myViz.domRoot.find('#executionSlider').width()]); + + sliderOverlay.selectAll('rect') + .data(myViz.sortedBreakpointsList) + .enter().append('rect') + .attr('x', function(d, i) { + // make the edge cases look decent + if (d == 0) { + return 0; + } + else { + return xrange(d) - 3; + } + }) + .attr('y', 0) + .attr('width', 2) + .attr('height', 12) + .style('fill', function(d) { + if (myViz.hoverBreakpoints.has(d)) { + return hoverBreakpointColor; + } + else { + return breakpointColor; + } + }); + } + + function _getSortedBreakpointsList() { + var ret = []; + myViz.breakpoints.forEach(function(k, v) { + ret.push(Number(k)); // these should be NUMBERS, not strings + }); + ret.sort(function(x,y){return x-y}); // WTF, javascript sort is lexicographic by default! + return ret; + } + + function addToBreakpoints(executionPoints) { + $.each(executionPoints, function(i, ep) { + myViz.breakpoints.set(ep, 1); + }); + myViz.sortedBreakpointsList = _getSortedBreakpointsList(); + } + + function removeFromBreakpoints(executionPoints) { + $.each(executionPoints, function(i, ep) { + myViz.breakpoints.remove(ep); + }); + myViz.sortedBreakpointsList = _getSortedBreakpointsList(); + } + + + function setHoverBreakpoint(t) { + var exePts = d3.select(t).datum().executionPoints; + + // don't do anything if exePts is empty + // (i.e., this line was never executed) + if (!exePts || exePts.length == 0) { + return; + } + + myViz.hoverBreakpoints = d3.map(); + $.each(exePts, function(i, ep) { + // don't add redundant entries + if (!myViz.breakpoints.has(ep)) { + myViz.hoverBreakpoints.set(ep, 1); + } + }); + + addToBreakpoints(exePts); + renderSliderBreakpoints(); + } + + + function setBreakpoint(t) { + var exePts = d3.select(t).datum().executionPoints; + + // don't do anything if exePts is empty + // (i.e., this line was never executed) + if (!exePts || exePts.length == 0) { + return; + } + + addToBreakpoints(exePts); + + // remove from hoverBreakpoints so that slider display immediately changes color + $.each(exePts, function(i, ep) { + myViz.hoverBreakpoints.remove(ep); + }); + + d3.select(t.parentNode).select('td.lineNo').style('color', breakpointColor); + d3.select(t.parentNode).select('td.lineNo').style('font-weight', 'bold'); + + renderSliderBreakpoints(); + } + + function unsetBreakpoint(t) { + var exePts = d3.select(t).datum().executionPoints; + + // don't do anything if exePts is empty + // (i.e., this line was never executed) + if (!exePts || exePts.length == 0) { + return; + } + + removeFromBreakpoints(exePts); + + var lineNo = d3.select(t).datum().lineNumber; + + renderSliderBreakpoints(); + } + + var lines = this.curInputCode.split('\n'); + + for (var i = 0; i < lines.length; i++) { + var cod = lines[i]; + + var n = {}; + n.text = cod; + n.lineNumber = i + 1; + n.executionPoints = []; + n.breakpointHere = false; + + $.each(this.curTrace, function(j, elt) { + if (elt.line == n.lineNumber) { + n.executionPoints.push(j); + } + }); + + + // if there is a comment containing 'breakpoint' and this line was actually executed, + // then set a breakpoint on this line + var breakpointInComment = false; + var toks = cod.split('#'); + for (var j = 1 /* start at index 1, not 0 */; j < toks.length; j++) { + if (toks[j].indexOf('breakpoint') != -1) { + breakpointInComment = true; + } + } + + if (breakpointInComment && n.executionPoints.length > 0) { + n.breakpointHere = true; + addToBreakpoints(n.executionPoints); + } + + this.codeOutputLines.push(n); + } + + + myViz.domRoot.find('#pyCodeOutputDiv').empty(); + + // maps this.codeOutputLines to both table columns + var codeOutputD3 = this.domRootD3.select('#pyCodeOutputDiv') + .append('table') + .attr('id', 'pyCodeOutput') + .selectAll('tr') + .data(this.codeOutputLines) + .enter().append('tr') + .selectAll('td') + .data(function(d, i){return [d, d] /* map full data item down both columns */;}) + .enter().append('td') + .attr('class', function(d, i) { + if (i == 0) { + return 'lineNo'; + } + else { + return 'cod'; + } + }) + .attr('id', function(d, i) { + if (i == 0) { + return 'lineNo' + d.lineNumber; + } + else { + return myViz.generateID('cod' + d.lineNumber); // make globally unique (within the page) + } + }) + .html(function(d, i) { + if (i == 0) { + return d.lineNumber; + } + else { + return htmlspecialchars(d.text); + } + }); + + // create a left-most gutter td that spans ALL rows ... + // (NB: valign="top" is CRUCIAL for this to work in IE) + if (myViz.params.arrowLines) { + myViz.domRoot.find('#pyCodeOutput tr:first') + .prepend(''); + + // create prevLineArrow and curLineArrow + myViz.domRootD3.select('svg#leftCodeGutterSVG') + .append('polygon') + .attr('id', 'prevLineArrow') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', lightArrowColor); + + myViz.domRootD3.select('svg#leftCodeGutterSVG') + .append('polygon') + .attr('id', 'curLineArrow') + .attr('points', SVG_ARROW_POLYGON) + .attr('fill', darkArrowColor); + } + + // 2012-09-05: Disable breakpoints for now to simplify UX + /* + if (!this.params.embeddedMode) { + codeOutputD3.style('cursor', function(d, i) {return 'pointer'}) + .on('mouseover', function() { + setHoverBreakpoint(this); + }) + .on('mouseout', function() { + myViz.hoverBreakpoints = d3.map(); + + var breakpointHere = d3.select(this).datum().breakpointHere; + + if (!breakpointHere) { + unsetBreakpoint(this); + } + + renderSliderBreakpoints(); // get rid of hover breakpoint colors + }) + .on('mousedown', function() { + // don't do anything if exePts is empty + // (i.e., this line was never executed) + var exePts = d3.select(this).datum().executionPoints; + if (!exePts || exePts.length == 0) { + return; + } + + // toggle breakpoint + d3.select(this).datum().breakpointHere = !d3.select(this).datum().breakpointHere; + + var breakpointHere = d3.select(this).datum().breakpointHere; + if (breakpointHere) { + setBreakpoint(this); + } + else { + unsetBreakpoint(this); + } + }); + + renderSliderBreakpoints(); // renders breakpoints written in as code comments + } + */ + +} + + +// takes a string inputStr and returns an HTML version with +// the characters from [highlightIndex, highlightIndex+extent) highlighted with +// a span of class highlightCssClass +function htmlWithHighlight(inputStr, highlightInd, extent, highlightCssClass) { + var prefix = ''; + if (highlightInd > 0) { + prefix = inputStr.slice(0, highlightInd); + } + + var highlightedChars = inputStr.slice(highlightInd, highlightInd + extent); + + var suffix = ''; + if (highlightInd + extent < inputStr.length) { + suffix = inputStr.slice(highlightInd + extent, inputStr.length); + } + + // ... then set the current line to lineHTML + var lineHTML = htmlspecialchars(prefix) + + '' + + htmlspecialchars(highlightedChars) + + '' + + htmlspecialchars(suffix); + return lineHTML; +} + + +// This function is called every time the display needs to be updated +// smoothTransition is OPTIONAL! +ExecutionVisualizer.prototype.updateOutput = function(smoothTransition) { + if (this.params.hideCode) { + this.updateOutputMini(); + } + else { + this.updateOutputFull(smoothTransition); + } + this.try_hook("end_updateOutput", {myViz:this}); +} + +ExecutionVisualizer.prototype.updateOutputFull = function(smoothTransition) { + assert(this.curTrace); + assert(!this.params.hideCode); + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + // there's no point in re-rendering if this pane isn't even visible in the first place! + if (!myViz.domRoot.is(':visible')) { + return; + } + + // reset + myViz.curLineNumber = undefined; + myViz.prevLineNumber = undefined; + myViz.curLineIsReturn = undefined; + myViz.prevLineIsReturn = undefined; + myViz.curLineExceptionMsg = undefined; + + // really nitpicky!!! gets the difference in width between the code display + // and the maximum width of its enclosing div + myViz.codeHorizontalOverflow = myViz.domRoot.find('#pyCodeOutput').width() - myViz.domRoot.find('#pyCodeOutputDiv').width(); + // should always be positive + if (myViz.codeHorizontalOverflow < 0) { + myViz.codeHorizontalOverflow = 0; + } + + + // TODO: don't do this since it screws with other stuff, and we're not + // activating annotation bubbles right now ... + // crucial resets for annotations (TODO: kludgy) + //myViz.destroyAllAnnotationBubbles(); + //myViz.initStepAnnotation(); + + + var prevDataVizHeight = myViz.domRoot.find('#dataViz').height(); + + + var gutterSVG = myViz.domRoot.find('svg#leftCodeGutterSVG'); + + // one-time initialization of the left gutter + // (we often can't do this earlier since the entire pane + // might be invisible and hence returns a height of zero or NaN + // -- the exact format depends on browser) + if (!myViz.leftGutterSvgInitialized && myViz.params.arrowLines) { + // set the gutter's height to match that of its parent + gutterSVG.height(gutterSVG.parent().height()); + + var firstRowOffsetY = myViz.domRoot.find('table#pyCodeOutput tr:first').offset().top; + + // first take care of edge case when there's only one line ... + myViz.codeRowHeight = myViz.domRoot.find('table#pyCodeOutput td.cod:first').height(); + + // ... then handle the (much more common) multi-line case ... + // this weird contortion is necessary to get the accurate row height on Internet Explorer + // (simpler methods work on all other major browsers, erghhhhhh!!!) + if (this.codeOutputLines && this.codeOutputLines.length > 1) { + var secondRowOffsetY = myViz.domRoot.find('table#pyCodeOutput tr:nth-child(2)').offset().top; + myViz.codeRowHeight = secondRowOffsetY - firstRowOffsetY; + } + + assert(myViz.codeRowHeight > 0); + + var gutterOffsetY = gutterSVG.offset().top; + var teenyAdjustment = gutterOffsetY - firstRowOffsetY; + + // super-picky detail to adjust the vertical alignment of arrows so that they line up + // well with the pointed-to code text ... + // (if you want to manually adjust tableTop, then ~5 is a reasonable number) + myViz.arrowOffsetY = Math.floor((myViz.codeRowHeight / 2) - (SVG_ARROW_HEIGHT / 2)) - teenyAdjustment; + + myViz.leftGutterSvgInitialized = true; + } + + if (myViz.params.arrowLines) { + assert(myViz.arrowOffsetY !== undefined); + assert(myViz.codeRowHeight !== undefined); + assert(0 <= myViz.arrowOffsetY && myViz.arrowOffsetY <= myViz.codeRowHeight); + } + + // call the callback if necessary (BEFORE rendering) + if (this.params.updateOutputCallback) { + this.params.updateOutputCallback(this); + } + + + var curEntry = this.curTrace[this.curInstr]; + var hasError = false; + // bnm Render a question + if (curEntry.question) { + //alert(curEntry.question.text); + + $('#'+curEntry.question.div).modal({position:["25%","50%"]}); + } + + if (myViz.params.debugMode) { + console.log('updateOutputFull', curEntry); + } + + // render VCR controls: + var totalInstrs = this.curTrace.length; + + var isLastInstr = (this.curInstr == (totalInstrs-1)); + + var vcrControls = myViz.domRoot.find("#vcrControls"); + + if (isLastInstr) { + if (this.promptForUserInput || this.promptForMouseInput) { + vcrControls.find("#curInstr").html('Enter user input:'); + } + else if (this.instrLimitReached) { + vcrControls.find("#curInstr").html("Instruction limit reached"); + } + else { + vcrControls.find("#curInstr").html("Program terminated"); + } + } + else { + vcrControls.find("#curInstr").html("Step " + + String(this.curInstr + 1) + + " of " + String(totalInstrs-1)); + } + + + vcrControls.find("#jmpFirstInstr").attr("disabled", false); + vcrControls.find("#jmpStepBack").attr("disabled", false); + vcrControls.find("#jmpStepFwd").attr("disabled", false); + vcrControls.find("#jmpLastInstr").attr("disabled", false); + + if (this.curInstr == 0) { + vcrControls.find("#jmpFirstInstr").attr("disabled", true); + vcrControls.find("#jmpStepBack").attr("disabled", true); + } + if (isLastInstr) { + vcrControls.find("#jmpLastInstr").attr("disabled", true); + vcrControls.find("#jmpStepFwd").attr("disabled", true); + } + + + // PROGRAMMATICALLY change the value, so evt.originalEvent should be undefined + myViz.domRoot.find('#executionSlider').slider('value', this.curInstr); + + + // render error (if applicable): + if (curEntry.event == 'exception' || + curEntry.event == 'uncaught_exception') { + assert(curEntry.exception_msg); + + if (curEntry.exception_msg == "Unknown error") { + myViz.domRoot.find("#errorOutput").html('Unknown error: Please email a bug report to philip@pgbovine.net'); + } + else { + myViz.domRoot.find("#errorOutput").html(htmlspecialchars(curEntry.exception_msg)); + } + + myViz.domRoot.find("#errorOutput").show(); + + hasError = true; + myViz.curLineExceptionMsg = curEntry.exception_msg; + } + else { + if (!this.instrLimitReached) { // ugly, I know :/ + myViz.domRoot.find("#errorOutput").hide(); + } + } + + + function highlightCodeLine() { + /* if instrLimitReached, then treat like a normal non-terminating line */ + var isTerminated = (!myViz.instrLimitReached && isLastInstr); + + var pcod = myViz.domRoot.find('#pyCodeOutputDiv'); + + var curLineNumber = null; + var prevLineNumber = null; + + // only relevant if in myViz.pyCrazyMode + var prevColumn = undefined; + var prevExprStartCol = undefined; + var prevExprWidth = undefined; + + var curIsReturn = (curEntry.event == 'return'); + var prevIsReturn = false; + + + if (myViz.curInstr > 0) { + prevLineNumber = myViz.curTrace[myViz.curInstr - 1].line; + prevIsReturn = (myViz.curTrace[myViz.curInstr - 1].event == 'return'); + + /* kinda nutsy hack: if the previous line is a return line, don't + highlight it. instead, highlight the line in the enclosing + function that called this one (i.e., the call site). e.g.,: + + 1. def foo(lst): + 2. return len(lst) + 3. + 4. y = foo([1,2,3]) + 5. print y + + If prevLineNumber is 2 and prevIsReturn, then curLineNumber is + 5, since that's the line that executes right after line 2 + finishes. However, this looks confusing to the user since what + actually happened here was that the return value of foo was + assigned to y on line 4. I want to have prevLineNumber be line + 4 so that it gets highlighted. There's no ideal solution, but I + think that looks more sensible, since line 4 was the previous + line that executed *in this function's frame*. + */ + if (prevIsReturn) { + var idx = myViz.curInstr - 1; + var retStack = myViz.curTrace[idx].stack_to_render; + assert(retStack.length > 0); + var retFrameId = retStack[retStack.length - 1].frame_id; + + // now go backwards until we find a 'call' to this frame + while (idx >= 0) { + var entry = myViz.curTrace[idx]; + if (entry.event == 'call' && entry.stack_to_render) { + var topFrame = entry.stack_to_render[entry.stack_to_render.length - 1]; + if (topFrame.frame_id == retFrameId) { + break; // DONE, we found the call that corresponds to this return + } + } + idx--; + } + + // now idx is the index of the 'call' entry. we need to find the + // entry before that, which is the instruction before the call. + // THAT's the line of the call site. + if (idx > 0) { + var callingEntry = myViz.curTrace[idx - 1]; + prevLineNumber = callingEntry.line; // WOOHOO!!! + prevIsReturn = false; // this is now a call site, not a return + smoothTransition = false; + } + } + + if (myViz.pyCrazyMode) { + var p = myViz.curTrace[myViz.curInstr - 1]; + prevColumn = p.column; + // if these don't exist, set reasonable defaults + prevExprStartCol = (p.expr_start_col !== undefined) ? p.expr_start_col : p.column; + prevExprWidth = (p.expr_width !== undefined) ? p.expr_width : 1; + } + } + + curLineNumber = curEntry.line; + + if (myViz.pyCrazyMode) { + var curColumn = curEntry.column; + + // if these don't exist, set reasonable defaults + var curExprStartCol = (curEntry.expr_start_col !== undefined) ? curEntry.expr_start_col : curColumn; + var curExprWidth = (curEntry.expr_width !== undefined) ? curEntry.expr_width : 1; + + var curLineInfo = myViz.codeOutputLines[curLineNumber - 1]; + assert(curLineInfo.lineNumber == curLineNumber); + var codeAtLine = curLineInfo.text; + + // shotgun approach: reset ALL lines to their natural (unbolded) state + $.each(myViz.codeOutputLines, function(i, e) { + var d = myViz.generateID('cod' + e.lineNumber); + myViz.domRoot.find('#' + d).html(htmlspecialchars(e.text)); + }); + + + // Three possible cases: + // 1. previous and current trace entries are on the SAME LINE + // 2. previous and current trace entries are on different lines + // 3. there is no previous trace entry + + if (prevLineNumber == curLineNumber) { + var curLineHTML = ''; + + // tricky tricky! + // generate a combined line with both previous and current + // columns highlighted + + for (var i = 0; i < codeAtLine.length; i++) { + var isCur = (curExprStartCol <= i) && (i < curExprStartCol + curExprWidth); + var isPrev = (prevExprStartCol <= i) && (i < prevExprStartCol + prevExprWidth); + + var htmlEscapedChar = htmlspecialchars(codeAtLine[i]); + + if (isCur && isPrev) { + curLineHTML += '' + htmlEscapedChar + ''; + } + else if (isPrev) { + curLineHTML += '' + htmlEscapedChar + ''; + } + else if (isCur) { + curLineHTML += '' + htmlEscapedChar + ''; + } + else { + curLineHTML += htmlEscapedChar; + } + } + + assert(curLineHTML); + myViz.domRoot.find('#' + myViz.generateID('cod' + curLineNumber)).html(curLineHTML); + } + else { + if (prevLineNumber) { + var prevLineInfo = myViz.codeOutputLines[prevLineNumber - 1]; + var prevLineHTML = htmlWithHighlight(prevLineInfo.text, prevExprStartCol, prevExprWidth, 'pycrazy-highlight-prev'); + myViz.domRoot.find('#' + myViz.generateID('cod' + prevLineNumber)).html(prevLineHTML); + } + var curLineHTML = htmlWithHighlight(codeAtLine, curExprStartCol, curExprWidth, 'pycrazy-highlight-cur'); + myViz.domRoot.find('#' + myViz.generateID('cod' + curLineNumber)).html(curLineHTML); + } + } + + // on 'return' events, give a bit more of a vertical nudge to show that + // the arrow is aligned with the 'bottom' of the line ... + var prevVerticalNudge = prevIsReturn ? Math.floor(myViz.codeRowHeight / 2) : 0; + var curVerticalNudge = curIsReturn ? Math.floor(myViz.codeRowHeight / 2) : 0; + + + // edge case for the final instruction :0 + if (isTerminated && !hasError) { + // don't show redundant arrows on the same line when terminated ... + if (prevLineNumber == curLineNumber) { + curLineNumber = null; + } + // otherwise have a smaller vertical nudge (to fit at bottom of display table) + else { + curVerticalNudge = curVerticalNudge - 2; + } + } + + if (myViz.params.arrowLines) { + if (prevLineNumber) { + var pla = myViz.domRootD3.select('#prevLineArrow'); + var translatePrevCmd = 'translate(0, ' + (((prevLineNumber - 1) * myViz.codeRowHeight) + myViz.arrowOffsetY + prevVerticalNudge) + ')'; + + if (smoothTransition) { + pla + .transition() + .duration(200) + .attr('fill', 'white') + .each('end', function() { + pla + .attr('transform', translatePrevCmd) + .attr('fill', lightArrowColor); + + gutterSVG.find('#prevLineArrow').show(); // show at the end to avoid flickering + }); + } + else { + pla.attr('transform', translatePrevCmd) + gutterSVG.find('#prevLineArrow').show(); + } + + } + else { + gutterSVG.find('#prevLineArrow').hide(); + } + + if (curLineNumber) { + var cla = myViz.domRootD3.select('#curLineArrow'); + var translateCurCmd = 'translate(0, ' + (((curLineNumber - 1) * myViz.codeRowHeight) + myViz.arrowOffsetY + curVerticalNudge) + ')'; + + if (smoothTransition) { + cla + .transition() + .delay(200) + .duration(250) + .attr('transform', translateCurCmd); + } + else { + cla.attr('transform', translateCurCmd); + } + + gutterSVG.find('#curLineArrow').show(); + } + else { + gutterSVG.find('#curLineArrow').hide(); + } + } + + myViz.domRootD3.selectAll('#pyCodeOutputDiv td.cod') + .style('border-top', function(d) { + if (hasError && (d.lineNumber == curEntry.line)) { + return '1px solid ' + errorColor; + } + else { + return ''; + } + }) + .style('border-bottom', function(d) { + // COPY AND PASTE ALERT! + if (hasError && (d.lineNumber == curEntry.line)) { + return '1px solid ' + errorColor; + } + else { + return ''; + } + }); + + // returns True iff lineNo is visible in pyCodeOutputDiv + function isOutputLineVisible(lineNo) { + var lineNoTd = myViz.domRoot.find('#lineNo' + lineNo); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + // add a few pixels of fudge factor on the bottom end due to bottom scrollbar + return (PO <= LO) && (LO < (PO + H - 30)); + } + + + // smoothly scroll pyCodeOutputDiv so that the given line is at the center + function scrollCodeOutputToLine(lineNo) { + var lineNoTd = myViz.domRoot.find('#lineNo' + lineNo); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + pcod.stop(); // first stop all previously-queued animations + pcod.animate({scrollTop: (ST + (LO - PO - (Math.round(H / 2))))}, 300); + } + + if (myViz.params.highlightLines) { + myViz.domRoot.find('#pyCodeOutputDiv td.cod').removeClass('highlight-prev'); + myViz.domRoot.find('#pyCodeOutputDiv td.cod').removeClass('highlight-cur'); + if (curLineNumber) + myViz.domRoot.find('#'+myViz.generateID('cod'+curLineNumber)).addClass('highlight-cur'); + if (prevLineNumber) + myViz.domRoot.find('#'+myViz.generateID('cod'+prevLineNumber)).addClass('highlight-prev'); + } + + + // smoothly scroll code display + if (!isOutputLineVisible(curEntry.line)) { + scrollCodeOutputToLine(curEntry.line); + } + + // add these fields to myViz + myViz.curLineNumber = curLineNumber; + myViz.prevLineNumber = prevLineNumber; + myViz.curLineIsReturn = curIsReturn; + myViz.prevLineIsReturn = prevIsReturn; + + } // end of highlightCodeLine + + + // render code output: + if (curEntry.line) { + highlightCodeLine(); + } + + // render stdout: + + // if there isn't anything in curEntry.stdout, don't even bother + // displaying the pane + if (curEntry.stdout) { + this.domRoot.find('#progOutputs').show(); + + // keep original horizontal scroll level: + var oldLeft = myViz.domRoot.find("#pyStdout").scrollLeft(); + myViz.domRoot.find("#pyStdout").val(curEntry.stdout); + + myViz.domRoot.find("#pyStdout").scrollLeft(oldLeft); + // scroll to bottom, though: + myViz.domRoot.find("#pyStdout").scrollTop(myViz.domRoot.find("#pyStdout")[0].scrollHeight); + } + else { + this.domRoot.find('#progOutputs').hide(); + } + + + // inject user-specified HTML/CSS/JS output: + // YIKES -- HUGE CODE INJECTION VULNERABILITIES :O + myViz.domRoot.find("#htmlOutputDiv").empty(); + if (curEntry.html_output) { + if (curEntry.css_output) { + myViz.domRoot.find("#htmlOutputDiv").append(''); + } + myViz.domRoot.find("#htmlOutputDiv").append(curEntry.html_output); + + // inject and run JS *after* injecting HTML and CSS + if (curEntry.js_output) { + // NB: when jQuery injects JS, it executes the code immediately + // and then removes the entire '); + } + } + + + // finally, render all of the data structures + var curEntry = this.curTrace[this.curInstr]; + var curToplevelLayout = this.curTraceLayouts[this.curInstr]; + this.renderDataStructures(curEntry, curToplevelLayout); + + this.enterViewAnnotationsMode(); // ... and render optional annotations (if any exist) + + + // call the callback if necessary (BEFORE rendering) + if (myViz.domRoot.find('#dataViz').height() != prevDataVizHeight) { + if (this.params.heightChangeCallback) { + this.params.heightChangeCallback(this); + } + } + + // handle raw user input + var ruiDiv = myViz.domRoot.find('#rawUserInputDiv'); + ruiDiv.hide(); // hide by default + + if (isLastInstr && myViz.executeCodeWithRawInputFunc) { + if (myViz.promptForUserInput) { + ruiDiv.show(); + } + } + +} // end of updateOutputFull + + +ExecutionVisualizer.prototype.updateOutputMini = function() { + assert(this.params.hideCode); + var curEntry = this.curTrace[this.curInstr]; + var curToplevelLayout = this.curTraceLayouts[this.curInstr]; + this.renderDataStructures(curEntry, curToplevelLayout); + + this.enterViewAnnotationsMode(); // ... and render optional annotations (if any exist) +} + + +ExecutionVisualizer.prototype.renderStep = function(step) { + assert(0 <= step); + assert(step < this.curTrace.length); + + // ignore redundant calls + if (this.curInstr == step) { + return; + } + + this.curInstr = step; + this.updateOutput(); +} + + +// Pre-compute the layout of top-level heap objects for ALL execution +// points as soon as a trace is first loaded. The reason why we want to +// do this is so that when the user steps through execution points, the +// heap objects don't "jiggle around" (i.e., preserving positional +// invariance). Also, if we set up the layout objects properly, then we +// can take full advantage of d3 to perform rendering and transitions. +ExecutionVisualizer.prototype.precomputeCurTraceLayouts = function() { + + // curTraceLayouts is a list of top-level heap layout "objects" with the + // same length as curTrace after it's been fully initialized. Each + // element of curTraceLayouts is computed from the contents of its + // immediate predecessor, thus ensuring that objects don't "jiggle + // around" between consecutive execution points. + // + // Each top-level heap layout "object" is itself a LIST of LISTS of + // object IDs, where each element of the outer list represents a row, + // and each element of the inner list represents columns within a + // particular row. Each row can have a different number of columns. Most + // rows have exactly ONE column (representing ONE object ID), but rows + // containing 1-D linked data structures have multiple columns. Each + // inner list element looks something like ['row1', 3, 2, 1] where the + // first element is a unique row ID tag, which is used as a key for d3 to + // preserve "object constancy" for updates, transitions, etc. The row ID + // is derived from the FIRST object ID inserted into the row. Since all + // object IDs are unique, all row IDs will also be unique. + + /* This is a good, simple example to test whether objects "jiggle" + + x = [1, [2, [3, None]]] + y = [4, [5, [6, None]]] + + x[1][1] = y[1] + + */ + this.curTraceLayouts = []; + this.curTraceLayouts.push([]); // pre-seed with an empty sentinel to simplify the code + + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + assert(this.curTrace.length > 0); + $.each(this.curTrace, function(i, curEntry) { + var prevLayout = myViz.curTraceLayouts[myViz.curTraceLayouts.length - 1]; + + // make a DEEP COPY of prevLayout to use as the basis for curLine + var curLayout = $.extend(true /* deep copy */ , [], prevLayout); + + // initialize with all IDs from curLayout + var idsToRemove = d3.map(); + $.each(curLayout, function(i, row) { + for (var j = 1 /* ignore row ID tag */; j < row.length; j++) { + idsToRemove.set(row[j], 1); + } + }); + + var idsAlreadyLaidOut = d3.map(); // to prevent infinite recursion + + function curLayoutIndexOf(id) { + for (var i = 0; i < curLayout.length; i++) { + var row = curLayout[i]; + var index = row.indexOf(id); + if (index > 0) { // index of 0 is impossible since it's the row ID tag + return {row: row, index: index} + } + } + return null; + } + + function isLinearObj(heapObj) { + var hook_result = myViz.try_hook("isLinearObj", {heapObj:heapObj}); + if (hook_result[0]) return hook_result[1]; + + return heapObj[0] == 'LIST' || heapObj[0] == 'TUPLE' || heapObj[0] == 'SET'; + } + + function recurseIntoObject(id, curRow, newRow) { + // heuristic for laying out 1-D linked data structures: check for enclosing elements that are + // structurally identical and then lay them out as siblings in the same "row" + var heapObj = curEntry.heap[id]; + assert(heapObj); + + if (isLinearObj(heapObj)) { + $.each(heapObj, function(ind, child) { + if (ind < 1) return; // skip type tag + + if (!myViz.isPrimitiveType(child)) { + var childID = getRefID(child); + + // comment this out to make "linked lists" that aren't + // structurally equivalent look good, e.g.,: + // x = (1, 2, (3, 4, 5, 6, (7, 8, 9, None))) + //if (myViz.structurallyEquivalent(heapObj, curEntry.heap[childID])) { + // updateCurLayout(childID, curRow, newRow); + //} + if (myViz.disableHeapNesting) { + updateCurLayout(childID, [], []); + } + else { + updateCurLayout(childID, curRow, newRow); + } + } + }); + } + else if (heapObj[0] == 'DICT') { + $.each(heapObj, function(ind, child) { + if (ind < 1) return; // skip type tag + + if (myViz.disableHeapNesting) { + var dictKey = child[0]; + if (!myViz.isPrimitiveType(dictKey)) { + var keyChildID = getRefID(dictKey); + updateCurLayout(keyChildID, [], []); + } + } + + var dictVal = child[1]; + if (!myViz.isPrimitiveType(dictVal)) { + var childID = getRefID(dictVal); + if (myViz.structurallyEquivalent(heapObj, curEntry.heap[childID])) { + updateCurLayout(childID, curRow, newRow); + } + else if (myViz.disableHeapNesting) { + updateCurLayout(childID, [], []); + } + } + }); + } + else if (heapObj[0] == 'INSTANCE' || heapObj[0] == 'CLASS') { + jQuery.each(heapObj, function(ind, child) { + var headerLength = (heapObj[0] == 'INSTANCE') ? 2 : 3; + if (ind < headerLength) return; + + if (myViz.disableHeapNesting) { + var instKey = child[0]; + if (!myViz.isPrimitiveType(instKey)) { + var keyChildID = getRefID(instKey); + updateCurLayout(keyChildID, [], []); + } + } + + var instVal = child[1]; + if (!myViz.isPrimitiveType(instVal)) { + var childID = getRefID(instVal); + if (myViz.structurallyEquivalent(heapObj, curEntry.heap[childID])) { + updateCurLayout(childID, curRow, newRow); + } + else if (myViz.disableHeapNesting) { + updateCurLayout(childID, [], []); + } + } + }); + } + } + + + // a krazy function! + // id - the new object ID to be inserted somewhere in curLayout + // (if it's not already in there) + // curRow - a row within curLayout where new linked list + // elements can be appended onto (might be null) + // newRow - a new row that might be spliced into curRow or appended + // as a new row in curLayout + function updateCurLayout(id, curRow, newRow) { + if (idsAlreadyLaidOut.has(id)) { + return; // PUNT! + } + + var curLayoutLoc = curLayoutIndexOf(id); + + var alreadyLaidOut = idsAlreadyLaidOut.has(id); + idsAlreadyLaidOut.set(id, 1); // unconditionally set now + + // if id is already in curLayout ... + if (curLayoutLoc) { + var foundRow = curLayoutLoc.row; + var foundIndex = curLayoutLoc.index; + + idsToRemove.remove(id); // this id is already accounted for! + + // very subtle ... if id hasn't already been handled in + // this iteration, then splice newRow into foundRow. otherwise + // (later) append newRow onto curLayout as a truly new row + if (!alreadyLaidOut) { + // splice the contents of newRow right BEFORE foundIndex. + // (Think about when you're trying to insert in id=3 into ['row1', 2, 1] + // to represent a linked list 3->2->1. You want to splice the 3 + // entry right before the 2 to form ['row1', 3, 2, 1]) + if (newRow.length > 1) { + var args = [foundIndex, 0]; + for (var i = 1; i < newRow.length; i++) { // ignore row ID tag + args.push(newRow[i]); + idsToRemove.remove(newRow[i]); + } + foundRow.splice.apply(foundRow, args); + + // remove ALL elements from newRow since they've all been accounted for + // (but don't reassign it away to an empty list, since the + // CALLER checks its value. TODO: how to get rid of this gross hack?!?) + newRow.splice(0, newRow.length); + } + } + + // recurse to find more top-level linked entries to append onto foundRow + recurseIntoObject(id, foundRow, []); + } + else { + // push id into newRow ... + if (newRow.length == 0) { + newRow.push('row' + id); // unique row ID (since IDs are unique) + } + newRow.push(id); + + // recurse to find more top-level linked entries ... + recurseIntoObject(id, curRow, newRow); + + + // if newRow hasn't been spliced into an existing row yet during + // a child recursive call ... + if (newRow.length > 0) { + if (curRow && curRow.length > 0) { + // append onto the END of curRow if it exists + for (var i = 1; i < newRow.length; i++) { // ignore row ID tag + curRow.push(newRow[i]); + } + } + else { + // otherwise push to curLayout as a new row + // + // TODO: this might not always look the best, since we might + // sometimes want to splice newRow in the MIDDLE of + // curLayout. Consider this example: + // + // x = [1,2,3] + // y = [4,5,6] + // x = [7,8,9] + // + // when the third line is executed, the arrows for x and y + // will be crossed (ugly!) since the new row for the [7,8,9] + // object is pushed to the end (bottom) of curLayout. The + // proper behavior is to push it to the beginning of + // curLayout where the old row for 'x' used to be. + curLayout.push($.extend(true /* make a deep copy */ , [], newRow)); + } + + // regardless, newRow is now accounted for, so clear it + for (var i = 1; i < newRow.length; i++) { // ignore row ID tag + idsToRemove.remove(newRow[i]); + } + newRow.splice(0, newRow.length); // kill it! + } + + } + } + + + // iterate through all globals and ordered stack frames and call updateCurLayout + $.each(curEntry.ordered_globals, function(i, varname) { + var val = curEntry.globals[varname]; + if (val !== undefined) { // might not be defined at this line, which is OKAY! + if (!myViz.isPrimitiveType(val)) { + var id = getRefID(val); + updateCurLayout(id, null, []); + } + } + }); + + $.each(curEntry.stack_to_render, function(i, frame) { + $.each(frame.ordered_varnames, function(xxx, varname) { + var val = frame.encoded_locals[varname]; + + if (!myViz.isPrimitiveType(val)) { + var id = getRefID(val); + updateCurLayout(id, null, []); + } + }); + }); + + + // iterate through remaining elements of idsToRemove and REMOVE them from curLayout + idsToRemove.forEach(function(id, xxx) { + id = Number(id); // keys are stored as strings, so convert!!! + $.each(curLayout, function(rownum, row) { + var ind = row.indexOf(id); + if (ind > 0) { // remember that index 0 of the row is the row ID tag + row.splice(ind, 1); + } + }); + }); + + // now remove empty rows (i.e., those with only a row ID tag) from curLayout + curLayout = curLayout.filter(function(row) {return row.length > 1}); + + myViz.curTraceLayouts.push(curLayout); + }); + + this.curTraceLayouts.splice(0, 1); // remove seeded empty sentinel element + assert (this.curTrace.length == this.curTraceLayouts.length); +} + + +var heapPtrSrcRE = /__heap_pointer_src_/; + + +var rightwardNudgeHack = true; // suggested by John DeNero, toggle with global + +// This is the main event here!!! +// +// The "4.0" version of renderDataStructures was refactored to be much +// less monolithic and more modular. It was made possible by first +// creating a suite of frontend JS regression tests so that I felt more +// comfortable mucking around with the super-brittle code in this +// function. This version was created in April 2014. For reference, +// before refactoring, this function was 1,030 lines of convoluted code! +// +// (Also added the rightward nudge hack to make tree-like structures +// look more sane without any sophisticated graph rendering code. Thanks +// to John DeNero for this suggestion all the way back in Fall 2012.) +// +// The "3.0" version of renderDataStructures renders variables in +// a stack, values in a separate heap, and draws line connectors +// to represent both stack->heap object references and, more importantly, +// heap->heap references. This version was created in August 2012. +// +// The "2.0" version of renderDataStructures renders variables in +// a stack and values in a separate heap, with data structure aliasing +// explicitly represented via line connectors (thanks to jsPlumb lib). +// This version was created in September 2011. +// +// The ORIGINAL "1.0" version of renderDataStructures +// was created in January 2010 and rendered variables and values +// INLINE within each stack frame without any explicit representation +// of data structure aliasing. That is, aliased objects were rendered +// multiple times, and a unique ID label was used to identify aliases. +ExecutionVisualizer.prototype.renderDataStructures = function(curEntry, curToplevelLayout) { + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + if (myViz.tabularView) { + return; // return EARLY!!! + } + + myViz.resetJsPlumbManager(); // very important!!! + + // for simplicity (but sacrificing some performance), delete all + // connectors and redraw them from scratch. doing so avoids mysterious + // jsPlumb connector alignment issues when the visualizer's enclosing + // div contains, say, a "position: relative;" CSS tag + // (which happens in the IPython Notebook) + var existingConnectionEndpointIDs = d3.map(); + myViz.jsPlumbInstance.select({scope: 'varValuePointer'}).each(function(c) { + // This is VERY crude, but to prevent multiple redundant HEAP->HEAP + // connectors from being drawn with the same source and origin, we need to first + // DELETE ALL existing HEAP->HEAP connections, and then re-render all of + // them in each call to this function. The reason why we can't safely + // hold onto them is because there's no way to guarantee that the + // *__heap_pointer_src_ IDs are consistent across execution points. + // + // thus, only add to existingConnectionEndpointIDs if this is NOT heap->heap + if (!c.sourceId.match(heapPtrSrcRE)) { + existingConnectionEndpointIDs.set(c.sourceId, c.targetId); + } + }); + + var existingParentPointerConnectionEndpointIDs = d3.map(); + myViz.jsPlumbInstance.select({scope: 'frameParentPointer'}).each(function(c) { + existingParentPointerConnectionEndpointIDs.set(c.sourceId, c.targetId); + }); + + + // Heap object rendering phase: + + // count everything in curToplevelLayout as already rendered since we will render them + // in d3 .each() statements + $.each(curToplevelLayout, function(xxx, row) { + for (var i = 0; i < row.length; i++) { + var objID = row[i]; + var heapObjID = myViz.generateHeapObjID(objID, myViz.curInstr); + myViz.jsPlumbManager.renderedHeapObjectIDs.set(heapObjID, 1); + } + }); + + + + // use d3 to render the heap by mapping curToplevelLayout into + // and '); + var headerTr = tbl.find('tr:first'); + var contentTr = tbl.find('tr:last'); + $.each(obj, function(ind, val) { + if (ind < 1) return; // skip type tag and ID entry + + // add a new column and then pass in that newly-added column + // as d3DomElement to the recursive call to child: + headerTr.append(''); + headerTr.find('td:last').append(ind - 1); + + contentTr.append(''); + myViz.renderNestedObject(val, stepNum, contentTr.find('td:last')); + }); + } + else if (obj[0] == 'SET') { + // create an R x C matrix: + var numElts = obj.length - 1; + + // gives roughly a 3x5 rectangular ratio, square is too, err, + // 'square' and boring + var numRows = Math.round(Math.sqrt(numElts)); + if (numRows > 3) { + numRows -= 1; + } + + var numCols = Math.round(numElts / numRows); + // round up if not a perfect multiple: + if (numElts % numRows) { + numCols += 1; + } + + jQuery.each(obj, function(ind, val) { + if (ind < 1) return; // skip 'SET' tag + + if (((ind - 1) % numCols) == 0) { + tbl.append(''); + } + + var curTr = tbl.find('tr:last'); + curTr.append(''); + myViz.renderNestedObject(val, stepNum, curTr.find('td:last')); + }); + } + else if (obj[0] == 'DICT') { + $.each(obj, function(ind, kvPair) { + if (ind < 1) return; // skip 'DICT' tag + + tbl.append(''); + var newRow = tbl.find('tr:last'); + var keyTd = newRow.find('td:first'); + var valTd = newRow.find('td:last'); + + var key = kvPair[0]; + var val = kvPair[1]; + + myViz.renderNestedObject(key, stepNum, keyTd); + myViz.renderNestedObject(val, stepNum, valTd); + }); + } + } + } + else if (obj[0] == 'INSTANCE' || obj[0] == 'CLASS') { + var isInstance = (obj[0] == 'INSTANCE'); + var headerLength = isInstance ? 2 : 3; + + assert(obj.length >= headerLength); + + if (isInstance) { + d3DomElement.append('
' + typeLabelPrefix + obj[1] + ' ' + myViz.getRealLabel('instance') + '
'); + } + else { + var superclassStr = ''; + if (obj[2].length > 0) { + superclassStr += ('[extends ' + obj[2].join(', ') + '] '); + } + d3DomElement.append('
' + typeLabelPrefix + obj[1] + ' class ' + superclassStr + + '
' + 'hide attributes' + '
'); + } + + // right now, let's NOT display class members, since that clutters + // up the display too much. in the future, consider displaying + // class members in a pop-up pane on mouseover or mouseclick + // actually nix what i just said above ... + //if (!isInstance) return; + + if (obj.length > headerLength) { + var lab = isInstance ? 'inst' : 'class'; + d3DomElement.append('
elements + + // for simplicity, CLEAR this entire div every time, which totally + // gets rid of the incremental benefits of using d3 for, say, + // transitions or efficient updates. but it provides more + // deterministic and predictable output for other functions. sigh, i'm + // not really using d3 to the fullest, but oh wells! + myViz.domRoot.find('#heap') + .empty() + .html('
Objects
'); + + + var heapRows = myViz.domRootD3.select('#heap') + .selectAll('table.heapRow') + .attr('id', function(d, i){ return 'heapRow' + i; }) // add unique ID + .data(curToplevelLayout, function(objLst) { + return objLst[0]; // return first element, which is the row ID tag + }); + + + // insert new heap rows + heapRows.enter().append('table') + //.each(function(objLst, i) {console.log('NEW ROW:', objLst, i);}) + .attr('id', function(d, i){ return 'heapRow' + i; }) // add unique ID + .attr('class', 'heapRow'); + + // delete a heap row + var hrExit = heapRows.exit(); + hrExit + .each(function(d, idx) { + //console.log('DEL ROW:', d, idx); + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + + // update an existing heap row + var toplevelHeapObjects = heapRows + //.each(function(objLst, i) { console.log('UPDATE ROW:', objLst, i); }) + .selectAll('td.toplevelHeapObject') + .data(function(d, i) {return d.slice(1, d.length);}, /* map over each row, skipping row ID tag */ + function(objID) {return objID;} /* each object ID is unique for constancy */); + + // insert a new toplevelHeapObject + var tlhEnter = toplevelHeapObjects.enter().append('td') + .attr('class', 'toplevelHeapObject') + .attr('id', function(d, i) {return 'toplevel_heap_object_' + d;}); + + // remember that the enter selection is added to the update + // selection so that we can process it later ... + + // update a toplevelHeapObject + toplevelHeapObjects + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .each(function(objID, i) { + //console.log('NEW/UPDATE ELT', objID); + + // TODO: add a smoother transition in the future + // Right now, just delete the old element and render a new one in its place + $(this).empty(); + myViz.renderCompoundObject(objID, myViz.curInstr, $(this), true); + }); + + // delete a toplevelHeapObject + var tlhExit = toplevelHeapObjects.exit(); + tlhExit + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + + // Render globals and then stack frames using d3: + + + // TODO: this sometimes seems buggy on Safari, so nix it for now: + function highlightAliasedConnectors(d, i) { + // if this row contains a stack pointer, then highlight its arrow and + // ALL aliases that also point to the same heap object + var stackPtrId = $(this).find('div.stack_pointer').attr('id'); + if (stackPtrId) { + var foundTargetId = null; + myViz.jsPlumbInstance.select({source: stackPtrId}).each(function(c) {foundTargetId = c.targetId;}); + + // use foundTargetId to highlight ALL ALIASES + myViz.jsPlumbInstance.select().each(function(c) { + if (c.targetId == foundTargetId) { + c.setHover(true); + $(c.canvas).css("z-index", 2000); // ... and move it to the VERY FRONT + } + else { + c.setHover(false); + } + }); + } + } + + function unhighlightAllConnectors(d, i) { + myViz.jsPlumbInstance.select().each(function(c) { + c.setHover(false); + }); + } + + + + // TODO: coalesce code for rendering globals and stack frames, + // since there's so much copy-and-paste grossness right now + + // render all global variables IN THE ORDER they were created by the program, + // in order to ensure continuity: + + // Derive a list where each element contains varname + // as long as value is NOT undefined. + // (Sometimes entries in curEntry.ordered_globals are undefined, + // so filter those out.) + var realGlobalsLst = []; + $.each(curEntry.ordered_globals, function(i, varname) { + var val = curEntry.globals[varname]; + + // (use '!==' to do an EXACT match against undefined) + if (val !== undefined) { // might not be defined at this line, which is OKAY! + realGlobalsLst.push(varname); + } + }); + + var globalsID = myViz.generateID('globals'); + var globalTblID = myViz.generateID('global_table'); + + var globalVarTable = myViz.domRootD3.select('#' + globalTblID) + .selectAll('tr') + .data(realGlobalsLst, + function(d) {return d;} // use variable name as key + ); + + globalVarTable + .enter() + .append('tr') + .attr('class', 'variableTr') + .attr('id', function(d, i) { + return myViz.generateID(varnameToCssID('global__' + d + '_tr')); // make globally unique (within the page) + }); + + + var globalVarTableCells = globalVarTable + .selectAll('td.stackFrameVar,td.stackFrameValue') + .data(function(d, i){return [d, d];}) /* map varname down both columns */ + + globalVarTableCells.enter() + .append('td') + .attr('class', function(d, i) {return (i == 0) ? 'stackFrameVar' : 'stackFrameValue';}); + + // remember that the enter selection is added to the update + // selection so that we can process it later ... + + // UPDATE + globalVarTableCells + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .each(function(varname, i) { + if (i == 0) { + $(this).html(varname); + } + else { + // always delete and re-render the global var ... + // NB: trying to cache and compare the old value using, + // say -- $(this).attr('data-curvalue', valStringRepr) -- leads to + // a mysterious and killer memory leak that I can't figure out yet + $(this).empty(); + + // make sure varname doesn't contain any weird + // characters that are illegal for CSS ID's ... + var varDivID = myViz.generateID('global__' + varnameToCssID(varname)); + + // need to get rid of the old connector in preparation for rendering a new one: + existingConnectionEndpointIDs.remove(varDivID); + + var val = curEntry.globals[varname]; + if (myViz.isPrimitiveType(val)) { + myViz.renderPrimitiveObject(val, $(this)); + } + else { + var heapObjID = myViz.generateHeapObjID(getRefID(val), myViz.curInstr); + + if (myViz.textualMemoryLabels) { + var labelID = varDivID + '_text_label'; + $(this).append('
id' + getRefID(val) + '
'); + $(this).find('div#' + labelID).hover( + function() { + myViz.jsPlumbInstance.connect({source: labelID, target: heapObjID, + scope: 'varValuePointer'}); + }, + function() { + myViz.jsPlumbInstance.select({source: labelID}).detach(); + }); + } + else { + // add a stub so that we can connect it with a connector later. + // IE needs this div to be NON-EMPTY in order to properly + // render jsPlumb endpoints, so that's why we add an " "! + $(this).append('
 
'); + + assert(!myViz.jsPlumbManager.connectionEndpointIDs.has(varDivID)); + myViz.jsPlumbManager.connectionEndpointIDs.set(varDivID, heapObjID); + //console.log('STACK->HEAP', varDivID, heapObjID); + } + } + } + }); + + + + globalVarTableCells.exit() + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + globalVarTable.exit() + .each(function(d, i) { + // detach all stack_pointer connectors for divs that are being removed + $(this).find('.stack_pointer').each(function(i, sp) { + existingConnectionEndpointIDs.remove($(sp).attr('id')); + }); + + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + + // for aesthetics, hide globals if there aren't any globals to display + if (curEntry.ordered_globals.length == 0) { + this.domRoot.find('#' + globalsID).hide(); + } + else { + this.domRoot.find('#' + globalsID).show(); + } + + + // holy cow, the d3 code for stack rendering is ABSOLUTELY NUTS! + + var stackDiv = myViz.domRootD3.select('#stack'); + + // VERY IMPORTANT for selectAll selector to be SUPER specific here! + var stackFrameDiv = stackDiv.selectAll('div.stackFrame,div.zombieStackFrame') + .data(curEntry.stack_to_render, function(frame) { + // VERY VERY VERY IMPORTANT for properly handling closures and nested functions + // (see the backend code for more details) + return frame.unique_hash; + }); + + var sfdEnter = stackFrameDiv.enter() + .append('div') + .attr('class', function(d, i) {return d.is_zombie ? 'zombieStackFrame' : 'stackFrame';}) + .attr('id', function(d, i) {return d.is_zombie ? myViz.generateID("zombie_stack" + i) + : myViz.generateID("stack" + i); + }) + // HTML5 custom data attributes + .attr('data-frame_id', function(frame, i) {return frame.frame_id;}) + .attr('data-parent_frame_id', function(frame, i) { + return (frame.parent_frame_id_list.length > 0) ? frame.parent_frame_id_list[0] : null; + }) + .each(function(frame, i) { + if (!myViz.drawParentPointers) { + return; + } + // only run if myViz.drawParentPointers is true ... + + var my_CSS_id = $(this).attr('id'); + + //console.log(my_CSS_id, 'ENTER'); + + // render a parent pointer whose SOURCE node is this frame + // i.e., connect this frame to p, where this.parent_frame_id == p.frame_id + // (if this.parent_frame_id is null, then p is the global frame) + if (frame.parent_frame_id_list.length > 0) { + var parent_frame_id = frame.parent_frame_id_list[0]; + // tricky turkey! + // ok this hack just HAPPENS to work by luck ... usually there will only be ONE frame + // that matches this selector, but sometimes multiple frames match, in which case the + // FINAL frame wins out (since parentPointerConnectionEndpointIDs is a map where each + // key can be mapped to only ONE value). it so happens that the final frame winning + // out looks "desirable" for some of the closure test cases that I've tried. but + // this code is quite brittle :( + myViz.domRoot.find('div#stack [data-frame_id=' + parent_frame_id + ']').each(function(i, e) { + var parent_CSS_id = $(this).attr('id'); + //console.log('connect', my_CSS_id, parent_CSS_id); + myViz.jsPlumbManager.parentPointerConnectionEndpointIDs.set(my_CSS_id, parent_CSS_id); + }); + } + else { + // render a parent pointer to the global frame + //console.log('connect', my_CSS_id, globalsID); + // only do this if there are actually some global variables to display ... + if (curEntry.ordered_globals.length > 0) { + myViz.jsPlumbManager.parentPointerConnectionEndpointIDs.set(my_CSS_id, globalsID); + } + } + + // tricky turkey: render parent pointers whose TARGET node is this frame. + // i.e., for all frames f such that f.parent_frame_id == my_frame_id, + // connect f to this frame. + // (make sure not to confuse frame IDs with CSS IDs!!!) + var my_frame_id = frame.frame_id; + myViz.domRoot.find('div#stack [data-parent_frame_id=' + my_frame_id + ']').each(function(i, e) { + var child_CSS_id = $(this).attr('id'); + //console.log('connect', child_CSS_id, my_CSS_id); + myViz.jsPlumbManager.parentPointerConnectionEndpointIDs.set(child_CSS_id, my_CSS_id); + }); + }); + + sfdEnter + .append('div') + .attr('class', 'stackFrameHeader') + .html(function(frame, i) { + + // pretty-print lambdas and display other weird characters + // (might contain '<' or '>' for weird names like ) + var funcName = htmlspecialchars(frame.func_name).replace('<lambda>', '\u03bb') + .replace('\n', '
'); + + var headerLabel = funcName; + + // only display if you're someone's parent (unless showAllFrameLabels) + if (frame.is_parent || myViz.showAllFrameLabels) { + headerLabel = 'f' + frame.frame_id + ': ' + headerLabel; + } + + // optional (btw, this isn't a CSS id) + if (frame.parent_frame_id_list.length > 0) { + var parentFrameID = frame.parent_frame_id_list[0]; + headerLabel = headerLabel + ' [parent=f' + parentFrameID + ']'; + } + else if (myViz.showAllFrameLabels) { + headerLabel = headerLabel + ' [parent=Global]'; + } + + return headerLabel; + }); + + sfdEnter + .append('table') + .attr('class', 'stackFrameVarTable'); + + + var stackVarTable = stackFrameDiv + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .select('table').selectAll('tr') + .data(function(frame) { + // each list element contains a reference to the entire frame + // object as well as the variable name + // TODO: look into whether we can use d3 parent nodes to avoid + // this hack ... http://bost.ocks.org/mike/nest/ + return frame.ordered_varnames.map(function(varname) {return {varname:varname, frame:frame};}); + }, + function(d) {return d.varname;} // use variable name as key + ); + + stackVarTable + .enter() + .append('tr') + .attr('class', 'variableTr') + .attr('id', function(d, i) { + return myViz.generateID(varnameToCssID(d.frame.unique_hash + '__' + d.varname + '_tr')); // make globally unique (within the page) + }); + + + var stackVarTableCells = stackVarTable + .selectAll('td.stackFrameVar,td.stackFrameValue') + .data(function(d, i) {return [d, d] /* map identical data down both columns */;}); + + stackVarTableCells.enter() + .append('td') + .attr('class', function(d, i) {return (i == 0) ? 'stackFrameVar' : 'stackFrameValue';}); + + stackVarTableCells + .order() // VERY IMPORTANT to put in the order corresponding to data elements + .each(function(d, i) { + var varname = d.varname; + var frame = d.frame; + + if (i == 0) { + if (varname == '__return__') + $(this).html('Return
value
'); + else + $(this).html(varname); + } + else { + // always delete and re-render the stack var ... + // NB: trying to cache and compare the old value using, + // say -- $(this).attr('data-curvalue', valStringRepr) -- leads to + // a mysterious and killer memory leak that I can't figure out yet + $(this).empty(); + + // make sure varname and frame.unique_hash don't contain any weird + // characters that are illegal for CSS ID's ... + var varDivID = myViz.generateID(varnameToCssID(frame.unique_hash + '__' + varname)); + + // need to get rid of the old connector in preparation for rendering a new one: + existingConnectionEndpointIDs.remove(varDivID); + + var val = frame.encoded_locals[varname]; + if (myViz.isPrimitiveType(val)) { + myViz.renderPrimitiveObject(val, $(this)); + } + else { + var heapObjID = myViz.generateHeapObjID(getRefID(val), myViz.curInstr); + if (myViz.textualMemoryLabels) { + var labelID = varDivID + '_text_label'; + $(this).append('
id' + getRefID(val) + '
'); + $(this).find('div#' + labelID).hover( + function() { + myViz.jsPlumbInstance.connect({source: labelID, target: heapObjID, + scope: 'varValuePointer'}); + }, + function() { + myViz.jsPlumbInstance.select({source: labelID}).detach(); + }); + } + else { + // add a stub so that we can connect it with a connector later. + // IE needs this div to be NON-EMPTY in order to properly + // render jsPlumb endpoints, so that's why we add an " "! + $(this).append('
 
'); + + assert(!myViz.jsPlumbManager.connectionEndpointIDs.has(varDivID)); + myViz.jsPlumbManager.connectionEndpointIDs.set(varDivID, heapObjID); + //console.log('STACK->HEAP', varDivID, heapObjID); + } + } + } + }); + + + stackVarTableCells.exit() + .each(function(d, idx) { + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + stackVarTable.exit() + .each(function(d, i) { + $(this).find('.stack_pointer').each(function(i, sp) { + // detach all stack_pointer connectors for divs that are being removed + existingConnectionEndpointIDs.remove($(sp).attr('id')); + }); + + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + stackFrameDiv.exit() + .each(function(frame, i) { + $(this).find('.stack_pointer').each(function(i, sp) { + // detach all stack_pointer connectors for divs that are being removed + existingConnectionEndpointIDs.remove($(sp).attr('id')); + }); + + var my_CSS_id = $(this).attr('id'); + + //console.log(my_CSS_id, 'EXIT'); + + // Remove all pointers where either the source or destination end is my_CSS_id + existingParentPointerConnectionEndpointIDs.forEach(function(k, v) { + if (k == my_CSS_id || v == my_CSS_id) { + //console.log('remove EPP', k, v); + existingParentPointerConnectionEndpointIDs.remove(k); + } + }); + + $(this).empty(); // crucial for garbage collecting jsPlumb connectors! + }) + .remove(); + + + // Rightward nudge hack to make tree-like structures look more sane + // without any sophisticated graph rendering code. Thanks to John + // DeNero for this suggestion in Fall 2012. + // + // This hack tries to ensure that all pointers that span different + // rows point RIGHTWARD (as much as possible), which makes tree-like + // structures look decent. e.g.,: + // + // t = [[['a', 'b'], ['c', 'd']], [[1,2], [3,4]]] + // + // Do it here since all of the divs have been rendered by now, but no + // jsPlumb arrows have been rendered yet. + if (rightwardNudgeHack) { + // Basic idea: keep a set of all nudged ROWS for each nudger row, so + // that when you get nudged, you can, in turn, nudge all of the rows + // that you've nudged. this algorithm nicely takes care of the fact + // that there might not be cycles in objects that you've nudged, but + // there are cycles in entire rows. + // + // Key: ID of .heapRow object that did the nudging + // Value: set of .heapRow ID that were (transitively) nudged by this element + // (represented as a d3.map) + var nudger_to_nudged_rows = {}; + + // VERY IMPORTANT to sort these connector IDs in ascending order, + // since I think they're rendered left-to-right, top-to-bottom in ID + // order, so we want to run the nudging algorithm in that same order. + var srcHeapConnectorIDs = myViz.jsPlumbManager.heapConnectionEndpointIDs.keys(); + srcHeapConnectorIDs.sort(); + + $.each(srcHeapConnectorIDs, function(i, srcID) { + var dstID = myViz.jsPlumbManager.heapConnectionEndpointIDs.get(srcID); + + var srcAnchorObject = myViz.domRoot.find('#' + srcID); + var srcHeapObject = srcAnchorObject.closest('.heapObject'); + var dstHeapObject = myViz.domRoot.find('#' + dstID); + assert(dstHeapObject.attr('class') == 'heapObject'); + + var srcHeapRow = srcHeapObject.closest('.heapRow'); + var dstHeapRow = dstHeapObject.closest('.heapRow'); + + var srcRowID = srcHeapRow.attr('id'); + var dstRowID = dstHeapRow.attr('id'); + + // only consider nudging if srcID and dstID are on different rows + if (srcRowID != dstRowID) { + var srcAnchorLeft = srcAnchorObject.offset().left; + var srcHeapObjectLeft = srcHeapObject.offset().left; + var dstHeapObjectLeft = dstHeapObject.offset().left; + + // if srcAnchorObject is to the RIGHT of dstHeapObject, then nudge + // dstHeapObject to the right + if (srcAnchorLeft > dstHeapObjectLeft) { + // an extra nudge of 32px matches up pretty well with the + // current CSS padding around .toplevelHeapObject + var delta = (srcAnchorLeft - dstHeapObjectLeft) + 32; + + // set margin rather than padding so that arrows tips still end + // at the left edge of the element. + // whoa, set relative CSS using +=, nice! + dstHeapObject.css('margin-left', '+=' + delta); + + //console.log(srcRowID, 'nudged', dstRowID, 'by', delta); + + var cur_nudgee_set = nudger_to_nudged_rows[srcRowID]; + if (cur_nudgee_set === undefined) { + cur_nudgee_set = d3.map(); + nudger_to_nudged_rows[srcRowID] = cur_nudgee_set; + } + cur_nudgee_set.set(dstRowID, 1 /* useless value */); + + // now if dstRowID itself nudged some other nodes, then nudge + // all of its nudgees by delta as well + var dst_nudgee_set = nudger_to_nudged_rows[dstRowID]; + if (dst_nudgee_set) { + dst_nudgee_set.forEach(function(k, v) { + // don't nudge if it's yourself, to make cycles look + // somewhat reasonable (although still not ideal). e.g.,: + // x = [1,2] + // y = [3,x] + // x[1] = y + if (k != srcRowID) { + // nudge this entire ROW by delta as well + myViz.domRoot.find('#' + k).css('margin-left', '+=' + delta); + + // then transitively add to entry for srcRowID + cur_nudgee_set.set(k, 1 /* useless value */); + } + }); + } + } + } + }); + } + + + // NB: ugh, I'm not very happy about this hack, but it seems necessary + // for embedding within sophisticated webpages such as IPython Notebook + + // delete all connectors. do this AS LATE AS POSSIBLE so that + // (presumably) the calls to $(this).empty() earlier in this function + // will properly garbage collect the connectors + // + // WARNING: for environment parent pointers, garbage collection doesn't seem to + // be working as intended :( + // + // I suspect that this is due to the fact that parent pointers are SIBLINGS + // of stackFrame divs and not children, so when stackFrame divs get destroyed, + // their associated parent pointers do NOT.) + myViz.jsPlumbInstance.reset(); + + + // use jsPlumb scopes to keep the different kinds of pointers separated + function renderVarValueConnector(varID, valueID) { + myViz.jsPlumbInstance.connect({source: varID, target: valueID, scope: 'varValuePointer'}); + } + + + var totalParentPointersRendered = 0; + + function renderParentPointerConnector(srcID, dstID) { + // SUPER-DUPER-ugly hack since I can't figure out a cleaner solution for now: + // if either srcID or dstID no longer exists, then SKIP rendering ... + if ((myViz.domRoot.find('#' + srcID).length == 0) || + (myViz.domRoot.find('#' + dstID).length == 0)) { + return; + } + + //console.log('renderParentPointerConnector:', srcID, dstID); + + myViz.jsPlumbInstance.connect({source: srcID, target: dstID, + anchors: ["LeftMiddle", "LeftMiddle"], + + // 'horizontally offset' the parent pointers up so that they don't look as ugly ... + //connector: ["Flowchart", { stub: 9 + (6 * (totalParentPointersRendered + 1)) }], + + // actually let's try a bezier curve ... + connector: [ "Bezier", { curviness: 45 }], + + endpoint: ["Dot", {radius: 4}], + //hoverPaintStyle: {lineWidth: 1, strokeStyle: connectorInactiveColor}, // no hover colors + scope: 'frameParentPointer'}); + totalParentPointersRendered++; + } + + if (!myViz.textualMemoryLabels) { + // re-render existing connectors and then ... + existingConnectionEndpointIDs.forEach(renderVarValueConnector); + // add all the NEW connectors that have arisen in this call to renderDataStructures + myViz.jsPlumbManager.connectionEndpointIDs.forEach(renderVarValueConnector); + } + // do the same for environment parent pointers + if (myViz.drawParentPointers) { + existingParentPointerConnectionEndpointIDs.forEach(renderParentPointerConnector); + myViz.jsPlumbManager.parentPointerConnectionEndpointIDs.forEach(renderParentPointerConnector); + } + + /* + myViz.jsPlumbInstance.select().each(function(c) { + console.log('CONN:', c.sourceId, c.targetId); + }); + */ + //console.log('---', myViz.jsPlumbInstance.select().length, '---'); + + + function highlight_frame(frameID) { + myViz.jsPlumbInstance.select().each(function(c) { + // find the enclosing .stackFrame ... + var stackFrameDiv = c.source.closest('.stackFrame'); + + // if this connector starts in the selected stack frame ... + if (stackFrameDiv.attr('id') == frameID) { + // then HIGHLIGHT IT! + c.setPaintStyle({lineWidth:1, strokeStyle: connectorBaseColor}); + c.endpoints[0].setPaintStyle({fillStyle: connectorBaseColor}); + //c.endpoints[1].setVisible(false, true, true); // JUST set right endpoint to be invisible + + $(c.canvas).css("z-index", 1000); // ... and move it to the VERY FRONT + } + // for heap->heap connectors + else if (myViz.jsPlumbManager.heapConnectionEndpointIDs.has(c.endpoints[0].elementId)) { + // NOP since it's already the color and style we set by default + } + else { + // else unhighlight it + c.setPaintStyle({lineWidth:1, strokeStyle: connectorInactiveColor}); + c.endpoints[0].setPaintStyle({fillStyle: connectorInactiveColor}); + //c.endpoints[1].setVisible(false, true, true); // JUST set right endpoint to be invisible + + $(c.canvas).css("z-index", 0); + } + }); + + + // clear everything, then just activate this one ... + myViz.domRoot.find(".stackFrame").removeClass("highlightedStackFrame"); + myViz.domRoot.find('#' + frameID).addClass("highlightedStackFrame"); + } + + + // highlight the top-most non-zombie stack frame or, if not available, globals + var frame_already_highlighted = false; + $.each(curEntry.stack_to_render, function(i, e) { + if (e.is_highlighted) { + highlight_frame(myViz.generateID('stack' + i)); + frame_already_highlighted = true; + } + }); + + if (!frame_already_highlighted) { + highlight_frame(myViz.generateID('globals')); + } + + myViz.try_hook("end_renderDataStructures", {myViz:myViz}); +} + + +// render a tabular visualization where each row is an execution step, +// and each column is a variable +ExecutionVisualizer.prototype.renderTabularView = function() { + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + myViz.resetJsPlumbManager(); // very important!!! + + var allGlobalVars = []; + // Key: function name + // Value: list of ordered variables for function + var funcNameToOrderedVars = {}; + var orderedFuncNames = []; // function names in order of appearance + + // iterate through the entire trace and find all global variables, and + // all local variables in all functions, in order of appearance in the trace + $.each(myViz.curTrace, function(i, elt) { + $.each(elt.ordered_globals, function(i, g) { + // don't add duplicates into this list, + // but need to use a list to maintain ORDERING + if ($.inArray(g, allGlobalVars) === -1) { + allGlobalVars.push(g); + } + }); + + $.each(elt.stack_to_render, function(i, sf) { + var funcVarsList = funcNameToOrderedVars[sf.func_name]; + if (funcVarsList === undefined) { + funcVarsList = []; + funcNameToOrderedVars[sf.func_name] = funcVarsList; + orderedFuncNames.push(sf.func_name); + } + $.each(sf.ordered_varnames, function(i, v) { + // don't add duplicates into this list, + // but need to use a list to maintain ORDERING + // (ignore the special __return__ value) + if ($.inArray(v, funcVarsList) === -1 && v !== '__return__') { + funcVarsList.push(v); + } + }); + }); + }); + + /* + console.log("allGlobalVars:", allGlobalVars); + console.log("orderedFuncNames:", orderedFuncNames); + $.each(funcNameToOrderedVars, function(k, v) { + console.log("funcNameToOrderedVars[", k, "] =", v); + }); + */ + + var allVarNames = ['Step']; + + $.each(allGlobalVars, function(i, e) { + allVarNames.push(e); + }); + $.each(orderedFuncNames, function(i, funcName) { + $.each(funcNameToOrderedVars[funcName], function(i, v) { + allVarNames.push(funcName + ':' + v); + }); + }); + + // get the values of all objects in trace entry e + function getAllOrderedValues(curEntry) { + // HACK! start with a blank sentinel since the first column of the + // table is the step number + var allVarValues = ['']; + + $.each(allGlobalVars, function(i, e) { + allVarValues.push(curEntry.globals[e]); + }); + + // for local variables, grab only the values in the highlighted + // frame (if any) + var highlightedFrame = null; + $.each(curEntry.stack_to_render, function(i, sf) { + if (sf.is_highlighted) { + highlightedFrame = sf; + } + }); + + $.each(orderedFuncNames, function(i, funcName) { + $.each(funcNameToOrderedVars[funcName], function(i, v) { + var found = false; + if (highlightedFrame && funcName == highlightedFrame.func_name) { + var obj = highlightedFrame.encoded_locals[v]; + if (obj) { + allVarValues.push(obj); + found = true; + } + } + + // push an empty value if not found since we want everything to + // align with allVarNames + if (!found) { + allVarValues.push(undefined); + } + }); + }); + + // TODO: also walk up parent pointers to also display variable + // values in enclosing frames + + return allVarValues; + } + + + var tblRoot = myViz.domRootD3.select("#optTabularView"); + var tbl = tblRoot.append("table"); + tbl.attr('id', 'optTable'); + + var tHead = tbl.append('thead').attr('class', 'stepTableThead').append('tr'); + tHead.attr('class', 'stepTableTr'); + tHead.selectAll('thead td') + .data(allVarNames) + .enter() + .append('td') + .attr('class', 'stepTableTd') + .html(function(d) { return d; }) + + var tBody = tbl.append('tbody'); + tBody.attr('class', 'stepTableTbody'); + + var stepsAndTraceEntries = []; + $.each(myViz.curTrace, function(i, e) { + stepsAndTraceEntries.push([i, e]); + }); + + var tr = tBody.selectAll('tbody tr') + .data(stepsAndTraceEntries) + .enter() + .append("tr") + .attr("step", function(d, i) { return i; }) + .attr("class", 'stepTableTr'); + + var td = tr.selectAll("td") + .data(function(e) { return getAllOrderedValues(e[1]); }) + .enter() + .append("td") + .attr('class', 'stepTableTd') + .each(function(obj, i) { + $(this).empty(); + + // TODO: fixme -- this is super kludgy; must be a better way + var step = parseInt($(this).closest('tr').attr('step')); + + if (i == 0) { + $(this).html(step + 1); // one-indexed for readability + } + else { + if (obj === undefined) { + // keep this table cell EMPTY + } + else { + myViz.renderNestedObject(obj, step, $(this), 'tabular'); + } + } + }); + + + myViz.jsPlumbInstance.reset(); + + function renderTableVarValueConnector(varID, valueID) { + myViz.jsPlumbInstance.connect({source: varID, target: valueID, + scope: 'varValuePointer', + // make it look more aesthetically pleasing: + anchors: ['TopCenter', 'LeftMiddle']}); + } + + myViz.jsPlumbManager.connectionEndpointIDs.forEach(renderTableVarValueConnector); +} + + +// rendering functions, which all take a d3 dom element to anchor the +// new element to render +ExecutionVisualizer.prototype.renderPrimitiveObject = function(obj, d3DomElement) { + if (this.try_hook("renderPrimitiveObject", {obj:obj, d3DomElement:d3DomElement})[0]) + return; + + var typ = typeof obj; + + if (obj == null) { + d3DomElement.append('' + this.getRealLabel('None') + ''); + } + else if (typ == "number") { + d3DomElement.append('' + obj + ''); + } + else if (typ == "boolean") { + if (obj) { + d3DomElement.append('' + this.getRealLabel('True') + ''); + } + else { + d3DomElement.append('' + this.getRealLabel('False') + ''); + } + } + else if (typ == "string") { + // escape using htmlspecialchars to prevent HTML/script injection + var literalStr = htmlspecialchars(obj); + + // print as a double-quoted string literal + // with explicit newlines as
+ literalStr = literalStr.replace(new RegExp('\n', 'g'), '
'); // replace ALL + literalStr = literalStr.replace(new RegExp('\"', 'g'), '\\"'); // replace ALL + literalStr = '"' + literalStr + '"'; + + d3DomElement.append('' + literalStr + ''); + } + else if (typ == "object") { + assert(obj[0] == 'SPECIAL_FLOAT' || obj[0] == 'JS_SPECIAL_VAL'); + d3DomElement.append('' + obj[1] + ''); + } + else { + assert(false); + } +} + + +ExecutionVisualizer.prototype.renderNestedObject = function(obj, stepNum, d3DomElement) { + if (this.isPrimitiveType(obj)) { + this.renderPrimitiveObject(obj, d3DomElement); + } + else { + // obj is a ["REF", ] so dereference the 'pointer' to render that object + this.renderCompoundObject(getRefID(obj), stepNum, d3DomElement, false); + } +} + + +ExecutionVisualizer.prototype.renderCompoundObject = +function(objID, stepNum, d3DomElement, isTopLevel) { + var myViz = this; // to prevent confusion of 'this' inside of nested functions + + var heapObjID = myViz.generateHeapObjID(objID, stepNum); + + if (!isTopLevel && myViz.jsPlumbManager.renderedHeapObjectIDs.has(heapObjID)) { + var srcDivID = myViz.generateID('heap_pointer_src_' + myViz.jsPlumbManager.heap_pointer_src_id); + myViz.jsPlumbManager.heap_pointer_src_id++; // just make sure each source has a UNIQUE ID + + var dstDivID = heapObjID; + + if (myViz.textualMemoryLabels) { + var labelID = srcDivID + '_text_label'; + d3DomElement.append('
id' + objID + '
'); + + myViz.domRoot.find('div#' + labelID).hover( + function() { + myViz.jsPlumbInstance.connect({source: labelID, target: dstDivID, + scope: 'varValuePointer'}); + }, + function() { + myViz.jsPlumbInstance.select({source: labelID}).detach(); + }); + } + else { + // render jsPlumb arrow source since this heap object has already been rendered + // (or will be rendered soon) + + // add a stub so that we can connect it with a connector later. + // IE needs this div to be NON-EMPTY in order to properly + // render jsPlumb endpoints, so that's why we add an " "! + d3DomElement.append('
 
'); + + assert(!myViz.jsPlumbManager.connectionEndpointIDs.has(srcDivID)); + myViz.jsPlumbManager.connectionEndpointIDs.set(srcDivID, dstDivID); + //console.log('HEAP->HEAP', srcDivID, dstDivID); + + assert(!myViz.jsPlumbManager.heapConnectionEndpointIDs.has(srcDivID)); + myViz.jsPlumbManager.heapConnectionEndpointIDs.set(srcDivID, dstDivID); + } + + return; // early return! + } + + + // wrap ALL compound objects in a heapObject div so that jsPlumb + // connectors can point to it: + d3DomElement.append('
'); + d3DomElement = myViz.domRoot.find('#' + heapObjID); // TODO: maybe inefficient + + myViz.jsPlumbManager.renderedHeapObjectIDs.set(heapObjID, 1); + + var curHeap = myViz.curTrace[stepNum].heap; + var obj = curHeap[objID]; + assert($.isArray(obj)); + + // prepend the type label with a memory address label + var typeLabelPrefix = ''; + if (myViz.textualMemoryLabels) { + typeLabelPrefix = 'id' + objID + ':'; + } + + var hook_result = myViz.try_hook("renderCompoundObject", + {objID:objID, d3DomElement:d3DomElement, + isTopLevel:isTopLevel, obj:obj, + typeLabelPrefix:typeLabelPrefix, + stepNum:stepNum, + myViz:myViz}); + if (hook_result[0]) return; + + if (obj[0] == 'LIST' || obj[0] == 'TUPLE' || obj[0] == 'SET' || obj[0] == 'DICT') { + var label = obj[0].toLowerCase(); + + assert(obj.length >= 1); + if (obj.length == 1) { + d3DomElement.append('
' + typeLabelPrefix + ' empty ' + myViz.getRealLabel(label) + '
'); + } + else { + d3DomElement.append('
' + typeLabelPrefix + myViz.getRealLabel(label) + '
'); + d3DomElement.append('
'); + var tbl = d3DomElement.children('table'); + + if (obj[0] == 'LIST' || obj[0] == 'TUPLE') { + tbl.append('
'); + + var tbl = d3DomElement.children('table'); + + $.each(obj, function(ind, kvPair) { + if (ind < headerLength) return; // skip header tags + + tbl.append(''); + + var newRow = tbl.find('tr:last'); + var keyTd = newRow.find('td:first'); + var valTd = newRow.find('td:last'); + + // the keys should always be strings, so render them directly (and without quotes): + // (actually this isn't the case when strings are rendered on the heap) + if (typeof kvPair[0] == "string") { + // common case ... + var attrnameStr = htmlspecialchars(kvPair[0]); + keyTd.append('' + attrnameStr + ''); + } + else { + // when strings are rendered as heap objects ... + myViz.renderNestedObject(kvPair[0], stepNum, keyTd); + } + + // values can be arbitrary objects, so recurse: + myViz.renderNestedObject(kvPair[1], stepNum, valTd); + }); + } + + // class attributes can be displayed or hidden, so as not to + // CLUTTER UP the display with a ton of attributes, especially + // from imported modules and custom types created from, say, + // collections.namedtuple + if (!isInstance) { + // super kludgy! use a global selector $ to get at the DOM + // element, which should be okay since IDs should be globally + // unique on a page, even with multiple ExecutionVisualizer + // instances ... but still feels dirty to me since it violates + // my "no using naked $(__) selectors for jQuery" convention :/ + $(d3DomElement.selector + ' .typeLabel #attrToggleLink').click(function() { + var elt = $(d3DomElement.selector + ' .classTbl'); + elt.toggle(); + $(this).html((elt.is(':visible') ? 'hide' : 'show') + ' attributes'); + + if (elt.is(':visible')) { + myViz.classAttrsHidden[d3DomElement.selector] = false; + $(this).html('hide attributes'); + } + else { + myViz.classAttrsHidden[d3DomElement.selector] = true; + $(this).html('show attributes'); + } + + myViz.redrawConnectors(); // redraw all arrows! + + return false; // so that the doesn't reload the page + }); + + // "remember" whether this was hidden earlier during this + // visualization session + if (myViz.classAttrsHidden[d3DomElement.selector]) { + $(d3DomElement.selector + ' .classTbl').hide(); + $(d3DomElement.selector + ' .typeLabel #attrToggleLink').html('show attributes'); + } + } + } + else if (obj[0] == 'INSTANCE_PPRINT') { + d3DomElement.append('
' + typeLabelPrefix + obj[1] + ' instance
'); + + strRepr = htmlspecialchars(obj[2]); // escape strings! + d3DomElement.append('
' + strRepr + '
'); + } + else if (obj[0] == 'FUNCTION') { + assert(obj.length == 3); + + // pretty-print lambdas and display other weird characters: + var funcName = htmlspecialchars(obj[1]).replace('<lambda>', '\u03bb'); + var parentFrameID = obj[2]; // optional + + if (!myViz.compactFuncLabels) { + d3DomElement.append('
' + typeLabelPrefix + myViz.getRealLabel('function') + '
'); + } + + var funcPrefix = myViz.compactFuncLabels ? 'func' : ''; + + if (parentFrameID) { + d3DomElement.append('
' + funcPrefix + ' ' + funcName + ' [parent=f'+ parentFrameID + ']
'); + } + else if (myViz.showAllFrameLabels) { + d3DomElement.append('
' + funcPrefix + ' ' + funcName + ' [parent=Global]
'); + } + else { + d3DomElement.append('
' + funcPrefix + ' ' + funcName + '
'); + } + } + else if (obj[0] == 'JS_FUNCTION') { /* TODO: refactor me */ + // JavaScript function + assert(obj.length == 5); + var funcName = htmlspecialchars(obj[1]); + var funcCode = typeLabelPrefix + htmlspecialchars(obj[2]); + var funcProperties = obj[3]; // either null or a non-empty list of key-value pairs + var parentFrameID = obj[4]; + + + if (funcProperties || parentFrameID || myViz.showAllFrameLabels) { + d3DomElement.append('
'); + var tbl = d3DomElement.children('table'); + tbl.append('
' + funcCode + '
' + ''); + + if (funcProperties) { + assert(funcProperties.length > 0); + $.each(funcProperties, function(ind, kvPair) { + tbl.append(''); + var newRow = tbl.find('tr:last'); + var keyTd = newRow.find('td:first'); + var valTd = newRow.find('td:last'); + keyTd.append('' + htmlspecialchars(kvPair[0]) + ''); + myViz.renderNestedObject(kvPair[1], stepNum, valTd); + }); + } + + if (parentFrameID) { + tbl.append('parent' + 'f' + parentFrameID + ''); + } + else if (myViz.showAllFrameLabels) { + tbl.append('parent' + 'global' + ''); + } + } + else { + // compact form: + d3DomElement.append('
' + funcCode + '
'); + } + } + else if (obj[0] == 'HEAP_PRIMITIVE') { + assert(obj.length == 3); + + var typeName = obj[1]; + var primitiveVal = obj[2]; + + // add a bit of padding to heap primitives, for aesthetics + d3DomElement.append('
'); + d3DomElement.find('div.heapPrimitive').append('
' + typeLabelPrefix + typeName + '
'); + myViz.renderPrimitiveObject(primitiveVal, d3DomElement.find('div.heapPrimitive')); + } + else { + // render custom data type + assert(obj.length == 2); + + var typeName = obj[0]; + var strRepr = obj[1]; + + strRepr = htmlspecialchars(strRepr); // escape strings! + + d3DomElement.append('
' + typeLabelPrefix + typeName + '
'); + d3DomElement.append('
' + strRepr + '
'); + } +} + + +ExecutionVisualizer.prototype.redrawConnectors = function() { + this.jsPlumbInstance.repaintEverything(); +} + + +ExecutionVisualizer.prototype.getRealLabel = function(label) { + if (this.params.lang === 'js' || this.params.lang === 'ts' || this.params.lang === 'ruby') { + if (label === 'list') { + return 'array'; + } else if (label === 'instance') { + return 'object'; + } else if (label === 'True') { + return 'true'; + } else if (label === 'False') { + return 'false'; + } + } + + if (this.params.lang === 'ruby') { + if (label === 'dict') { + return 'hash'; + } else if (label === 'set') { + return 'Set'; // the Ruby Set class is capitalized + } else if (label === 'function') { + return 'method'; + } else if (label === 'None') { + return 'nil'; + } else if (label === 'Global frame') { + return 'Global Object'; + } + } + + // default fallthrough case + return label; +}; + + +// Utilities + + +/* colors - see pytutor.css for more colors */ + +var highlightedLineColor = '#e4faeb'; +var highlightedLineBorderColor = '#005583'; + +var highlightedLineLighterColor = '#e8fff0'; + +var funcCallLineColor = '#a2eebd'; + +var brightRed = '#e93f34'; + +var connectorBaseColor = '#005583'; +var connectorHighlightColor = brightRed; +var connectorInactiveColor = '#cccccc'; + +var errorColor = brightRed; + +var breakpointColor = brightRed; +var hoverBreakpointColor = connectorBaseColor; + + +// Unicode arrow types: '\u21d2', '\u21f0', '\u2907' +var darkArrowColor = brightRed; +var lightArrowColor = '#c9e6ca'; + + +function assert(cond) { + if (!cond) { + alert("Assertion Failure (see console log for backtrace)"); + throw 'Assertion Failure'; + } +} + +// taken from http://www.toao.net/32-my-htmlspecialchars-function-for-javascript +function htmlspecialchars(str) { + if (typeof(str) == "string") { + str = str.replace(/&/g, "&"); /* must do & first */ + + // ignore these for now ... + //str = str.replace(/"/g, """); + //str = str.replace(/'/g, "'"); + + str = str.replace(//g, ">"); + + // replace spaces: + str = str.replace(/ /g, " "); + + // replace tab as four spaces: + str = str.replace(/\t/g, "    "); + } + return str; +} + + +// same as htmlspecialchars except don't worry about expanding spaces or +// tabs since we want proper word wrapping in divs. +function htmlsanitize(str) { + if (typeof(str) == "string") { + str = str.replace(/&/g, "&"); /* must do & first */ + + str = str.replace(//g, ">"); + } + return str; +} + + +String.prototype.rtrim = function() { + return this.replace(/\s*$/g, ""); +} + + +// make sure varname doesn't contain any weird +// characters that are illegal for CSS ID's ... +// +// I know for a fact that iterator tmp variables named '_[1]' +// are NOT legal names for CSS ID's. +// I also threw in '{', '}', '(', ')', '<', '>' as illegal characters. +// +// also some variable names are like '.0' (for generator expressions), +// and '.' seems to be illegal. +// +// also '=', '!', and '?' are common in Ruby names, so escape those as well +// +// also spaces are illegal, so convert to '_' +// TODO: what other characters are illegal??? +var lbRE = new RegExp('\\[|{|\\(|<', 'g'); +var rbRE = new RegExp('\\]|}|\\)|>', 'g'); +function varnameToCssID(varname) { + // make sure to REPLACE ALL (using the 'g' option) + // rather than just replacing the first entry + return varname.replace(lbRE, 'LeftB_') + .replace(rbRE, '_RightB') + .replace(/[!]/g, '_BANG_') + .replace(/[?]/g, '_QUES_') + .replace(/[:]/g, '_COLON_') + .replace(/[=]/g, '_EQ_') + .replace(/[.]/g, '_DOT_') + .replace(/ /g, '_'); +} + + +// compare two JSON-encoded compound objects for structural equivalence: +ExecutionVisualizer.prototype.structurallyEquivalent = function(obj1, obj2) { + // punt if either isn't a compound type + if (this.isPrimitiveType(obj1) || this.isPrimitiveType(obj2)) { + return false; + } + + // must be the same compound type + if (obj1[0] != obj2[0]) { + return false; + } + + // must have the same number of elements or fields + if (obj1.length != obj2.length) { + return false; + } + + // for a list or tuple, same size (e.g., a cons cell is a list/tuple of size 2) + if (obj1[0] == 'LIST' || obj1[0] == 'TUPLE') { + return true; + } + else { + var startingInd = -1; + + if (obj1[0] == 'DICT') { + startingInd = 2; + } + else if (obj1[0] == 'INSTANCE') { + startingInd = 3; + } + else { + return false; // punt on all other types + } + + var obj1fields = d3.map(); + + // for a dict or object instance, same names of fields (ordering doesn't matter) + for (var i = startingInd; i < obj1.length; i++) { + obj1fields.set(obj1[i][0], 1); // use as a set + } + + for (var i = startingInd; i < obj2.length; i++) { + if (!obj1fields.has(obj2[i][0])) { + return false; + } + } + + return true; + } +} + + +ExecutionVisualizer.prototype.isPrimitiveType = function(obj) { + var hook_result = this.try_hook("isPrimitiveType", {obj:obj}); + if (hook_result[0]) return hook_result[1]; + + // null is a primitive + if (obj === null) { + return true; + } + + if (typeof obj == "object") { + // kludge: only 'SPECIAL_FLOAT' objects count as primitives + return (obj[0] == 'SPECIAL_FLOAT' || obj[0] == 'JS_SPECIAL_VAL'); + } + else { + // non-objects are primitives + return true; + } +} + +function getRefID(obj) { + assert(obj[0] == 'REF'); + return obj[1]; +} + + +// Annotation bubbles + +var qtipShared = { + show: { + ready: true, // show on document.ready instead of on mouseenter + delay: 0, + event: null, + effect: function() {$(this).show();}, // don't do any fancy fading because it screws up with scrolling + }, + hide: { + fixed: true, + event: null, + effect: function() {$(this).hide();}, // don't do any fancy fading because it screws up with scrolling + }, + style: { + classes: 'ui-tooltip-pgbootstrap', // my own customized version of the bootstrap style + }, +}; + + +// a speech bubble annotation to attach to: +// 'codeline' - a line of code +// 'frame' - a stack frame +// 'variable' - a variable within a stack frame +// 'object' - an object on the heap +// (as determined by the 'type' param) +// +// domID is the ID of the element to attach to (without the leading '#' sign) +function AnnotationBubble(parentViz, type, domID) { + this.parentViz = parentViz; + + this.domID = domID; + this.hashID = '#' + domID; + + this.type = type; + + if (type == 'codeline') { + this.my = 'left center'; + this.at = 'right center'; + } + else if (type == 'frame') { + this.my = 'right center'; + this.at = 'left center'; + } + else if (type == 'variable') { + this.my = 'right center'; + this.at = 'left center'; + } + else if (type == 'object') { + this.my = 'bottom left'; + this.at = 'top center'; + } + else { + assert(false); + } + + // possible states: + // 'invisible' + // 'edit' + // 'view' + // 'minimized' + // 'stub' + this.state = 'invisible'; + + this.text = ''; // the actual contents of the annotation bubble + + this.qtipHidden = false; // is there a qtip object present but hidden? (TODO: kinda confusing) +} + +AnnotationBubble.prototype.showStub = function() { + assert(this.state == 'invisible' || this.state == 'edit'); + assert(this.text == ''); + + var myBubble = this; // to avoid name clashes with 'this' in inner scopes + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: ' ', + id: this.domID, + position: { + my: this.my, + at: this.at, + adjust: { + x: (myBubble.type == 'codeline' ? -6 : 0), // shift codeline tips over a bit for aesthetics + }, + effect: null, // disable all cutesy animations + }, + style: { + classes: 'ui-tooltip-pgbootstrap ui-tooltip-pgbootstrap-stub' + } + })); + + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + myBubble.showEditor(); + }); + + this.state = 'stub'; +} + +AnnotationBubble.prototype.showEditor = function() { + assert(this.state == 'stub' || this.state == 'view' || this.state == 'minimized'); + + var myBubble = this; // to avoid name clashes with 'this' in inner scopes + + var ta = ''; + + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: ta, + id: this.domID, + position: { + my: this.my, + at: this.at, + adjust: { + x: (myBubble.type == 'codeline' ? -6 : 0), // shift codeline tips over a bit for aesthetics + }, + effect: null, // disable all cutesy animations + } + })); + + + $(this.qTipContentID()).find('textarea.bubbleInputText') + // set handler when the textarea loses focus + .blur(function() { + myBubble.text = $(this).val().trim(); // strip all leading and trailing spaces + + if (myBubble.text) { + myBubble.showViewer(); + } + else { + myBubble.showStub(); + } + }) + .focus(); // grab focus so that the user can start typing right away! + + this.state = 'edit'; +} + + +AnnotationBubble.prototype.bindViewerClickHandler = function() { + var myBubble = this; + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + if (myBubble.parentViz.editAnnotationMode) { + myBubble.showEditor(); + } + else { + myBubble.minimizeViewer(); + } + }); +} + +AnnotationBubble.prototype.showViewer = function() { + assert(this.state == 'edit' || this.state == 'invisible'); + assert(this.text); // must be non-empty! + + var myBubble = this; + // destroy then create a new tip: + this.destroyQTip(); + $(this.hashID).qtip($.extend({}, qtipShared, { + content: htmlsanitize(this.text), // help prevent HTML/JS injection attacks + id: this.domID, + position: { + my: this.my, + at: this.at, + adjust: { + x: (myBubble.type == 'codeline' ? -6 : 0), // shift codeline tips over a bit for aesthetics + }, + effect: null, // disable all cutesy animations + } + })); + + this.bindViewerClickHandler(); + this.state = 'view'; +} + + +AnnotationBubble.prototype.minimizeViewer = function() { + assert(this.state == 'view'); + + var myBubble = this; + + $(this.hashID).qtip('option', 'content.text', ' '); //hack to "minimize" its size + + $(this.qTipID()) + .unbind('click') // unbind all old handlers + .click(function() { + if (myBubble.parentViz.editAnnotationMode) { + myBubble.showEditor(); + } + else { + myBubble.restoreViewer(); + } + }); + + this.state = 'minimized'; +} + +AnnotationBubble.prototype.restoreViewer = function() { + assert(this.state == 'minimized'); + $(this.hashID).qtip('option', 'content.text', htmlsanitize(this.text)); // help prevent HTML/JS injection attacks + this.bindViewerClickHandler(); + this.state = 'view'; +} + +// NB: actually DESTROYS the QTip object +AnnotationBubble.prototype.makeInvisible = function() { + assert(this.state == 'stub' || this.state == 'edit'); + this.destroyQTip(); + this.state = 'invisible'; +} + + +AnnotationBubble.prototype.destroyQTip = function() { + $(this.hashID).qtip('destroy'); +} + +AnnotationBubble.prototype.qTipContentID = function() { + return '#ui-tooltip-' + this.domID + '-content'; +} + +AnnotationBubble.prototype.qTipID = function() { + return '#ui-tooltip-' + this.domID; +} + + +AnnotationBubble.prototype.enterEditMode = function() { + assert(this.parentViz.editAnnotationMode); + if (this.state == 'invisible') { + this.showStub(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } +} + +AnnotationBubble.prototype.enterViewMode = function() { + assert(!this.parentViz.editAnnotationMode); + if (this.state == 'stub') { + this.makeInvisible(); + } + else if (this.state == 'edit') { + this.text = $(this.qTipContentID()).find('textarea.bubbleInputText').val().trim(); // strip all leading and trailing spaces + + if (this.text) { + this.showViewer(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } + else { + this.makeInvisible(); + } + } + else if (this.state == 'invisible') { + // this happens when, say, you first enter View Mode + if (this.text) { + this.showViewer(); + + if (this.type == 'codeline') { + this.redrawCodelineBubble(); + } + } + } +} + +AnnotationBubble.prototype.preseedText = function(txt) { + assert(this.state == 'invisible'); + this.text = txt; +} + +AnnotationBubble.prototype.redrawCodelineBubble = function() { + assert(this.type == 'codeline'); + + if (isOutputLineVisibleForBubbles(this.domID)) { + if (this.qtipHidden) { + $(this.hashID).qtip('show'); + } + else { + $(this.hashID).qtip('reposition'); + } + + this.qtipHidden = false; + } + else { + $(this.hashID).qtip('hide'); + this.qtipHidden = true; + } +} + +AnnotationBubble.prototype.redrawBubble = function() { + $(this.hashID).qtip('reposition'); +} + + +// NB: copy-and-paste from isOutputLineVisible with some minor tweaks +function isOutputLineVisibleForBubbles(lineDivID) { + var pcod = $('#pyCodeOutputDiv'); + + var lineNoTd = $('#' + lineDivID); + var LO = lineNoTd.offset().top; + + var PO = pcod.offset().top; + var ST = pcod.scrollTop(); + var H = pcod.height(); + + // add a few pixels of fudge factor on the bottom end due to bottom scrollbar + return (PO <= LO) && (LO < (PO + H - 25)); +} + + +// popup question dialog code from Brad Miller + +// inputId is the ID of the input element +// divId is the div that containsthe visualizer +// answer is a dotted form of an attribute that lives in the curEntry of the trace +// So if we want to ask for the value of a global variable we would say 'globals.a' +// this allows us do do curTrace[i].globals.a But we do it in the loop below using the +// [] operator. +function traceQCheckMe(inputId, divId, answer) { + var vis = $("#"+divId).data("vis") + var i = vis.curInstr + var curEntry = vis.curTrace[i+1]; + var ans = $('#'+inputId).val() + var attrs = answer.split(".") + var correctAns = curEntry; + for (j in attrs) { + correctAns = correctAns[attrs[j]] + } + feedbackElement = $("#" + divId + "_feedbacktext") + if (ans.length > 0 && ans == correctAns) { + feedbackElement.html('Correct') + } else { + feedbackElement.html(vis.curTrace[i].question.feedback) + } + +} + +function closeModal(divId) { + $.modal.close() + $("#"+divId).data("vis").stepForward(); +} + + +// All of the Java frontend code in this function was written by David +// Pritchard and Will Gwozdz, and integrated by Philip Guo +ExecutionVisualizer.prototype.activateJavaFrontend = function() { + // super hack by Philip that reverses the direction of the stack so + // that it grows DOWN and renders the same way as the Python and JS + // visualizer stacks + this.curTrace.forEach(function(e, i) { + if (e.stack_to_render !== undefined) { + e.stack_to_render.reverse(); + } + }); + + this.add_pytutor_hook( + "renderPrimitiveObject", + function(args) { + var obj = args.obj, d3DomElement = args.d3DomElement; + var typ = typeof obj; + if (obj == null) + d3DomElement.append('null'); + else if (typ == "number") + d3DomElement.append('' + obj + ''); + else if (typ == "boolean") { + if (obj) + d3DomElement.append('true'); + else + d3DomElement.append('false'); + } + else if (obj instanceof Array && obj[0] == "VOID") { + d3DomElement.append('void'); + } + else if (obj instanceof Array && obj[0] == "NUMBER-LITERAL") { + // actually transmitted as a string + d3DomElement.append('' + obj[1] + ''); + } + else if (obj instanceof Array && obj[0] == "CHAR-LITERAL") { + var asc = obj[1].charCodeAt(0); + var ch = obj[1]; + + // default + var show = asc.toString(16); + while (show.length < 4) show = "0" + show; + show = "\\u" + show; + + if (ch == "\n") show = "\\n"; + else if (ch == "\r") show = "\\r"; + else if (ch == "\t") show = "\\t"; + else if (ch == "\b") show = "\\b"; + else if (ch == "\f") show = "\\f"; + else if (ch == "\'") show = "\\\'"; + else if (ch == "\"") show = "\\\""; + else if (ch == "\\") show = "\\\\"; + else if (asc >= 32) show = ch; + + // stringObj to make monospace + d3DomElement.append('\'' + show + '\''); + } + else + return [false]; // we didn't handle it + return [true]; // we handled it + }); + + this.add_pytutor_hook( + "isPrimitiveType", + function(args) { + var obj = args.obj; + if ((obj instanceof Array && obj[0] == "VOID") + || (obj instanceof Array && obj[0] == "NUMBER-LITERAL") + || (obj instanceof Array && obj[0] == "CHAR-LITERAL") + || (obj instanceof Array && obj[0] == "ELIDE")) + return [true, true]; // we handled it, it's primitive + return [false]; // didn't handle it + }); + + this.add_pytutor_hook( + "end_updateOutput", + function(args) { + var myViz = args.myViz; + var curEntry = myViz.curTrace[myViz.curInstr]; + if (myViz.params.stdin && myViz.params.stdin != "") { + var stdinPosition = curEntry.stdinPosition || 0; + var stdinContent = + ''+ + escapeHtml(myViz.params.stdin.substr(0, stdinPosition))+ + ''+ + escapeHtml(myViz.params.stdin.substr(stdinPosition)); + myViz.domRoot.find('#stdinShow').html(stdinContent); + } + return [false]; + }); + + this.add_pytutor_hook( + "end_constructor", + function(args) { + var myViz = args.myViz; + if ((myViz.curTrace.length > 0) + && myViz.curTrace[myViz.curTrace.length-1] + && myViz.curTrace[myViz.curTrace.length-1].stdout) { + myViz.hasStdout = true; + myViz.stdoutLines = myViz.curTrace[myViz.curTrace.length-1].stdout.split("\n").length; + } + // if last frame is a step limit + else if ((myViz.curTrace.length > 1) + && myViz.curTrace[myViz.curTrace.length-2] + && myViz.curTrace[myViz.curTrace.length-2].stdout) { + myViz.hasStdout = true; + myViz.stdoutLines = myViz.curTrace[myViz.curTrace.length-2].stdout.split("\n").length; + } + else { + myViz.stdoutLines = -1; + } + if (myViz.hasStdout) + for (var i=0; i' + typeLabelPrefix + 'empty ' + visibleLabel + '
'); + return [true]; //handled + } + + d3DomElement.append('
' + typeLabelPrefix + visibleLabel + '
'); + d3DomElement.append('
'); + var tbl = d3DomElement.children('table'); + + if (obj[0] == 'LIST') { + tbl.append(''); + var headerTr = tbl.find('tr:first'); + var contentTr = tbl.find('tr:last'); + + // i: actual index in json object; ind: apparent index + for (var i=1, ind=0; i'); + headerTr.find('td:last').append(elide ? "…" : ind); + + contentTr.append(''); + if (!elide) { + myViz.renderNestedObject(val, stepNum, contentTr.find('td:last')); + ind++; + } + else { + contentTr.find('td:last').append("…"); + ind += val[1]; // val[1] is the number of cells to skip + } + } + } // end of LIST handling + + // Stack and Queue handling code by Will Gwozdz + /* The table produced for stacks and queues is formed slightly differently than the others, + missing the header row. Two rows made the dashed border not line up properly */ + if (obj[0] == 'STACK') { + tbl.append(''); + var contentTr = tbl.find('tr:last'); + contentTr.append(''+''+''); + $.each(obj, function(ind, val) { + if (ind < 1) return; // skip type tag and ID entry + contentTr.append(''); + myViz.renderNestedObject(val, stepNum, contentTr.find('td:last')); + }); + contentTr.append(''+''); + } + + if (obj[0] == 'QUEUE') { + tbl.append(''); + var contentTr = tbl.find('tr:last'); + // Add arrows showing in/out direction + contentTr.append(''+''); + $.each(obj, function(ind, val) { + if (ind < 1) return; // skip type tag and ID entry + contentTr.append(''); + myViz.renderNestedObject(val, stepNum, contentTr.find('td:last')); + }); + contentTr.append(''+''); + } + + return [true]; // did handle + }); + + this.add_pytutor_hook( + "end_renderDataStructures", + function(args) { + var myViz = args.myViz; + myViz.domRoot.find("td.instKey:contains('___NO_LABEL!___')").hide(); + myViz.domRoot.find(".typeLabel:contains('dict')").each( + function(i) { + if ($(this).html()=='dict') + $(this).html('symbol table'); + if ($(this).html()=='empty dict') + $(this).html('empty symbol table'); + }); + }); + + // java synthetics cause things which javascript doesn't like in an id + var old_generateID = ExecutionVisualizer.prototype.generateID; + this.generateID = function(original_id) { + var sanitized = original_id.replace( + /[^0-9a-zA-Z_]/g, + function(match) {return '-'+match.charCodeAt(0)+'-';} + ); + return old_generateID(sanitized); + } + + // utility functions + var entityMap = { + "&": "&", + "<": "<", + ">": ">", + '"': '"', + "'": ''', + "/": '/' + }; + + var escapeHtml = function(string) { + return String(string).replace(/[&<>"'\/]/g, function (s) { + return entityMap[s]; + }); + }; + +} diff --git a/v3/js/socket.io-client/socket.io.js b/v3/js/socket.io-client/socket.io.js new file mode 100644 index 000000000..d74bacf18 --- /dev/null +++ b/v3/js/socket.io-client/socket.io.js @@ -0,0 +1,6932 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.io=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 && !this.encoding) { + var pack = this.packetBuffer.shift(); + this.packet(pack); + } +}; + +/** + * Clean up transport subscriptions and packet buffer. + * + * @api private + */ + +Manager.prototype.cleanup = function(){ + var sub; + while (sub = this.subs.shift()) sub.destroy(); + + this.packetBuffer = []; + this.encoding = false; + + this.decoder.destroy(); +}; + +/** + * Close the current socket. + * + * @api private + */ + +Manager.prototype.close = +Manager.prototype.disconnect = function(){ + this.skipReconnect = true; + this.backoff.reset(); + this.readyState = 'closed'; + this.engine && this.engine.close(); +}; + +/** + * Called upon engine close. + * + * @api private + */ + +Manager.prototype.onclose = function(reason){ + debug('close'); + this.cleanup(); + this.backoff.reset(); + this.readyState = 'closed'; + this.emit('close', reason); + if (this._reconnection && !this.skipReconnect) { + this.reconnect(); + } +}; + +/** + * Attempt a reconnection. + * + * @api private + */ + +Manager.prototype.reconnect = function(){ + if (this.reconnecting || this.skipReconnect) return this; + + var self = this; + + if (this.backoff.attempts >= this._reconnectionAttempts) { + debug('reconnect failed'); + this.backoff.reset(); + this.emitAll('reconnect_failed'); + this.reconnecting = false; + } else { + var delay = this.backoff.duration(); + debug('will wait %dms before reconnect attempt', delay); + + this.reconnecting = true; + var timer = setTimeout(function(){ + if (self.skipReconnect) return; + + debug('attempting reconnect'); + self.emitAll('reconnect_attempt', self.backoff.attempts); + self.emitAll('reconnecting', self.backoff.attempts); + + // check again for the case socket closed in above events + if (self.skipReconnect) return; + + self.open(function(err){ + if (err) { + debug('reconnect attempt error'); + self.reconnecting = false; + self.reconnect(); + self.emitAll('reconnect_error', err.data); + } else { + debug('reconnect success'); + self.onreconnect(); + } + }); + }, delay); + + this.subs.push({ + destroy: function(){ + clearTimeout(timer); + } + }); + } +}; + +/** + * Called upon successful reconnect. + * + * @api private + */ + +Manager.prototype.onreconnect = function(){ + var attempt = this.backoff.attempts; + this.reconnecting = false; + this.backoff.reset(); + this.updateSocketIds(); + this.emitAll('reconnect', attempt); +}; + +},{"./on":4,"./socket":5,"./url":6,"backo2":7,"component-bind":8,"component-emitter":9,"debug":10,"engine.io-client":11,"indexof":40,"object-component":41,"socket.io-parser":44}],4:[function(_dereq_,module,exports){ + +/** + * Module exports. + */ + +module.exports = on; + +/** + * Helper for subscriptions. + * + * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter` + * @param {String} event name + * @param {Function} callback + * @api public + */ + +function on(obj, ev, fn) { + obj.on(ev, fn); + return { + destroy: function(){ + obj.removeListener(ev, fn); + } + }; +} + +},{}],5:[function(_dereq_,module,exports){ + +/** + * Module dependencies. + */ + +var parser = _dereq_('socket.io-parser'); +var Emitter = _dereq_('component-emitter'); +var toArray = _dereq_('to-array'); +var on = _dereq_('./on'); +var bind = _dereq_('component-bind'); +var debug = _dereq_('debug')('socket.io-client:socket'); +var hasBin = _dereq_('has-binary'); + +/** + * Module exports. + */ + +module.exports = exports = Socket; + +/** + * Internal events (blacklisted). + * These events can't be emitted by the user. + * + * @api private + */ + +var events = { + connect: 1, + connect_error: 1, + connect_timeout: 1, + disconnect: 1, + error: 1, + reconnect: 1, + reconnect_attempt: 1, + reconnect_failed: 1, + reconnect_error: 1, + reconnecting: 1 +}; + +/** + * Shortcut to `Emitter#emit`. + */ + +var emit = Emitter.prototype.emit; + +/** + * `Socket` constructor. + * + * @api public + */ + +function Socket(io, nsp){ + this.io = io; + this.nsp = nsp; + this.json = this; // compat + this.ids = 0; + this.acks = {}; + if (this.io.autoConnect) this.open(); + this.receiveBuffer = []; + this.sendBuffer = []; + this.connected = false; + this.disconnected = true; +} + +/** + * Mix in `Emitter`. + */ + +Emitter(Socket.prototype); + +/** + * Subscribe to open, close and packet events + * + * @api private + */ + +Socket.prototype.subEvents = function() { + if (this.subs) return; + + var io = this.io; + this.subs = [ + on(io, 'open', bind(this, 'onopen')), + on(io, 'packet', bind(this, 'onpacket')), + on(io, 'close', bind(this, 'onclose')) + ]; +}; + +/** + * "Opens" the socket. + * + * @api public + */ + +Socket.prototype.open = +Socket.prototype.connect = function(){ + if (this.connected) return this; + + this.subEvents(); + this.io.open(); // ensure open + if ('open' == this.io.readyState) this.onopen(); + return this; +}; + +/** + * Sends a `message` event. + * + * @return {Socket} self + * @api public + */ + +Socket.prototype.send = function(){ + var args = toArray(arguments); + args.unshift('message'); + this.emit.apply(this, args); + return this; +}; + +/** + * Override `emit`. + * If the event is in `events`, it's emitted normally. + * + * @param {String} event name + * @return {Socket} self + * @api public + */ + +Socket.prototype.emit = function(ev){ + if (events.hasOwnProperty(ev)) { + emit.apply(this, arguments); + return this; + } + + var args = toArray(arguments); + var parserType = parser.EVENT; // default + if (hasBin(args)) { parserType = parser.BINARY_EVENT; } // binary + var packet = { type: parserType, data: args }; + + // event ack callback + if ('function' == typeof args[args.length - 1]) { + debug('emitting packet with ack id %d', this.ids); + this.acks[this.ids] = args.pop(); + packet.id = this.ids++; + } + + if (this.connected) { + this.packet(packet); + } else { + this.sendBuffer.push(packet); + } + + return this; +}; + +/** + * Sends a packet. + * + * @param {Object} packet + * @api private + */ + +Socket.prototype.packet = function(packet){ + packet.nsp = this.nsp; + this.io.packet(packet); +}; + +/** + * Called upon engine `open`. + * + * @api private + */ + +Socket.prototype.onopen = function(){ + debug('transport is open - connecting'); + + // write connect packet if necessary + if ('/' != this.nsp) { + this.packet({ type: parser.CONNECT }); + } +}; + +/** + * Called upon engine `close`. + * + * @param {String} reason + * @api private + */ + +Socket.prototype.onclose = function(reason){ + debug('close (%s)', reason); + this.connected = false; + this.disconnected = true; + delete this.id; + this.emit('disconnect', reason); +}; + +/** + * Called with socket packet. + * + * @param {Object} packet + * @api private + */ + +Socket.prototype.onpacket = function(packet){ + if (packet.nsp != this.nsp) return; + + switch (packet.type) { + case parser.CONNECT: + this.onconnect(); + break; + + case parser.EVENT: + this.onevent(packet); + break; + + case parser.BINARY_EVENT: + this.onevent(packet); + break; + + case parser.ACK: + this.onack(packet); + break; + + case parser.BINARY_ACK: + this.onack(packet); + break; + + case parser.DISCONNECT: + this.ondisconnect(); + break; + + case parser.ERROR: + this.emit('error', packet.data); + break; + } +}; + +/** + * Called upon a server event. + * + * @param {Object} packet + * @api private + */ + +Socket.prototype.onevent = function(packet){ + var args = packet.data || []; + debug('emitting event %j', args); + + if (null != packet.id) { + debug('attaching ack callback to event'); + args.push(this.ack(packet.id)); + } + + if (this.connected) { + emit.apply(this, args); + } else { + this.receiveBuffer.push(args); + } +}; + +/** + * Produces an ack callback to emit with an event. + * + * @api private + */ + +Socket.prototype.ack = function(id){ + var self = this; + var sent = false; + return function(){ + // prevent double callbacks + if (sent) return; + sent = true; + var args = toArray(arguments); + debug('sending ack %j', args); + + var type = hasBin(args) ? parser.BINARY_ACK : parser.ACK; + self.packet({ + type: type, + id: id, + data: args + }); + }; +}; + +/** + * Called upon a server acknowlegement. + * + * @param {Object} packet + * @api private + */ + +Socket.prototype.onack = function(packet){ + debug('calling ack %s with %j', packet.id, packet.data); + var fn = this.acks[packet.id]; + fn.apply(this, packet.data); + delete this.acks[packet.id]; +}; + +/** + * Called upon server connect. + * + * @api private + */ + +Socket.prototype.onconnect = function(){ + this.connected = true; + this.disconnected = false; + this.emit('connect'); + this.emitBuffered(); +}; + +/** + * Emit buffered events (received and emitted). + * + * @api private + */ + +Socket.prototype.emitBuffered = function(){ + var i; + for (i = 0; i < this.receiveBuffer.length; i++) { + emit.apply(this, this.receiveBuffer[i]); + } + this.receiveBuffer = []; + + for (i = 0; i < this.sendBuffer.length; i++) { + this.packet(this.sendBuffer[i]); + } + this.sendBuffer = []; +}; + +/** + * Called upon server disconnect. + * + * @api private + */ + +Socket.prototype.ondisconnect = function(){ + debug('server disconnect (%s)', this.nsp); + this.destroy(); + this.onclose('io server disconnect'); +}; + +/** + * Called upon forced client/server side disconnections, + * this method ensures the manager stops tracking us and + * that reconnections don't get triggered for this. + * + * @api private. + */ + +Socket.prototype.destroy = function(){ + if (this.subs) { + // clean subscriptions to avoid reconnections + for (var i = 0; i < this.subs.length; i++) { + this.subs[i].destroy(); + } + this.subs = null; + } + + this.io.destroy(this); +}; + +/** + * Disconnects the socket manually. + * + * @return {Socket} self + * @api public + */ + +Socket.prototype.close = +Socket.prototype.disconnect = function(){ + if (this.connected) { + debug('performing disconnect (%s)', this.nsp); + this.packet({ type: parser.DISCONNECT }); + } + + // remove socket from pool + this.destroy(); + + if (this.connected) { + // fire events + this.onclose('io client disconnect'); + } + return this; +}; + +},{"./on":4,"component-bind":8,"component-emitter":9,"debug":10,"has-binary":36,"socket.io-parser":44,"to-array":48}],6:[function(_dereq_,module,exports){ +(function (global){ + +/** + * Module dependencies. + */ + +var parseuri = _dereq_('parseuri'); +var debug = _dereq_('debug')('socket.io-client:url'); + +/** + * Module exports. + */ + +module.exports = url; + +/** + * URL parser. + * + * @param {String} url + * @param {Object} An object meant to mimic window.location. + * Defaults to window.location. + * @api public + */ + +function url(uri, loc){ + var obj = uri; + + // default to window.location + var loc = loc || global.location; + if (null == uri) uri = loc.protocol + '//' + loc.host; + + // relative path support + if ('string' == typeof uri) { + if ('/' == uri.charAt(0)) { + if ('/' == uri.charAt(1)) { + uri = loc.protocol + uri; + } else { + uri = loc.hostname + uri; + } + } + + if (!/^(https?|wss?):\/\//.test(uri)) { + debug('protocol-less url %s', uri); + if ('undefined' != typeof loc) { + uri = loc.protocol + '//' + uri; + } else { + uri = 'https://' + uri; + } + } + + // parse + debug('parse %s', uri); + obj = parseuri(uri); + } + + // make sure we treat `localhost:80` and `localhost` equally + if (!obj.port) { + if (/^(http|ws)$/.test(obj.protocol)) { + obj.port = '80'; + } + else if (/^(http|ws)s$/.test(obj.protocol)) { + obj.port = '443'; + } + } + + obj.path = obj.path || '/'; + + // define unique id + obj.id = obj.protocol + '://' + obj.host + ':' + obj.port; + // define href + obj.href = obj.protocol + '://' + obj.host + (loc && loc.port == obj.port ? '' : (':' + obj.port)); + + return obj; +} + +}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"debug":10,"parseuri":42}],7:[function(_dereq_,module,exports){ + +/** + * Expose `Backoff`. + */ + +module.exports = Backoff; + +/** + * Initialize backoff timer with `opts`. + * + * - `min` initial timeout in milliseconds [100] + * - `max` max timeout [10000] + * - `jitter` [0] + * - `factor` [2] + * + * @param {Object} opts + * @api public + */ + +function Backoff(opts) { + opts = opts || {}; + this.ms = opts.min || 100; + this.max = opts.max || 10000; + this.factor = opts.factor || 2; + this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; + this.attempts = 0; +} + +/** + * Return the backoff duration. + * + * @return {Number} + * @api public + */ + +Backoff.prototype.duration = function(){ + var ms = this.ms * Math.pow(this.factor, this.attempts++); + if (this.jitter) { + var rand = Math.random(); + var deviation = Math.floor(rand * this.jitter * ms); + ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; + } + return Math.min(ms, this.max) | 0; +}; + +/** + * Reset the number of attempts. + * + * @api public + */ + +Backoff.prototype.reset = function(){ + this.attempts = 0; +}; + +/** + * Set the minimum duration + * + * @api public + */ + +Backoff.prototype.setMin = function(min){ + this.ms = min; +}; + +/** + * Set the maximum duration + * + * @api public + */ + +Backoff.prototype.setMax = function(max){ + this.max = max; +}; + +/** + * Set the jitter + * + * @api public + */ + +Backoff.prototype.setJitter = function(jitter){ + this.jitter = jitter; +}; + + +},{}],8:[function(_dereq_,module,exports){ +/** + * Slice reference. + */ + +var slice = [].slice; + +/** + * Bind `obj` to `fn`. + * + * @param {Object} obj + * @param {Function|String} fn or string + * @return {Function} + * @api public + */ + +module.exports = function(obj, fn){ + if ('string' == typeof fn) fn = obj[fn]; + if ('function' != typeof fn) throw new Error('bind() requires a function'); + var args = slice.call(arguments, 2); + return function(){ + return fn.apply(obj, args.concat(slice.call(arguments))); + } +}; + +},{}],9:[function(_dereq_,module,exports){ + +/** + * Expose `Emitter`. + */ + +module.exports = Emitter; + +/** + * Initialize a new `Emitter`. + * + * @api public + */ + +function Emitter(obj) { + if (obj) return mixin(obj); +}; + +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; +} + +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.on = +Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks[event] = this._callbacks[event] || []) + .push(fn); + return this; +}; + +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.once = function(event, fn){ + var self = this; + this._callbacks = this._callbacks || {}; + + function on() { + self.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; + +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.off = +Emitter.prototype.removeListener = +Emitter.prototype.removeAllListeners = +Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks[event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks[event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + return this; +}; + +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + +Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks[event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + +Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks[event] || []; +}; + +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + +Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; +}; + +},{}],10:[function(_dereq_,module,exports){ + +/** + * Expose `debug()` as the module. + */ + +module.exports = debug; + +/** + * Create a debugger with the given `name`. + * + * @param {String} name + * @return {Type} + * @api public + */ + +function debug(name) { + if (!debug.enabled(name)) return function(){}; + + return function(fmt){ + fmt = coerce(fmt); + + var curr = new Date; + var ms = curr - (debug[name] || curr); + debug[name] = curr; + + fmt = name + + ' ' + + fmt + + ' +' + debug.humanize(ms); + + // This hackery is required for IE8 + // where `console.log` doesn't have 'apply' + window.console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); + } +} + +/** + * The currently active debug mode names. + */ + +debug.names = []; +debug.skips = []; + +/** + * Enables a debug mode by name. This can include modes + * separated by a colon and wildcards. + * + * @param {String} name + * @api public + */ + +debug.enable = function(name) { + try { + localStorage.debug = name; + } catch(e){} + + var split = (name || '').split(/[\s,]+/) + , len = split.length; + + for (var i = 0; i < len; i++) { + name = split[i].replace('*', '.*?'); + if (name[0] === '-') { + debug.skips.push(new RegExp('^' + name.substr(1) + '$')); + } + else { + debug.names.push(new RegExp('^' + name + '$')); + } + } +}; + +/** + * Disable debug output. + * + * @api public + */ + +debug.disable = function(){ + debug.enable(''); +}; + +/** + * Humanize the given `ms`. + * + * @param {Number} m + * @return {String} + * @api private + */ + +debug.humanize = function(ms) { + var sec = 1000 + , min = 60 * 1000 + , hour = 60 * min; + + if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; + if (ms >= min) return (ms / min).toFixed(1) + 'm'; + if (ms >= sec) return (ms / sec | 0) + 's'; + return ms + 'ms'; +}; + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +debug.enabled = function(name) { + for (var i = 0, len = debug.skips.length; i < len; i++) { + if (debug.skips[i].test(name)) { + return false; + } + } + for (var i = 0, len = debug.names.length; i < len; i++) { + if (debug.names[i].test(name)) { + return true; + } + } + return false; +}; + +/** + * Coerce `val`. + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + +// persist + +try { + if (window.localStorage) debug.enable(localStorage.debug); +} catch(e){} + +},{}],11:[function(_dereq_,module,exports){ + +module.exports = _dereq_('./lib/'); + +},{"./lib/":12}],12:[function(_dereq_,module,exports){ + +module.exports = _dereq_('./socket'); + +/** + * Exports parser + * + * @api public + * + */ +module.exports.parser = _dereq_('engine.io-parser'); + +},{"./socket":13,"engine.io-parser":25}],13:[function(_dereq_,module,exports){ +(function (global){ +/** + * Module dependencies. + */ + +var transports = _dereq_('./transports'); +var Emitter = _dereq_('component-emitter'); +var debug = _dereq_('debug')('engine.io-client:socket'); +var index = _dereq_('indexof'); +var parser = _dereq_('engine.io-parser'); +var parseuri = _dereq_('parseuri'); +var parsejson = _dereq_('parsejson'); +var parseqs = _dereq_('parseqs'); + +/** + * Module exports. + */ + +module.exports = Socket; + +/** + * Noop function. + * + * @api private + */ + +function noop(){} + +/** + * Socket constructor. + * + * @param {String|Object} uri or options + * @param {Object} options + * @api public + */ + +function Socket(uri, opts){ + if (!(this instanceof Socket)) return new Socket(uri, opts); + + opts = opts || {}; + + if (uri && 'object' == typeof uri) { + opts = uri; + uri = null; + } + + if (uri) { + uri = parseuri(uri); + opts.host = uri.host; + opts.secure = uri.protocol == 'https' || uri.protocol == 'wss'; + opts.port = uri.port; + if (uri.query) opts.query = uri.query; + } + + this.secure = null != opts.secure ? opts.secure : + (global.location && 'https:' == location.protocol); + + if (opts.host) { + var pieces = opts.host.split(':'); + opts.hostname = pieces.shift(); + if (pieces.length) { + opts.port = pieces.pop(); + } else if (!opts.port) { + // if no port is specified manually, use the protocol default + opts.port = this.secure ? '443' : '80'; + } + } + + this.agent = opts.agent || false; + this.hostname = opts.hostname || + (global.location ? location.hostname : 'localhost'); + this.port = opts.port || (global.location && location.port ? + location.port : + (this.secure ? 443 : 80)); + this.query = opts.query || {}; + if ('string' == typeof this.query) this.query = parseqs.decode(this.query); + this.upgrade = false !== opts.upgrade; + this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/'; + this.forceJSONP = !!opts.forceJSONP; + this.jsonp = false !== opts.jsonp; + this.forceBase64 = !!opts.forceBase64; + this.enablesXDR = !!opts.enablesXDR; + this.timestampParam = opts.timestampParam || 't'; + this.timestampRequests = opts.timestampRequests; + this.transports = opts.transports || ['polling', 'websocket']; + this.readyState = ''; + this.writeBuffer = []; + this.callbackBuffer = []; + this.policyPort = opts.policyPort || 843; + this.rememberUpgrade = opts.rememberUpgrade || false; + this.binaryType = null; + this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades; + + // SSL options for Node.js client + this.pfx = opts.pfx || null; + this.key = opts.key || null; + this.passphrase = opts.passphrase || null; + this.cert = opts.cert || null; + this.ca = opts.ca || null; + this.ciphers = opts.ciphers || null; + this.rejectUnauthorized = opts.rejectUnauthorized || null; + + this.open(); +} + +Socket.priorWebsocketSuccess = false; + +/** + * Mix in `Emitter`. + */ + +Emitter(Socket.prototype); + +/** + * Protocol version. + * + * @api public + */ + +Socket.protocol = parser.protocol; // this is an int + +/** + * Expose deps for legacy compatibility + * and standalone browser access. + */ + +Socket.Socket = Socket; +Socket.Transport = _dereq_('./transport'); +Socket.transports = _dereq_('./transports'); +Socket.parser = _dereq_('engine.io-parser'); + +/** + * Creates transport of the given type. + * + * @param {String} transport name + * @return {Transport} + * @api private + */ + +Socket.prototype.createTransport = function (name) { + debug('creating transport "%s"', name); + var query = clone(this.query); + + // append engine.io protocol identifier + query.EIO = parser.protocol; + + // transport name + query.transport = name; + + // session id if we already have one + if (this.id) query.sid = this.id; + + var transport = new transports[name]({ + agent: this.agent, + hostname: this.hostname, + port: this.port, + secure: this.secure, + path: this.path, + query: query, + forceJSONP: this.forceJSONP, + jsonp: this.jsonp, + forceBase64: this.forceBase64, + enablesXDR: this.enablesXDR, + timestampRequests: this.timestampRequests, + timestampParam: this.timestampParam, + policyPort: this.policyPort, + socket: this, + pfx: this.pfx, + key: this.key, + passphrase: this.passphrase, + cert: this.cert, + ca: this.ca, + ciphers: this.ciphers, + rejectUnauthorized: this.rejectUnauthorized + }); + + return transport; +}; + +function clone (obj) { + var o = {}; + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + o[i] = obj[i]; + } + } + return o; +} + +/** + * Initializes transport to use and starts probe. + * + * @api private + */ +Socket.prototype.open = function () { + var transport; + if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') != -1) { + transport = 'websocket'; + } else if (0 == this.transports.length) { + // Emit error on next tick so it can be listened to + var self = this; + setTimeout(function() { + self.emit('error', 'No transports available'); + }, 0); + return; + } else { + transport = this.transports[0]; + } + this.readyState = 'opening'; + + // Retry with the next transport if the transport is disabled (jsonp: false) + var transport; + try { + transport = this.createTransport(transport); + } catch (e) { + this.transports.shift(); + this.open(); + return; + } + + transport.open(); + this.setTransport(transport); +}; + +/** + * Sets the current transport. Disables the existing one (if any). + * + * @api private + */ + +Socket.prototype.setTransport = function(transport){ + debug('setting transport %s', transport.name); + var self = this; + + if (this.transport) { + debug('clearing existing transport %s', this.transport.name); + this.transport.removeAllListeners(); + } + + // set up transport + this.transport = transport; + + // set up transport listeners + transport + .on('drain', function(){ + self.onDrain(); + }) + .on('packet', function(packet){ + self.onPacket(packet); + }) + .on('error', function(e){ + self.onError(e); + }) + .on('close', function(){ + self.onClose('transport close'); + }); +}; + +/** + * Probes a transport. + * + * @param {String} transport name + * @api private + */ + +Socket.prototype.probe = function (name) { + debug('probing transport "%s"', name); + var transport = this.createTransport(name, { probe: 1 }) + , failed = false + , self = this; + + Socket.priorWebsocketSuccess = false; + + function onTransportOpen(){ + if (self.onlyBinaryUpgrades) { + var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary; + failed = failed || upgradeLosesBinary; + } + if (failed) return; + + debug('probe transport "%s" opened', name); + transport.send([{ type: 'ping', data: 'probe' }]); + transport.once('packet', function (msg) { + if (failed) return; + if ('pong' == msg.type && 'probe' == msg.data) { + debug('probe transport "%s" pong', name); + self.upgrading = true; + self.emit('upgrading', transport); + if (!transport) return; + Socket.priorWebsocketSuccess = 'websocket' == transport.name; + + debug('pausing current transport "%s"', self.transport.name); + self.transport.pause(function () { + if (failed) return; + if ('closed' == self.readyState) return; + debug('changing transport and sending upgrade packet'); + + cleanup(); + + self.setTransport(transport); + transport.send([{ type: 'upgrade' }]); + self.emit('upgrade', transport); + transport = null; + self.upgrading = false; + self.flush(); + }); + } else { + debug('probe transport "%s" failed', name); + var err = new Error('probe error'); + err.transport = transport.name; + self.emit('upgradeError', err); + } + }); + } + + function freezeTransport() { + if (failed) return; + + // Any callback called by transport should be ignored since now + failed = true; + + cleanup(); + + transport.close(); + transport = null; + } + + //Handle any error that happens while probing + function onerror(err) { + var error = new Error('probe error: ' + err); + error.transport = transport.name; + + freezeTransport(); + + debug('probe transport "%s" failed because of error: %s', name, err); + + self.emit('upgradeError', error); + } + + function onTransportClose(){ + onerror("transport closed"); + } + + //When the socket is closed while we're probing + function onclose(){ + onerror("socket closed"); + } + + //When the socket is upgraded while we're probing + function onupgrade(to){ + if (transport && to.name != transport.name) { + debug('"%s" works - aborting "%s"', to.name, transport.name); + freezeTransport(); + } + } + + //Remove all listeners on the transport and on self + function cleanup(){ + transport.removeListener('open', onTransportOpen); + transport.removeListener('error', onerror); + transport.removeListener('close', onTransportClose); + self.removeListener('close', onclose); + self.removeListener('upgrading', onupgrade); + } + + transport.once('open', onTransportOpen); + transport.once('error', onerror); + transport.once('close', onTransportClose); + + this.once('close', onclose); + this.once('upgrading', onupgrade); + + transport.open(); + +}; + +/** + * Called when connection is deemed open. + * + * @api public + */ + +Socket.prototype.onOpen = function () { + debug('socket open'); + this.readyState = 'open'; + Socket.priorWebsocketSuccess = 'websocket' == this.transport.name; + this.emit('open'); + this.flush(); + + // we check for `readyState` in case an `open` + // listener already closed the socket + if ('open' == this.readyState && this.upgrade && this.transport.pause) { + debug('starting upgrade probes'); + for (var i = 0, l = this.upgrades.length; i < l; i++) { + this.probe(this.upgrades[i]); + } + } +}; + +/** + * Handles a packet. + * + * @api private + */ + +Socket.prototype.onPacket = function (packet) { + if ('opening' == this.readyState || 'open' == this.readyState) { + debug('socket receive: type "%s", data "%s"', packet.type, packet.data); + + this.emit('packet', packet); + + // Socket is live - any packet counts + this.emit('heartbeat'); + + switch (packet.type) { + case 'open': + this.onHandshake(parsejson(packet.data)); + break; + + case 'pong': + this.setPing(); + break; + + case 'error': + var err = new Error('server error'); + err.code = packet.data; + this.emit('error', err); + break; + + case 'message': + this.emit('data', packet.data); + this.emit('message', packet.data); + break; + } + } else { + debug('packet received with socket readyState "%s"', this.readyState); + } +}; + +/** + * Called upon handshake completion. + * + * @param {Object} handshake obj + * @api private + */ + +Socket.prototype.onHandshake = function (data) { + this.emit('handshake', data); + this.id = data.sid; + this.transport.query.sid = data.sid; + this.upgrades = this.filterUpgrades(data.upgrades); + this.pingInterval = data.pingInterval; + this.pingTimeout = data.pingTimeout; + this.onOpen(); + // In case open handler closes socket + if ('closed' == this.readyState) return; + this.setPing(); + + // Prolong liveness of socket on heartbeat + this.removeListener('heartbeat', this.onHeartbeat); + this.on('heartbeat', this.onHeartbeat); +}; + +/** + * Resets ping timeout. + * + * @api private + */ + +Socket.prototype.onHeartbeat = function (timeout) { + clearTimeout(this.pingTimeoutTimer); + var self = this; + self.pingTimeoutTimer = setTimeout(function () { + if ('closed' == self.readyState) return; + self.onClose('ping timeout'); + }, timeout || (self.pingInterval + self.pingTimeout)); +}; + +/** + * Pings server every `this.pingInterval` and expects response + * within `this.pingTimeout` or closes connection. + * + * @api private + */ + +Socket.prototype.setPing = function () { + var self = this; + clearTimeout(self.pingIntervalTimer); + self.pingIntervalTimer = setTimeout(function () { + debug('writing ping packet - expecting pong within %sms', self.pingTimeout); + self.ping(); + self.onHeartbeat(self.pingTimeout); + }, self.pingInterval); +}; + +/** +* Sends a ping packet. +* +* @api public +*/ + +Socket.prototype.ping = function () { + this.sendPacket('ping'); +}; + +/** + * Called on `drain` event + * + * @api private + */ + +Socket.prototype.onDrain = function() { + for (var i = 0; i < this.prevBufferLen; i++) { + if (this.callbackBuffer[i]) { + this.callbackBuffer[i](); + } + } + + this.writeBuffer.splice(0, this.prevBufferLen); + this.callbackBuffer.splice(0, this.prevBufferLen); + + // setting prevBufferLen = 0 is very important + // for example, when upgrading, upgrade packet is sent over, + // and a nonzero prevBufferLen could cause problems on `drain` + this.prevBufferLen = 0; + + if (this.writeBuffer.length == 0) { + this.emit('drain'); + } else { + this.flush(); + } +}; + +/** + * Flush write buffers. + * + * @api private + */ + +Socket.prototype.flush = function () { + if ('closed' != this.readyState && this.transport.writable && + !this.upgrading && this.writeBuffer.length) { + debug('flushing %d packets in socket', this.writeBuffer.length); + this.transport.send(this.writeBuffer); + // keep track of current length of writeBuffer + // splice writeBuffer and callbackBuffer on `drain` + this.prevBufferLen = this.writeBuffer.length; + this.emit('flush'); + } +}; + +/** + * Sends a message. + * + * @param {String} message. + * @param {Function} callback function. + * @return {Socket} for chaining. + * @api public + */ + +Socket.prototype.write = +Socket.prototype.send = function (msg, fn) { + this.sendPacket('message', msg, fn); + return this; +}; + +/** + * Sends a packet. + * + * @param {String} packet type. + * @param {String} data. + * @param {Function} callback function. + * @api private + */ + +Socket.prototype.sendPacket = function (type, data, fn) { + if ('closing' == this.readyState || 'closed' == this.readyState) { + return; + } + + var packet = { type: type, data: data }; + this.emit('packetCreate', packet); + this.writeBuffer.push(packet); + this.callbackBuffer.push(fn); + this.flush(); +}; + +/** + * Closes the connection. + * + * @api private + */ + +Socket.prototype.close = function () { + if ('opening' == this.readyState || 'open' == this.readyState) { + this.readyState = 'closing'; + + var self = this; + + function close() { + self.onClose('forced close'); + debug('socket closing - telling transport to close'); + self.transport.close(); + } + + function cleanupAndClose() { + self.removeListener('upgrade', cleanupAndClose); + self.removeListener('upgradeError', cleanupAndClose); + close(); + } + + function waitForUpgrade() { + // wait for upgrade to finish since we can't send packets while pausing a transport + self.once('upgrade', cleanupAndClose); + self.once('upgradeError', cleanupAndClose); + } + + if (this.writeBuffer.length) { + this.once('drain', function() { + if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + }); + } else if (this.upgrading) { + waitForUpgrade(); + } else { + close(); + } + } + + return this; +}; + +/** + * Called upon transport error + * + * @api private + */ + +Socket.prototype.onError = function (err) { + debug('socket error %j', err); + Socket.priorWebsocketSuccess = false; + this.emit('error', err); + this.onClose('transport error', err); +}; + +/** + * Called upon transport close. + * + * @api private + */ + +Socket.prototype.onClose = function (reason, desc) { + if ('opening' == this.readyState || 'open' == this.readyState || 'closing' == this.readyState) { + debug('socket close with reason: "%s"', reason); + var self = this; + + // clear timers + clearTimeout(this.pingIntervalTimer); + clearTimeout(this.pingTimeoutTimer); + + // clean buffers in next tick, so developers can still + // grab the buffers on `close` event + setTimeout(function() { + self.writeBuffer = []; + self.callbackBuffer = []; + self.prevBufferLen = 0; + }, 0); + + // stop event from firing again for transport + this.transport.removeAllListeners('close'); + + // ensure transport won't stay open + this.transport.close(); + + // ignore further transport communication + this.transport.removeAllListeners(); + + // set ready state + this.readyState = 'closed'; + + // clear session id + this.id = null; + + // emit close event + this.emit('close', reason, desc); + } +}; + +/** + * Filters upgrades, returning only those matching client transports. + * + * @param {Array} server upgrades + * @api private + * + */ + +Socket.prototype.filterUpgrades = function (upgrades) { + var filteredUpgrades = []; + for (var i = 0, j = upgrades.length; i
+ + +
+
+ + drag + + + drag + +
+
+
+ +
+ + + + +
+
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
{{ gettext('Following to new URL...') }}
+
+
+ {{ gettext('Following') }} + + {{ gettext( "to" ) }} +
+
+ + +
+
+
+ + {{ gettext('has invited') }} {{ gettext('anyone') }} + {{ gettext('you') }} + {{ gettext( "to" ) }} +
+
+ +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + +
+
+
+
diff --git a/v3/js/togetherjs/togetherjs/jqueryPlugins.js b/v3/js/togetherjs/togetherjs/jqueryPlugins.js new file mode 100644 index 000000000..9721f6c4b --- /dev/null +++ b/v3/js/togetherjs/togetherjs/jqueryPlugins.js @@ -0,0 +1,330 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define(["jquery"], function ($) { + // This isn't really a "module" since it just patches jQuery itself + + // FIX ME Animations TO DO + // walkthrough animations go here + // animate participant cursor and box popping in when they enter the session + // animate participant cursor and box popping out when they leave the session + // animate the participant cursor -> rotate down when they're down the page + $.fn.rotateCursorDown = function () { + $('svg').animate({borderSpacing: -150, opacity: 1}, { + step: function(now, fx) { + if (fx.prop == "borderSpacing") { + $(this).css('-webkit-transform', 'rotate('+now+'deg)') + .css('-moz-transform', 'rotate('+now+'deg)') + .css('-ms-transform', 'rotate('+now+'deg)') + .css('-o-transform', 'rotate('+now+'deg)') + .css('transform', 'rotate('+now+'deg)'); + } else { + $(this).css(fx.prop, now); + } + }, + duration: 500 + }, 'linear').promise().then(function () { + this.css('-webkit-transform', ''); + this.css('-moz-transform', ''); + this.css('-ms-transform', ''); + this.css('-o-transform', ''); + this.css('transform', ''); + this.css("opacity", ""); + }); + }; + + // animate the participant cursor -> rotate up when they're on the same frame as the user + $.fn.rotateCursorDown = function () { + $('.togetherjs-cursor svg').animate({borderSpacing: 0, opacity: 1}, { + step: function(now, fx) { + if (fx.prop == "borderSpacing") { + $(this).css('-webkit-transform', 'rotate('+now+'deg)') + .css('-moz-transform', 'rotate('+now+'deg)') + .css('-ms-transform', 'rotate('+now+'deg)') + .css('-o-transform', 'rotate('+now+'deg)') + .css('transform', 'rotate('+now+'deg)'); + } else { + $(this).css(fx.prop, now); + } + }, + duration: 500 + }, 'linear').promise().then(function () { + this.css('-webkit-transform', ''); + this.css('-moz-transform', ''); + this.css('-ms-transform', ''); + this.css('-o-transform', ''); + this.css('transform', ''); + this.css("opacity", ""); + }); + }; + + // Move notification when another notification slides in // + + + /* Pop in window from dock button: */ + $.fn.popinWindow = function () { + + //mobile popout window with no animation + if($.browser.mobile) { + + //starting position + this.css({ + left: "0px", + opacity: 1, + "zIndex": 8888 + }); + + //starting position for arrow + $('#togetherjs-window-pointer-right').css({ + left: "+=74px", + opacity: 1, + "zIndex": 8888 + }); + + //animate arrow out + $('#togetherjs-window-pointer-right').animate({ + opacity: 1, + left: "-=78px" + }, { + duration:60, easing:"linear" + }); + $('#togetherjs-window-pointer-right').queue(); + + //bounce arrow back + $('#togetherjs-window-pointer-right').animate({ + left:'+=4px' + }, { + duration:60, easing:"linear" + }); + + //animate window out + this.animate({ + opacity: 1, + left: "0px" + }, { + duration:60, easing:"linear" + }); + this.queue(); + + //bounce window back + this.animate({ + left:'0px' + }, { + duration:60, easing:"linear" + }); + } + + else { + + //starting position + this.css({ + left: "+=74px", + opacity: 1, + "zIndex": 8888 + }); + + //starting position for arrow + $('#togetherjs-window-pointer-right').css({ + left: "+=74px", + opacity: 1, + "zIndex": 8888 + }); + + //animate arrow out + $('#togetherjs-window-pointer-right').animate({ + opacity: 1, + left: "-=78px" + }, { + duration:60, easing:"linear" + }); + $('#togetherjs-window-pointer-right').queue(); + + //bounce arrow back + $('#togetherjs-window-pointer-right').animate({ + left:'+=4px' + }, { + duration:60, easing:"linear" + }); + + //animate window out + this.animate({ + opacity: 1, + left: "-=78px" + }, { + duration:60, easing:"linear" + }); + this.queue(); + + //bounce window back + this.animate({ + left:'+=4px' + }, { + duration:60, easing:"linear" + }); + + } + + }; + + /* Slide in notification window: */ + $.fn.slideIn = function () { + this.css({ + //top: "240px", + left: "+=74px", + opacity: 0, + "zIndex": 8888 + }); + return this.animate({ + "left": "-=74px", + opacity: 1, + "zIndex": 9999 + }, "fast"); + }; + + /* Used to fade away notification windows + flip the bottom of them out: */ + $.fn.fadeOut = function () { + this.animate({borderSpacing: -90, opacity: 0.5}, { + step: function(now, fx) { + if (fx.prop == "borderSpacing") { + $(this).css('-webkit-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('-moz-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('-ms-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('-o-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('transform', 'perspective( 600px ) rotateX('+now+'deg)'); + } else { + $(this).css(fx.prop, now); + } + }, + duration: 500 + }, 'linear').promise().then(function () { + this.css('-webkit-transform', ''); + this.css('-moz-transform', ''); + this.css('-ms-transform', ''); + this.css('-o-transform', ''); + this.css('transform', ''); + this.css("opacity", ""); + }); + return this; + }; + + /* used when user goes down to participant cursor location on screen */ + $.fn.easeTo = function (y) { + return this.animate({ + scrollTop: y + }, { + duration: 400, + easing: "swing" + }); + }; + + // avatar animate in + $.fn.animateDockEntry = function () { + var height = this.height(); + var width = this.width(); + var backgroundSize = height + 4; + var margin = parseInt(this.css("marginLeft"), 10); + + // set starting position CSS for avatar + this.css({ + marginLeft: margin + width/2, + height: 0, + width: 0, + backgroundSize: "0 0" + }); + + var self = this; + + //then animate avatar to the actual dimensions, and reset the values + this.animate({ + marginLeft: margin, + height: height, + width: width, + backgroundSize: backgroundSize + }, { + duration: 600 + }).promise().then(function () { + self.css({ + marginLeft: "", + height: "", + width: "", + backgroundSize: "" + }); + }); + return this; + }; + + // avatar animate out, reverse of above + $.fn.animateDockExit = function () { + + // get the current avatar dimenensions + var height = this.height(); + var width = this.width(); + var backgroundSize = height + 4; + var margin = parseInt(this.css("marginLeft"), 10); + + //then animate avatar to shrink to nothing, and reset the values again + // FIXME this needs to animate from the CENTER + this.animate({ + marginLeft: margin + width/2, + height: 0, + width: 0, + backgroundSize: "0 0", + opacity: 0 + }, 600 ); + + return this; + + }; + + $.fn.animateCursorEntry = function () { + // Make the cursor bubble pop in + }; + + // keyboard typing animation + $.fn.animateKeyboard = function () { + var one = this.find(".togetherjs-typing-ellipse-one"); + var two = this.find(".togetherjs-typing-ellipse-two"); + var three = this.find(".togetherjs-typing-ellipse-three"); + var count = -1; + var run = (function () { + count = (count+1) % 4; + if (count === 0) { + one.css("opacity", 0.5); + two.css("opacity", 0.5); + three.css("opacity", 0.5); + } else if (count == 1) { + one.css("opacity", 1); + } else if (count == 2) { + two.css("opacity", 1); + } else { // count==3 + three.css("opacity", 1); + } + }).bind(this); + run(); + var interval = setInterval(run, 300); + this.data("animateKeyboard", interval); + }; + + $.fn.stopKeyboardAnimation = function () { + clearTimeout(this.data("animateKeyboard")); + this.data("animateKeyboard", null); + }; + + // FIXME: not sure if this is legit, but at least the modern mobile devices we + // care about should have this defined: + if (! $.browser) { + $.browser = {}; + } + $.browser.mobile = window.orientation !== undefined; + if (navigator.userAgent.search(/mobile/i) != -1) { + // FIXME: At least on the Firefox OS simulator I need this + $.browser.mobile = true; + } + + if ($.browser.mobile && window.matchMedia && ! window.matchMedia("screen and (max-screen-width: 480px)").matches) { + // FIXME: for Firefox OS simulator really: + document.body.className += " togetherjs-mobile-browser"; + } + +}); diff --git a/v3/js/togetherjs/togetherjs/libs/almond.js b/v3/js/togetherjs/togetherjs/libs/almond.js new file mode 100644 index 000000000..28ed81add --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/almond.js @@ -0,0 +1,405 @@ +/** + * almond 0.2.5 Copyright (c) 2011-2012, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/almond for details + */ +//Going sloppy to avoid 'use strict' string cost, but strict practices should +//be followed. +/*jslint sloppy: true */ +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + var main, req, makeMap, handlers, + defined = {}, + waiting = {}, + config = {}, + defining = {}, + hasOwn = Object.prototype.hasOwnProperty, + aps = [].slice; + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + var nameParts, nameSegment, mapValue, foundMap, + foundI, foundStarMap, starI, i, j, part, + baseParts = baseName && baseName.split("/"), + map = config.map, + starMap = (map && map['*']) || {}; + + //Adjust any relative paths. + if (name && name.charAt(0) === ".") { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + //Convert baseName to array, and lop off the last part, + //so that . matches that "directory" and not name of the baseName's + //module. For instance, baseName of "one/two/three", maps to + //"one/two/three.js", but we want the directory, "one/two" for + //this normalization. + baseParts = baseParts.slice(0, baseParts.length - 1); + + name = baseParts.concat(name.split("/")); + + //start trimDots + for (i = 0; i < name.length; i += 1) { + part = name[i]; + if (part === ".") { + name.splice(i, 1); + i -= 1; + } else if (part === "..") { + if (i === 1 && (name[2] === '..' || name[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join("/"); + } else if (name.indexOf('./') === 0) { + // No baseName, so this is ID is resolved relative + // to baseUrl, pull off the leading dot. + name = name.substring(2); + } + } + + //Apply map config if available. + if ((baseParts || starMap) && map) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join("/"); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = map[baseParts.slice(0, j).join('/')]; + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = mapValue[nameSegment]; + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && starMap[nameSegment]) { + foundStarMap = starMap[nameSegment]; + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (hasProp(waiting, name)) { + var args = waiting[name]; + delete waiting[name]; + defining[name] = true; + main.apply(undef, args); + } + + if (!hasProp(defined, name) && !hasProp(defining, name)) { + throw new Error('No ' + name); + } + return defined[name]; + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + makeMap = function (name, relName) { + var plugin, + parts = splitPrefix(name), + prefix = parts[0]; + + name = parts[1]; + + if (prefix) { + prefix = normalize(prefix, relName); + plugin = callDep(prefix); + } + + //Normalize according + if (prefix) { + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relName)); + } else { + name = normalize(name, relName); + } + } else { + name = normalize(name, relName); + parts = splitPrefix(name); + prefix = parts[0]; + name = parts[1]; + if (prefix) { + plugin = callDep(prefix); + } + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + pr: prefix, + p: plugin + }; + }; + + function makeConfig(name) { + return function () { + return (config && config.config && config.config[name]) || {}; + }; + } + + handlers = { + require: function (name) { + return makeRequire(name); + }, + exports: function (name) { + var e = defined[name]; + if (typeof e !== 'undefined') { + return e; + } else { + return (defined[name] = {}); + } + }, + module: function (name) { + return { + id: name, + uri: '', + exports: defined[name], + config: makeConfig(name) + }; + } + }; + + main = function (name, deps, callback, relName) { + var cjsModule, depName, ret, map, i, + args = [], + usingExports; + + //Use name if no relName + relName = relName || name; + + //Call the callback to define the module, if necessary. + if (typeof callback === 'function') { + + //Pull out the defined dependencies and pass the ordered + //values to the callback. + //Default to [require, exports, module] if no deps + deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; + for (i = 0; i < deps.length; i += 1) { + map = makeMap(deps[i], relName); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = handlers.require(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = handlers.exports(name); + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = handlers.module(name); + } else if (hasProp(defined, depName) || + hasProp(waiting, depName) || + hasProp(defining, depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else { + throw new Error(name + ' missing ' + depName); + } + } + + ret = callback.apply(defined[name], args); + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef && + cjsModule.exports !== defined[name]) { + defined[name] = cjsModule.exports; + } else if (ret !== undef || !usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = require = req = function (deps, callback, relName, forceSync, alt) { + if (typeof deps === "string") { + if (handlers[deps]) { + //callback in this case is really relName + return handlers[deps](callback); + } + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, callback).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + config = deps; + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = relName; + relName = null; + } else { + deps = undef; + } + } + + //Support require(['a']) + callback = callback || function () {}; + + //If relName is a function, it is an errback handler, + //so remove it. + if (typeof relName === 'function') { + relName = forceSync; + forceSync = alt; + } + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + //Using a non-zero value because of concern for what old browsers + //do, and latest browsers "upgrade" to 4 if lower value is used: + //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: + //If want a value immediately, use require('id') instead -- something + //that works in almond on the global level, but not guaranteed and + //unlikely to work in other AMD implementations. + setTimeout(function () { + main(undef, deps, callback, relName); + }, 4); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function (cfg) { + config = cfg; + if (config.deps) { + req(config.deps, config.callback); + } + return req; + }; + + define = function (name, deps, callback) { + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + if (!hasProp(defined, name) && !hasProp(waiting, name)) { + waiting[name] = [name, deps, callback]; + } + }; + + define.amd = { + jQuery: true + }; +}()); diff --git a/v3/js/togetherjs/togetherjs/libs/jquery-1.8.3.min.js b/v3/js/togetherjs/togetherjs/libs/jquery-1.8.3.min.js new file mode 100644 index 000000000..e60a9c456 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/jquery-1.8.3.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function (){ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); +jQuery.noConflict(true); +})(); diff --git a/v3/js/togetherjs/togetherjs/libs/require-nomin.js b/v3/js/togetherjs/togetherjs/libs/require-nomin.js new file mode 100644 index 000000000..52c2b076b --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/require-nomin.js @@ -0,0 +1,2053 @@ +/** vim: et:ts=4:sw=4:sts=4 + * @license RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/requirejs for details + */ +//Not using strict: uneven strict support in browsers, #392, and causes +//problems with requirejs.exec()/transpiler plugins that may not be strict. +/*jslint regexp: true, nomen: true, sloppy: true */ +/*global window, navigator, document, importScripts, setTimeout, opera */ + +var requirejs, require, define; +(function (global) { + var req, s, head, baseElement, dataMain, src, + interactiveScript, currentlyAddingScript, mainScript, subPath, + version = '2.1.8', + commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, + cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, + jsSuffixRegExp = /\.js$/, + currDirRegExp = /^\.\//, + op = Object.prototype, + ostring = op.toString, + hasOwn = op.hasOwnProperty, + ap = Array.prototype, + apsp = ap.splice, + isBrowser = !!(typeof window !== 'undefined' && navigator && window.document), + isWebWorker = !isBrowser && typeof importScripts !== 'undefined', + //PS3 indicates loaded and complete, but need to wait for complete + //specifically. Sequence is 'loading', 'loaded', execution, + // then 'complete'. The UA check is unfortunate, but not sure how + //to feature test w/o causing perf issues. + readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? + /^complete$/ : /^(complete|loaded)$/, + defContextName = '_', + //Oh the tragedy, detecting opera. See the usage of isOpera for reason. + isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', + contexts = {}, + cfg = {}, + globalDefQueue = [], + useInteractive = false; + + function isFunction(it) { + return ostring.call(it) === '[object Function]'; + } + + function isArray(it) { + return ostring.call(it) === '[object Array]'; + } + + /** + * Helper function for iterating over an array. If the func returns + * a true value, it will break out of the loop. + */ + function each(ary, func) { + if (ary) { + var i; + for (i = 0; i < ary.length; i += 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + /** + * Helper function for iterating over an array backwards. If the func + * returns a true value, it will break out of the loop. + */ + function eachReverse(ary, func) { + if (ary) { + var i; + for (i = ary.length - 1; i > -1; i -= 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + function getOwn(obj, prop) { + return hasProp(obj, prop) && obj[prop]; + } + + /** + * Cycles over properties in an object and calls a function for each + * property value. If the function returns a truthy value, then the + * iteration is stopped. + */ + function eachProp(obj, func) { + var prop; + for (prop in obj) { + if (hasProp(obj, prop)) { + if (func(obj[prop], prop)) { + break; + } + } + } + } + + /** + * Simple function to mix in properties from source into target, + * but only if target does not already have a property of the same name. + */ + function mixin(target, source, force, deepStringMixin) { + if (source) { + eachProp(source, function (value, prop) { + if (force || !hasProp(target, prop)) { + if (deepStringMixin && typeof value !== 'string') { + if (!target[prop]) { + target[prop] = {}; + } + mixin(target[prop], value, force, deepStringMixin); + } else { + target[prop] = value; + } + } + }); + } + return target; + } + + //Similar to Function.prototype.bind, but the 'this' object is specified + //first, since it is easier to read/figure out what 'this' will be. + function bind(obj, fn) { + return function () { + return fn.apply(obj, arguments); + }; + } + + function scripts() { + return document.getElementsByTagName('script'); + } + + function defaultOnError(err) { + throw err; + } + + //Allow getting a global that expressed in + //dot notation, like 'a.b.c'. + function getGlobal(value) { + if (!value) { + return value; + } + var g = global; + each(value.split('.'), function (part) { + g = g[part]; + }); + return g; + } + + /** + * Constructs an error with a pointer to an URL with more information. + * @param {String} id the error ID that maps to an ID on a web page. + * @param {String} message human readable error. + * @param {Error} [err] the original error, if there is one. + * + * @returns {Error} + */ + function makeError(id, msg, err, requireModules) { + var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); + e.requireType = id; + e.requireModules = requireModules; + if (err) { + e.originalError = err; + } + return e; + } + + if (typeof define !== 'undefined') { + //If a define is already in play via another AMD loader, + //do not overwrite. + return; + } + + if (typeof requirejs !== 'undefined') { + if (isFunction(requirejs)) { + //Do not overwrite and existing requirejs instance. + return; + } + cfg = requirejs; + requirejs = undefined; + } + + //Allow for a require config object + if (typeof require !== 'undefined' && !isFunction(require)) { + //assume it is a config object. + cfg = require; + require = undefined; + } + + function newContext(contextName) { + var inCheckLoaded, Module, context, handlers, + checkLoadedTimeoutId, + config = { + //Defaults. Do not set a default for map + //config to speed up normalize(), which + //will run faster if there is no default. + waitSeconds: 7, + baseUrl: './', + paths: {}, + pkgs: {}, + shim: {}, + config: {} + }, + registry = {}, + //registry of just enabled modules, to speed + //cycle breaking code when lots of modules + //are registered, but not activated. + enabledRegistry = {}, + undefEvents = {}, + defQueue = [], + defined = {}, + urlFetched = {}, + requireCounter = 1, + unnormalizedCounter = 1; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; ary[i]; i += 1) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @param {Boolean} applyMap apply the map config to the value. Should + * only be done if this normalization is for a dependency ID. + * @returns {String} normalized name + */ + function normalize(name, baseName, applyMap) { + var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, + foundMap, foundI, foundStarMap, starI, + baseParts = baseName && baseName.split('/'), + normalizedBaseParts = baseParts, + map = config.map, + starMap = map && map['*']; + + //Adjust any relative paths. + if (name && name.charAt(0) === '.') { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + if (getOwn(config.pkgs, baseName)) { + //If the baseName is a package name, then just treat it as one + //name to concat the name with. + normalizedBaseParts = baseParts = [baseName]; + } else { + //Convert baseName to array, and lop off the last part, + //so that . matches that 'directory' and not name of the baseName's + //module. For instance, baseName of 'one/two/three', maps to + //'one/two/three.js', but we want the directory, 'one/two' for + //this normalization. + normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); + } + + name = normalizedBaseParts.concat(name.split('/')); + trimDots(name); + + //Some use of packages may use a . path to reference the + //'main' module name, so normalize for that. + pkgConfig = getOwn(config.pkgs, (pkgName = name[0])); + name = name.join('/'); + if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { + name = pkgName; + } + } else if (name.indexOf('./') === 0) { + // No baseName, so this is ID is resolved relative + // to baseUrl, pull off the leading dot. + name = name.substring(2); + } + } + + //Apply map config if available. + if (applyMap && map && (baseParts || starMap)) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join('/'); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = getOwn(map, baseParts.slice(0, j).join('/')); + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = getOwn(mapValue, nameSegment); + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { + foundStarMap = getOwn(starMap, nameSegment); + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function removeScript(name) { + if (isBrowser) { + each(scripts(), function (scriptNode) { + if (scriptNode.getAttribute('data-requiremodule') === name && + scriptNode.getAttribute('data-requirecontext') === context.contextName) { + scriptNode.parentNode.removeChild(scriptNode); + return true; + } + }); + } + } + + function hasPathFallback(id) { + var pathConfig = getOwn(config.paths, id); + if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { + removeScript(id); + //Pop off the first array value, since it failed, and + //retry + pathConfig.shift(); + context.require.undef(id); + context.require([id]); + return true; + } + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Creates a module mapping that includes plugin prefix, module + * name, and path. If parentModuleMap is provided it will + * also normalize the name via require.normalize() + * + * @param {String} name the module name + * @param {String} [parentModuleMap] parent module map + * for the module name, used to resolve relative names. + * @param {Boolean} isNormalized: is the ID already normalized. + * This is true if this call is done for a define() module ID. + * @param {Boolean} applyMap: apply the map config to the ID. + * Should only be true if this map is for a dependency. + * + * @returns {Object} + */ + function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { + var url, pluginModule, suffix, nameParts, + prefix = null, + parentName = parentModuleMap ? parentModuleMap.name : null, + originalName = name, + isDefine = true, + normalizedName = ''; + + //If no name, then it means it is a require call, generate an + //internal name. + if (!name) { + isDefine = false; + name = '_@r' + (requireCounter += 1); + } + + nameParts = splitPrefix(name); + prefix = nameParts[0]; + name = nameParts[1]; + + if (prefix) { + prefix = normalize(prefix, parentName, applyMap); + pluginModule = getOwn(defined, prefix); + } + + //Account for relative paths if there is a base name. + if (name) { + if (prefix) { + if (pluginModule && pluginModule.normalize) { + //Plugin is loaded, use its normalize method. + normalizedName = pluginModule.normalize(name, function (name) { + return normalize(name, parentName, applyMap); + }); + } else { + normalizedName = normalize(name, parentName, applyMap); + } + } else { + //A regular module. + normalizedName = normalize(name, parentName, applyMap); + + //Normalized name may be a plugin ID due to map config + //application in normalize. The map config values must + //already be normalized, so do not need to redo that part. + nameParts = splitPrefix(normalizedName); + prefix = nameParts[0]; + normalizedName = nameParts[1]; + isNormalized = true; + + url = context.nameToUrl(normalizedName); + } + } + + //If the id is a plugin id that cannot be determined if it needs + //normalization, stamp it with a unique ID so two matching relative + //ids that may conflict can be separate. + suffix = prefix && !pluginModule && !isNormalized ? + '_unnormalized' + (unnormalizedCounter += 1) : + ''; + + return { + prefix: prefix, + name: normalizedName, + parentMap: parentModuleMap, + unnormalized: !!suffix, + url: url, + originalName: originalName, + isDefine: isDefine, + id: (prefix ? + prefix + '!' + normalizedName : + normalizedName) + suffix + }; + } + + function getModule(depMap) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (!mod) { + mod = registry[id] = new context.Module(depMap); + } + + return mod; + } + + function on(depMap, name, fn) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (hasProp(defined, id) && + (!mod || mod.defineEmitComplete)) { + if (name === 'defined') { + fn(defined[id]); + } + } else { + mod = getModule(depMap); + if (mod.error && name === 'error') { + fn(mod.error); + } else { + mod.on(name, fn); + } + } + } + + function onError(err, errback) { + var ids = err.requireModules, + notified = false; + + if (errback) { + errback(err); + } else { + each(ids, function (id) { + var mod = getOwn(registry, id); + if (mod) { + //Set error on module, so it skips timeout checks. + mod.error = err; + if (mod.events.error) { + notified = true; + mod.emit('error', err); + } + } + }); + + if (!notified) { + req.onError(err); + } + } + } + + /** + * Internal method to transfer globalQueue items to this context's + * defQueue. + */ + function takeGlobalQueue() { + //Push all the globalDefQueue items into the context's defQueue + if (globalDefQueue.length) { + //Array splice in the values since the context code has a + //local var ref to defQueue, so cannot just reassign the one + //on context. + apsp.apply(defQueue, + [defQueue.length - 1, 0].concat(globalDefQueue)); + globalDefQueue = []; + } + } + + handlers = { + 'require': function (mod) { + if (mod.require) { + return mod.require; + } else { + return (mod.require = context.makeRequire(mod.map)); + } + }, + 'exports': function (mod) { + mod.usingExports = true; + if (mod.map.isDefine) { + if (mod.exports) { + return mod.exports; + } else { + return (mod.exports = defined[mod.map.id] = {}); + } + } + }, + 'module': function (mod) { + if (mod.module) { + return mod.module; + } else { + return (mod.module = { + id: mod.map.id, + uri: mod.map.url, + config: function () { + var c, + pkg = getOwn(config.pkgs, mod.map.id); + // For packages, only support config targeted + // at the main module. + c = pkg ? getOwn(config.config, mod.map.id + '/' + pkg.main) : + getOwn(config.config, mod.map.id); + return c || {}; + }, + exports: defined[mod.map.id] + }); + } + } + }; + + function cleanRegistry(id) { + //Clean up machinery used for waiting modules. + delete registry[id]; + delete enabledRegistry[id]; + } + + function breakCycle(mod, traced, processed) { + var id = mod.map.id; + + if (mod.error) { + mod.emit('error', mod.error); + } else { + traced[id] = true; + each(mod.depMaps, function (depMap, i) { + var depId = depMap.id, + dep = getOwn(registry, depId); + + //Only force things that have not completed + //being defined, so still in the registry, + //and only if it has not been matched up + //in the module already. + if (dep && !mod.depMatched[i] && !processed[depId]) { + if (getOwn(traced, depId)) { + mod.defineDep(i, defined[depId]); + mod.check(); //pass false? + } else { + breakCycle(dep, traced, processed); + } + } + }); + processed[id] = true; + } + } + + function checkLoaded() { + var map, modId, err, usingPathFallback, + waitInterval = config.waitSeconds * 1000, + //It is possible to disable the wait interval by using waitSeconds of 0. + expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), + noLoads = [], + reqCalls = [], + stillLoading = false, + needCycleCheck = true; + + //Do not bother if this call was a result of a cycle break. + if (inCheckLoaded) { + return; + } + + inCheckLoaded = true; + + //Figure out the state of all the modules. + eachProp(enabledRegistry, function (mod) { + map = mod.map; + modId = map.id; + + //Skip things that are not enabled or in error state. + if (!mod.enabled) { + return; + } + + if (!map.isDefine) { + reqCalls.push(mod); + } + + if (!mod.error) { + //If the module should be executed, and it has not + //been inited and time is up, remember it. + if (!mod.inited && expired) { + if (hasPathFallback(modId)) { + usingPathFallback = true; + stillLoading = true; + } else { + noLoads.push(modId); + removeScript(modId); + } + } else if (!mod.inited && mod.fetched && map.isDefine) { + stillLoading = true; + if (!map.prefix) { + //No reason to keep looking for unfinished + //loading. If the only stillLoading is a + //plugin resource though, keep going, + //because it may be that a plugin resource + //is waiting on a non-plugin cycle. + return (needCycleCheck = false); + } + } + } + }); + + if (expired && noLoads.length) { + //If wait time expired, throw error of unloaded modules. + err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); + err.contextName = context.contextName; + return onError(err); + } + + //Not expired, check for a cycle. + if (needCycleCheck) { + each(reqCalls, function (mod) { + breakCycle(mod, {}, {}); + }); + } + + //If still waiting on loads, and the waiting load is something + //other than a plugin resource, or there are still outstanding + //scripts, then just try back later. + if ((!expired || usingPathFallback) && stillLoading) { + //Something is still waiting to load. Wait for it, but only + //if a timeout is not already in effect. + if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { + checkLoadedTimeoutId = setTimeout(function () { + checkLoadedTimeoutId = 0; + checkLoaded(); + }, 50); + } + } + + inCheckLoaded = false; + } + + Module = function (map) { + this.events = getOwn(undefEvents, map.id) || {}; + this.map = map; + this.shim = getOwn(config.shim, map.id); + this.depExports = []; + this.depMaps = []; + this.depMatched = []; + this.pluginMaps = {}; + this.depCount = 0; + + /* this.exports this.factory + this.depMaps = [], + this.enabled, this.fetched + */ + }; + + Module.prototype = { + init: function (depMaps, factory, errback, options) { + options = options || {}; + + //Do not do more inits if already done. Can happen if there + //are multiple define calls for the same module. That is not + //a normal, common case, but it is also not unexpected. + if (this.inited) { + return; + } + + this.factory = factory; + + if (errback) { + //Register for errors on this module. + this.on('error', errback); + } else if (this.events.error) { + //If no errback already, but there are error listeners + //on this module, set up an errback to pass to the deps. + errback = bind(this, function (err) { + this.emit('error', err); + }); + } + + //Do a copy of the dependency array, so that + //source inputs are not modified. For example + //"shim" deps are passed in here directly, and + //doing a direct modification of the depMaps array + //would affect that config. + this.depMaps = depMaps && depMaps.slice(0); + + this.errback = errback; + + //Indicate this module has be initialized + this.inited = true; + + this.ignore = options.ignore; + + //Could have option to init this module in enabled mode, + //or could have been previously marked as enabled. However, + //the dependencies are not known until init is called. So + //if enabled previously, now trigger dependencies as enabled. + if (options.enabled || this.enabled) { + //Enable this module and dependencies. + //Will call this.check() + this.enable(); + } else { + this.check(); + } + }, + + defineDep: function (i, depExports) { + //Because of cycles, defined callback for a given + //export can be called more than once. + if (!this.depMatched[i]) { + this.depMatched[i] = true; + this.depCount -= 1; + this.depExports[i] = depExports; + } + }, + + fetch: function () { + if (this.fetched) { + return; + } + this.fetched = true; + + context.startTime = (new Date()).getTime(); + + var map = this.map; + + //If the manager is for a plugin managed resource, + //ask the plugin to load it now. + if (this.shim) { + context.makeRequire(this.map, { + enableBuildCallback: true + })(this.shim.deps || [], bind(this, function () { + return map.prefix ? this.callPlugin() : this.load(); + })); + } else { + //Regular dependency. + return map.prefix ? this.callPlugin() : this.load(); + } + }, + + load: function () { + var url = this.map.url; + + //Regular dependency. + if (!urlFetched[url]) { + urlFetched[url] = true; + context.load(this.map.id, url); + } + }, + + /** + * Checks if the module is ready to define itself, and if so, + * define it. + */ + check: function () { + if (!this.enabled || this.enabling) { + return; + } + + var err, cjsModule, + id = this.map.id, + depExports = this.depExports, + exports = this.exports, + factory = this.factory; + + if (!this.inited) { + this.fetch(); + } else if (this.error) { + this.emit('error', this.error); + } else if (!this.defining) { + //The factory could trigger another require call + //that would result in checking this module to + //define itself again. If already in the process + //of doing that, skip this work. + this.defining = true; + + if (this.depCount < 1 && !this.defined) { + if (isFunction(factory)) { + //If there is an error listener, favor passing + //to that instead of throwing an error. However, + //only do it for define()'d modules. require + //errbacks should not be called for failures in + //their callbacks (#699). However if a global + //onError is set, use that. + if ((this.events.error && this.map.isDefine) || + req.onError !== defaultOnError) { + try { + exports = context.execCb(id, factory, depExports, exports); + } catch (e) { + err = e; + } + } else { + exports = context.execCb(id, factory, depExports, exports); + } + + if (this.map.isDefine) { + //If setting exports via 'module' is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + cjsModule = this.module; + if (cjsModule && + cjsModule.exports !== undefined && + //Make sure it is not already the exports value + cjsModule.exports !== this.exports) { + exports = cjsModule.exports; + } else if (exports === undefined && this.usingExports) { + //exports already set the defined value. + exports = this.exports; + } + } + + if (err) { + err.requireMap = this.map; + err.requireModules = this.map.isDefine ? [this.map.id] : null; + err.requireType = this.map.isDefine ? 'define' : 'require'; + return onError((this.error = err)); + } + + } else { + //Just a literal value + exports = factory; + } + + this.exports = exports; + + if (this.map.isDefine && !this.ignore) { + defined[id] = exports; + + if (req.onResourceLoad) { + req.onResourceLoad(context, this.map, this.depMaps); + } + } + + //Clean up + cleanRegistry(id); + + this.defined = true; + } + + //Finished the define stage. Allow calling check again + //to allow define notifications below in the case of a + //cycle. + this.defining = false; + + if (this.defined && !this.defineEmitted) { + this.defineEmitted = true; + this.emit('defined', this.exports); + this.defineEmitComplete = true; + } + + } + }, + + callPlugin: function () { + var map = this.map, + id = map.id, + //Map already normalized the prefix. + pluginMap = makeModuleMap(map.prefix); + + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(pluginMap); + + on(pluginMap, 'defined', bind(this, function (plugin) { + var load, normalizedMap, normalizedMod, + name = this.map.name, + parentName = this.map.parentMap ? this.map.parentMap.name : null, + localRequire = context.makeRequire(map.parentMap, { + enableBuildCallback: true + }); + + //If current map is not normalized, wait for that + //normalized name to load instead of continuing. + if (this.map.unnormalized) { + //Normalize the ID if the plugin allows it. + if (plugin.normalize) { + name = plugin.normalize(name, function (name) { + return normalize(name, parentName, true); + }) || ''; + } + + //prefix and name should already be normalized, no need + //for applying map config again either. + normalizedMap = makeModuleMap(map.prefix + '!' + name, + this.map.parentMap); + on(normalizedMap, + 'defined', bind(this, function (value) { + this.init([], function () { return value; }, null, { + enabled: true, + ignore: true + }); + })); + + normalizedMod = getOwn(registry, normalizedMap.id); + if (normalizedMod) { + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(normalizedMap); + + if (this.events.error) { + normalizedMod.on('error', bind(this, function (err) { + this.emit('error', err); + })); + } + normalizedMod.enable(); + } + + return; + } + + load = bind(this, function (value) { + this.init([], function () { return value; }, null, { + enabled: true + }); + }); + + load.error = bind(this, function (err) { + this.inited = true; + this.error = err; + err.requireModules = [id]; + + //Remove temp unnormalized modules for this module, + //since they will never be resolved otherwise now. + eachProp(registry, function (mod) { + if (mod.map.id.indexOf(id + '_unnormalized') === 0) { + cleanRegistry(mod.map.id); + } + }); + + onError(err); + }); + + //Allow plugins to load other code without having to know the + //context or how to 'complete' the load. + load.fromText = bind(this, function (text, textAlt) { + /*jslint evil: true */ + var moduleName = map.name, + moduleMap = makeModuleMap(moduleName), + hasInteractive = useInteractive; + + //As of 2.1.0, support just passing the text, to reinforce + //fromText only being called once per resource. Still + //support old style of passing moduleName but discard + //that moduleName in favor of the internal ref. + if (textAlt) { + text = textAlt; + } + + //Turn off interactive script matching for IE for any define + //calls in the text, then turn it back on at the end. + if (hasInteractive) { + useInteractive = false; + } + + //Prime the system by creating a module instance for + //it. + getModule(moduleMap); + + //Transfer any config to this other module. + if (hasProp(config.config, id)) { + config.config[moduleName] = config.config[id]; + } + + try { + req.exec(text); + } catch (e) { + return onError(makeError('fromtexteval', + 'fromText eval for ' + id + + ' failed: ' + e, + e, + [id])); + } + + if (hasInteractive) { + useInteractive = true; + } + + //Mark this as a dependency for the plugin + //resource + this.depMaps.push(moduleMap); + + //Support anonymous modules. + context.completeLoad(moduleName); + + //Bind the value of that module to the value for this + //resource ID. + localRequire([moduleName], load); + }); + + //Use parentName here since the plugin's name is not reliable, + //could be some weird string with no path that actually wants to + //reference the parentName's path. + plugin.load(map.name, localRequire, load, config); + })); + + context.enable(pluginMap, this); + this.pluginMaps[pluginMap.id] = pluginMap; + }, + + enable: function () { + enabledRegistry[this.map.id] = this; + this.enabled = true; + + //Set flag mentioning that the module is enabling, + //so that immediate calls to the defined callbacks + //for dependencies do not trigger inadvertent load + //with the depCount still being zero. + this.enabling = true; + + //Enable each dependency + each(this.depMaps, bind(this, function (depMap, i) { + var id, mod, handler; + + if (typeof depMap === 'string') { + //Dependency needs to be converted to a depMap + //and wired up to this module. + depMap = makeModuleMap(depMap, + (this.map.isDefine ? this.map : this.map.parentMap), + false, + !this.skipMap); + this.depMaps[i] = depMap; + + handler = getOwn(handlers, depMap.id); + + if (handler) { + this.depExports[i] = handler(this); + return; + } + + this.depCount += 1; + + on(depMap, 'defined', bind(this, function (depExports) { + this.defineDep(i, depExports); + this.check(); + })); + + if (this.errback) { + on(depMap, 'error', bind(this, this.errback)); + } + } + + id = depMap.id; + mod = registry[id]; + + //Skip special modules like 'require', 'exports', 'module' + //Also, don't call enable if it is already enabled, + //important in circular dependency cases. + if (!hasProp(handlers, id) && mod && !mod.enabled) { + context.enable(depMap, this); + } + })); + + //Enable each plugin that is used in + //a dependency + eachProp(this.pluginMaps, bind(this, function (pluginMap) { + var mod = getOwn(registry, pluginMap.id); + if (mod && !mod.enabled) { + context.enable(pluginMap, this); + } + })); + + this.enabling = false; + + this.check(); + }, + + on: function (name, cb) { + var cbs = this.events[name]; + if (!cbs) { + cbs = this.events[name] = []; + } + cbs.push(cb); + }, + + emit: function (name, evt) { + each(this.events[name], function (cb) { + cb(evt); + }); + if (name === 'error') { + //Now that the error handler was triggered, remove + //the listeners, since this broken Module instance + //can stay around for a while in the registry. + delete this.events[name]; + } + } + }; + + function callGetModule(args) { + //Skip modules already defined. + if (!hasProp(defined, args[0])) { + getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); + } + } + + function removeListener(node, func, name, ieName) { + //Favor detachEvent because of IE9 + //issue, see attachEvent/addEventListener comment elsewhere + //in this file. + if (node.detachEvent && !isOpera) { + //Probably IE. If not it will throw an error, which will be + //useful to know. + if (ieName) { + node.detachEvent(ieName, func); + } + } else { + node.removeEventListener(name, func, false); + } + } + + /** + * Given an event from a script node, get the requirejs info from it, + * and then removes the event listeners on the node. + * @param {Event} evt + * @returns {Object} + */ + function getScriptData(evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + var node = evt.currentTarget || evt.srcElement; + + //Remove the listeners once here. + removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); + removeListener(node, context.onScriptError, 'error'); + + return { + node: node, + id: node && node.getAttribute('data-requiremodule') + }; + } + + function intakeDefines() { + var args; + + //Any defined modules in the global queue, intake them now. + takeGlobalQueue(); + + //Make sure any remaining defQueue items get properly processed. + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); + } else { + //args are id, deps, factory. Should be normalized by the + //define() function. + callGetModule(args); + } + } + } + + context = { + config: config, + contextName: contextName, + registry: registry, + defined: defined, + urlFetched: urlFetched, + defQueue: defQueue, + Module: Module, + makeModuleMap: makeModuleMap, + nextTick: req.nextTick, + onError: onError, + + /** + * Set a configuration for the context. + * @param {Object} cfg config object to integrate. + */ + configure: function (cfg) { + //Make sure the baseUrl ends in a slash. + if (cfg.baseUrl) { + if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { + cfg.baseUrl += '/'; + } + } + + //Save off the paths and packages since they require special processing, + //they are additive. + var pkgs = config.pkgs, + shim = config.shim, + objs = { + paths: true, + config: true, + map: true + }; + + eachProp(cfg, function (value, prop) { + if (objs[prop]) { + if (prop === 'map') { + if (!config.map) { + config.map = {}; + } + mixin(config[prop], value, true, true); + } else { + mixin(config[prop], value, true); + } + } else { + config[prop] = value; + } + }); + + //Merge shim + if (cfg.shim) { + eachProp(cfg.shim, function (value, id) { + //Normalize the structure + if (isArray(value)) { + value = { + deps: value + }; + } + if ((value.exports || value.init) && !value.exportsFn) { + value.exportsFn = context.makeShimExports(value); + } + shim[id] = value; + }); + config.shim = shim; + } + + //Adjust packages if necessary. + if (cfg.packages) { + each(cfg.packages, function (pkgObj) { + var location; + + pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; + location = pkgObj.location; + + //Create a brand new object on pkgs, since currentPackages can + //be passed in again, and config.pkgs is the internal transformed + //state for all package configs. + pkgs[pkgObj.name] = { + name: pkgObj.name, + location: location || pkgObj.name, + //Remove leading dot in main, so main paths are normalized, + //and remove any trailing .js, since different package + //envs have different conventions: some use a module name, + //some use a file name. + main: (pkgObj.main || 'main') + .replace(currDirRegExp, '') + .replace(jsSuffixRegExp, '') + }; + }); + + //Done with modifications, assing packages back to context config + config.pkgs = pkgs; + } + + //If there are any "waiting to execute" modules in the registry, + //update the maps for them, since their info, like URLs to load, + //may have changed. + eachProp(registry, function (mod, id) { + //If module already has init called, since it is too + //late to modify them, and ignore unnormalized ones + //since they are transient. + if (!mod.inited && !mod.map.unnormalized) { + mod.map = makeModuleMap(id); + } + }); + + //If a deps array or a config callback is specified, then call + //require with those args. This is useful when require is defined as a + //config object before require.js is loaded. + if (cfg.deps || cfg.callback) { + context.require(cfg.deps || [], cfg.callback); + } + }, + + makeShimExports: function (value) { + function fn() { + var ret; + if (value.init) { + ret = value.init.apply(global, arguments); + } + return ret || (value.exports && getGlobal(value.exports)); + } + return fn; + }, + + makeRequire: function (relMap, options) { + options = options || {}; + + function localRequire(deps, callback, errback) { + var id, map, requireMod; + + if (options.enableBuildCallback && callback && isFunction(callback)) { + callback.__requireJsBuild = true; + } + + if (typeof deps === 'string') { + if (isFunction(callback)) { + //Invalid call + return onError(makeError('requireargs', 'Invalid require call'), errback); + } + + //If require|exports|module are requested, get the + //value for them from the special handlers. Caveat: + //this only works while module is being defined. + if (relMap && hasProp(handlers, deps)) { + return handlers[deps](registry[relMap.id]); + } + + //Synchronous access to one module. If require.get is + //available (as in the Node adapter), prefer that. + if (req.get) { + return req.get(context, deps, relMap, localRequire); + } + + //Normalize module name, if it contains . or .. + map = makeModuleMap(deps, relMap, false, true); + id = map.id; + + if (!hasProp(defined, id)) { + return onError(makeError('notloaded', 'Module name "' + + id + + '" has not been loaded yet for context: ' + + contextName + + (relMap ? '' : '. Use require([])'))); + } + return defined[id]; + } + + //Grab defines waiting in the global queue. + intakeDefines(); + + //Mark all the dependencies as needing to be loaded. + context.nextTick(function () { + //Some defines could have been added since the + //require call, collect them. + intakeDefines(); + + requireMod = getModule(makeModuleMap(null, relMap)); + + //Store if map config should be applied to this require + //call for dependencies. + requireMod.skipMap = options.skipMap; + + requireMod.init(deps, callback, errback, { + enabled: true + }); + + checkLoaded(); + }); + + return localRequire; + } + + mixin(localRequire, { + isBrowser: isBrowser, + + /** + * Converts a module name + .extension into an URL path. + * *Requires* the use of a module name. It does not support using + * plain URLs like nameToUrl. + */ + toUrl: function (moduleNamePlusExt) { + var ext, + index = moduleNamePlusExt.lastIndexOf('.'), + segment = moduleNamePlusExt.split('/')[0], + isRelative = segment === '.' || segment === '..'; + + //Have a file extension alias, and it is not the + //dots from a relative path. + if (index !== -1 && (!isRelative || index > 1)) { + ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); + moduleNamePlusExt = moduleNamePlusExt.substring(0, index); + } + + return context.nameToUrl(normalize(moduleNamePlusExt, + relMap && relMap.id, true), ext, true); + }, + + defined: function (id) { + return hasProp(defined, makeModuleMap(id, relMap, false, true).id); + }, + + specified: function (id) { + id = makeModuleMap(id, relMap, false, true).id; + return hasProp(defined, id) || hasProp(registry, id); + } + }); + + //Only allow undef on top level require calls + if (!relMap) { + localRequire.undef = function (id) { + //Bind any waiting define() calls to this context, + //fix for #408 + takeGlobalQueue(); + + var map = makeModuleMap(id, relMap, true), + mod = getOwn(registry, id); + + delete defined[id]; + delete urlFetched[map.url]; + delete undefEvents[id]; + + if (mod) { + //Hold on to listeners in case the + //module will be attempted to be reloaded + //using a different config. + if (mod.events.defined) { + undefEvents[id] = mod.events; + } + + cleanRegistry(id); + } + }; + } + + return localRequire; + }, + + /** + * Called to enable a module if it is still in the registry + * awaiting enablement. A second arg, parent, the parent module, + * is passed in for context, when this method is overriden by + * the optimizer. Not shown here to keep code compact. + */ + enable: function (depMap) { + var mod = getOwn(registry, depMap.id); + if (mod) { + getModule(depMap).enable(); + } + }, + + /** + * Internal method used by environment adapters to complete a load event. + * A load event could be a script load or just a load pass from a synchronous + * load call. + * @param {String} moduleName the name of the module to potentially complete. + */ + completeLoad: function (moduleName) { + var found, args, mod, + shim = getOwn(config.shim, moduleName) || {}, + shExports = shim.exports; + + takeGlobalQueue(); + + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + args[0] = moduleName; + //If already found an anonymous module and bound it + //to this name, then this is some other anon module + //waiting for its completeLoad to fire. + if (found) { + break; + } + found = true; + } else if (args[0] === moduleName) { + //Found matching define call for this script! + found = true; + } + + callGetModule(args); + } + + //Do this after the cycle of callGetModule in case the result + //of those calls/init calls changes the registry. + mod = getOwn(registry, moduleName); + + if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { + if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { + if (hasPathFallback(moduleName)) { + return; + } else { + return onError(makeError('nodefine', + 'No define call for ' + moduleName, + null, + [moduleName])); + } + } else { + //A script that does not call define(), so just simulate + //the call for it. + callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); + } + } + + checkLoaded(); + }, + + /** + * Converts a module name to a file path. Supports cases where + * moduleName may actually be just an URL. + * Note that it **does not** call normalize on the moduleName, + * it is assumed to have already been normalized. This is an + * internal API, not a public one. Use toUrl for the public API. + */ + nameToUrl: function (moduleName, ext, skipExt) { + var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, + parentPath; + + //If a colon is in the URL, it indicates a protocol is used and it is just + //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) + //or ends with .js, then assume the user meant to use an url and not a module id. + //The slash is important for protocol-less URLs as well as full paths. + if (req.jsExtRegExp.test(moduleName)) { + //Just a plain path, not module name lookup, so just return it. + //Add extension if it is included. This is a bit wonky, only non-.js things pass + //an extension, this method probably needs to be reworked. + url = moduleName + (ext || ''); + } else { + //A module that needs to be converted to a path. + paths = config.paths; + pkgs = config.pkgs; + + syms = moduleName.split('/'); + //For each module name segment, see if there is a path + //registered for it. Start with most specific name + //and work up from it. + for (i = syms.length; i > 0; i -= 1) { + parentModule = syms.slice(0, i).join('/'); + pkg = getOwn(pkgs, parentModule); + parentPath = getOwn(paths, parentModule); + if (parentPath) { + //If an array, it means there are a few choices, + //Choose the one that is desired + if (isArray(parentPath)) { + parentPath = parentPath[0]; + } + syms.splice(0, i, parentPath); + break; + } else if (pkg) { + //If module name is just the package name, then looking + //for the main module. + if (moduleName === pkg.name) { + pkgPath = pkg.location + '/' + pkg.main; + } else { + pkgPath = pkg.location; + } + syms.splice(0, i, pkgPath); + break; + } + } + + //Join the path parts together, then figure out if baseUrl is needed. + url = syms.join('/'); + url += (ext || (/\?/.test(url) || skipExt ? '' : '.js')); + url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; + } + + return config.urlArgs ? url + + ((url.indexOf('?') === -1 ? '?' : '&') + + config.urlArgs) : url; + }, + + //Delegates to req.load. Broken out as a separate function to + //allow overriding in the optimizer. + load: function (id, url) { + req.load(context, id, url); + }, + + /** + * Executes a module callback function. Broken out as a separate function + * solely to allow the build system to sequence the files in the built + * layer in the right sequence. + * + * @private + */ + execCb: function (name, callback, args, exports) { + return callback.apply(exports, args); + }, + + /** + * callback for script loads, used to check status of loading. + * + * @param {Event} evt the event from the browser for the script + * that was loaded. + */ + onScriptLoad: function (evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + if (evt.type === 'load' || + (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { + //Reset interactive script so a script node is not held onto for + //to long. + interactiveScript = null; + + //Pull out the name of the module and the context. + var data = getScriptData(evt); + context.completeLoad(data.id); + } + }, + + /** + * Callback for script errors. + */ + onScriptError: function (evt) { + var data = getScriptData(evt); + if (!hasPathFallback(data.id)) { + return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id])); + } + } + }; + + context.require = context.makeRequire(); + return context; + } + + /** + * Main entry point. + * + * If the only argument to require is a string, then the module that + * is represented by that string is fetched for the appropriate context. + * + * If the first argument is an array, then it will be treated as an array + * of dependency string names to fetch. An optional function callback can + * be specified to execute when all of those dependencies are available. + * + * Make a local req variable to help Caja compliance (it assumes things + * on a require that are not standardized), and to give a short + * name for minification/local scope use. + */ + req = requirejs = function (deps, callback, errback, optional) { + + //Find the right context, use default + var context, config, + contextName = defContextName; + + // Determine if have config object in the call. + if (!isArray(deps) && typeof deps !== 'string') { + // deps is a config object + config = deps; + if (isArray(callback)) { + // Adjust args if there are dependencies + deps = callback; + callback = errback; + errback = optional; + } else { + deps = []; + } + } + + if (config && config.context) { + contextName = config.context; + } + + context = getOwn(contexts, contextName); + if (!context) { + context = contexts[contextName] = req.s.newContext(contextName); + } + + if (config) { + context.configure(config); + } + + return context.require(deps, callback, errback); + }; + + /** + * Support require.config() to make it easier to cooperate with other + * AMD loaders on globally agreed names. + */ + req.config = function (config) { + return req(config); + }; + + /** + * Execute something after the current tick + * of the event loop. Override for other envs + * that have a better solution than setTimeout. + * @param {Function} fn function to execute later. + */ + req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { + setTimeout(fn, 4); + } : function (fn) { fn(); }; + + /** + * Export require as a global, but only if it does not already exist. + */ + if (!require) { + require = req; + } + + req.version = version; + + //Used to filter out dependencies that are already paths. + req.jsExtRegExp = /^\/|:|\?|\.js$/; + req.isBrowser = isBrowser; + s = req.s = { + contexts: contexts, + newContext: newContext + }; + + //Create default context. + req({}); + + //Exports some context-sensitive methods on global require. + each([ + 'toUrl', + 'undef', + 'defined', + 'specified' + ], function (prop) { + //Reference from contexts instead of early binding to default context, + //so that during builds, the latest instance of the default context + //with its config gets used. + req[prop] = function () { + var ctx = contexts[defContextName]; + return ctx.require[prop].apply(ctx, arguments); + }; + }); + + if (isBrowser) { + head = s.head = document.getElementsByTagName('head')[0]; + //If BASE tag is in play, using appendChild is a problem for IE6. + //When that browser dies, this can be removed. Details in this jQuery bug: + //http://dev.jquery.com/ticket/2709 + baseElement = document.getElementsByTagName('base')[0]; + if (baseElement) { + head = s.head = baseElement.parentNode; + } + } + + /** + * Any errors that require explicitly generates will be passed to this + * function. Intercept/override it if you want custom error handling. + * @param {Error} err the error object. + */ + req.onError = defaultOnError; + + /** + * Creates the node for the load command. Only used in browser envs. + */ + req.createNode = function (config, moduleName, url) { + var node = config.xhtml ? + document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : + document.createElement('script'); + node.type = config.scriptType || 'text/javascript'; + node.charset = 'utf-8'; + node.async = true; + return node; + }; + + /** + * Does the request to load a module for the browser case. + * Make this a separate function to allow other environments + * to override it. + * + * @param {Object} context the require context to find state. + * @param {String} moduleName the name of the module. + * @param {Object} url the URL to the module. + */ + req.load = function (context, moduleName, url) { + var config = (context && context.config) || {}, + node; + if (isBrowser) { + //In the browser so use a script tag + node = req.createNode(config, moduleName, url); + + node.setAttribute('data-requirecontext', context.contextName); + node.setAttribute('data-requiremodule', moduleName); + + //Set up load listener. Test attachEvent first because IE9 has + //a subtle issue in its addEventListener and script onload firings + //that do not match the behavior of all other browsers with + //addEventListener support, which fire the onload event for a + //script right after the script execution. See: + //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution + //UNFORTUNATELY Opera implements attachEvent but does not follow the script + //script execution mode. + if (node.attachEvent && + //Check if node.attachEvent is artificially added by custom script or + //natively supported by browser + //read https://github.com/jrburke/requirejs/issues/187 + //if we can NOT find [native code] then it must NOT natively supported. + //in IE8, node.attachEvent does not have toString() + //Note the test for "[native code" with no closing brace, see: + //https://github.com/jrburke/requirejs/issues/273 + !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && + !isOpera) { + //Probably IE. IE (at least 6-8) do not fire + //script onload right after executing the script, so + //we cannot tie the anonymous define call to a name. + //However, IE reports the script as being in 'interactive' + //readyState at the time of the define call. + useInteractive = true; + + node.attachEvent('onreadystatechange', context.onScriptLoad); + //It would be great to add an error handler here to catch + //404s in IE9+. However, onreadystatechange will fire before + //the error handler, so that does not help. If addEventListener + //is used, then IE will fire error before load, but we cannot + //use that pathway given the connect.microsoft.com issue + //mentioned above about not doing the 'script execute, + //then fire the script load event listener before execute + //next script' that other browsers do. + //Best hope: IE10 fixes the issues, + //and then destroys all installs of IE 6-9. + //node.attachEvent('onerror', context.onScriptError); + } else { + node.addEventListener('load', context.onScriptLoad, false); + node.addEventListener('error', context.onScriptError, false); + } + node.src = url; + + //For some cache cases in IE 6-8, the script executes before the end + //of the appendChild execution, so to tie an anonymous define + //call to the module name (which is stored on the node), hold on + //to a reference to this node, but clear after the DOM insertion. + currentlyAddingScript = node; + if (baseElement) { + head.insertBefore(node, baseElement); + } else { + head.appendChild(node); + } + currentlyAddingScript = null; + + return node; + } else if (isWebWorker) { + try { + //In a web worker, use importScripts. This is not a very + //efficient use of importScripts, importScripts will block until + //its script is downloaded and evaluated. However, if web workers + //are in play, the expectation that a build has been done so that + //only one script needs to be loaded anyway. This may need to be + //reevaluated if other use cases become common. + importScripts(url); + + //Account for anonymous modules + context.completeLoad(moduleName); + } catch (e) { + context.onError(makeError('importscripts', + 'importScripts failed for ' + + moduleName + ' at ' + url, + e, + [moduleName])); + } + } + }; + + function getInteractiveScript() { + if (interactiveScript && interactiveScript.readyState === 'interactive') { + return interactiveScript; + } + + eachReverse(scripts(), function (script) { + if (script.readyState === 'interactive') { + return (interactiveScript = script); + } + }); + return interactiveScript; + } + + //Look for a data-main script attribute, which could also adjust the baseUrl. + if (isBrowser) { + //Figure out baseUrl. Get it from the script tag with require.js in it. + eachReverse(scripts(), function (script) { + //Set the 'head' where we can append children by + //using the script's parent. + if (!head) { + head = script.parentNode; + } + + //Look for a data-main attribute to set main script for the page + //to load. If it is there, the path to data main becomes the + //baseUrl, if it is not already set. + dataMain = script.getAttribute('data-main'); + if (dataMain) { + //Preserve dataMain in case it is a path (i.e. contains '?') + mainScript = dataMain; + + //Set final baseUrl if there is not already an explicit one. + if (!cfg.baseUrl) { + //Pull off the directory of data-main for use as the + //baseUrl. + src = mainScript.split('/'); + mainScript = src.pop(); + subPath = src.length ? src.join('/') + '/' : './'; + + cfg.baseUrl = subPath; + } + + //Strip off any trailing .js since mainScript is now + //like a module name. + mainScript = mainScript.replace(jsSuffixRegExp, ''); + + //If mainScript is still a path, fall back to dataMain + if (req.jsExtRegExp.test(mainScript)) { + mainScript = dataMain; + } + + //Put the data-main script in the files to load. + cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; + + return true; + } + }); + } + + /** + * The function that handles definitions of modules. Differs from + * require() in that a string for the module should be the first argument, + * and the function to execute after dependencies are loaded should + * return a value to define the module corresponding to the first argument's + * name. + */ + define = function (name, deps, callback) { + var node, context; + + //Allow for anonymous modules + if (typeof name !== 'string') { + //Adjust args appropriately + callback = deps; + deps = name; + name = null; + } + + //This module may not have dependencies + if (!isArray(deps)) { + callback = deps; + deps = null; + } + + //If no name, and callback is a function, then figure out if it a + //CommonJS thing with dependencies. + if (!deps && isFunction(callback)) { + deps = []; + //Remove comments from the callback string, + //look for require calls, and pull them into the dependencies, + //but only if there are function args. + if (callback.length) { + callback + .toString() + .replace(commentRegExp, '') + .replace(cjsRequireRegExp, function (match, dep) { + deps.push(dep); + }); + + //May be a CommonJS thing even without require calls, but still + //could use exports, and module. Avoid doing exports and module + //work though if it just needs require. + //REQUIRES the function to expect the CommonJS variables in the + //order listed below. + deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); + } + } + + //If in IE 6-8 and hit an anonymous define() call, do the interactive + //work. + if (useInteractive) { + node = currentlyAddingScript || getInteractiveScript(); + if (node) { + if (!name) { + name = node.getAttribute('data-requiremodule'); + } + context = contexts[node.getAttribute('data-requirecontext')]; + } + } + + //Always save off evaluating the def call until the script onload handler. + //This allows multiple modules to be in a file without prematurely + //tracing dependencies, and allows for anonymous module support, + //where the module name is not known until the script onload event + //occurs. If no context, use the global queue, and get it processed + //in the onscript load callback. + (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); + }; + + define.amd = { + jQuery: true + }; + + + /** + * Executes the text. Normally just uses eval, but can be modified + * to use a better, environment-specific call. Only used for transpiling + * loader plugins, not for plain JS modules. + * @param {String} text the text to execute/evaluate. + */ + req.exec = function (text) { + /*jslint evil: true */ + return eval(text); + }; + + //Set up with config info. + req(cfg); +}(this)); diff --git a/v3/js/togetherjs/togetherjs/libs/require.js b/v3/js/togetherjs/togetherjs/libs/require.js new file mode 100644 index 000000000..7ff409d9c --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/require.js @@ -0,0 +1,36 @@ +/* + RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. + Available via the MIT or new BSD license. + see: http://github.com/jrburke/requirejs for details +*/ +var requirejs,require,define; +(function(Z){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(H(m)){if(this.events.error&&this.map.isDefine||j.onError!==aa)try{e=i.execCb(c,m,b,e)}catch(d){a=d}else e=i.execCb(c,m,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!== +this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",v(this.error=a)}else e=m;this.exports=e;if(this.map.isDefine&&!this.ignore&&(r[c]=e,j.onResourceLoad))j.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete= +!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=n(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var m,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=n(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})), +d=l(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else m=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),m.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];F(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),m.fromText=u(this,function(e,c){var d=a.name,g=n(d),B=O;c&&(e=c);B&&(O=!1);q(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{j.exec(e)}catch(ca){return v(A("fromtexteval", +"fromText eval for "+b+" failed: "+ca,ca,[b]))}B&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],m)}),e.load(a.name,h,m,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){T[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=n(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=l(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b, +a);this.check()}));this.errback&&t(a,"error",u(this,this.errback))}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));F(this.pluginMaps,u(this,function(a){var b=l(p,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:r,urlFetched:S,defQueue:G,Module:X,makeModuleMap:n, +nextTick:j.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};F(a,function(a,b){e[b]?"map"===b?(k.map||(k.map={}),Q(k[b],a,!0,!0)):Q(k[b],a,!0):k[b]=a});a.shim&&(F(a.shim,function(a,b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name, +location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);F(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=n(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Z,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return v(A("requireargs", +"Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(j.get)return j.get(i,e,a,d);g=n(e,a,!1,!0);g=g.id;return!s(r,g)?v(A("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[g]}K();i.nextTick(function(){K();k=q(n(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});C()});return d}f=f||{};Q(d,{isBrowser:z,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1h.attachEvent.toString().indexOf("[native code"))&&!W?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error", +b.onScriptError,!1)),h.src=d,K=h,C?x.insertBefore(h,C):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(l){b.onError(A("importscripts","importScripts failed for "+c+" at "+d,l,[c]))}};z&&M(document.getElementsByTagName("script"),function(b){x||(x=b.parentNode);if(J=b.getAttribute("data-main"))return q=J,t.baseUrl||(D=q.split("/"),q=D.pop(),fa=D.length?D.join("/")+"/":"./",t.baseUrl=fa),q=q.replace(ea,""),j.jsExtRegExp.test(q)&&(q=J),t.deps=t.deps?t.deps.concat(q):[q],!0}); +define=function(b,c,d){var h,j;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=null);!c&&H(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(h=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),h=P;h&&(b||(b=h.getAttribute("data-requiremodule")),j=E[h.getAttribute("data-requirecontext")])}(j?j.defQueue: +R).push([b,c,d])};define.amd={jQuery:!0};j.exec=function(b){return eval(b)};j(t)}})(this); diff --git a/v3/js/togetherjs/togetherjs/libs/tinycolor.js b/v3/js/togetherjs/togetherjs/libs/tinycolor.js new file mode 100644 index 000000000..c1f5991be --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/tinycolor.js @@ -0,0 +1,869 @@ +// TinyColor v0.9.13 +// https://github.com/bgrins/TinyColor +// 2012-11-28, Brian Grinstead, MIT License + +(function(root) { + +var trimLeft = /^[\s,#]+/, + trimRight = /\s+$/, + tinyCounter = 0, + math = Math, + mathRound = math.round, + mathMin = math.min, + mathMax = math.max, + mathRandom = math.random; + +function tinycolor (color, opts) { + + color = (color) ? color : ''; + + // If input is already a tinycolor, return itself + if (typeof color == "object" && color.hasOwnProperty("_tc_id")) { + return color; + } + + var rgb = inputToRGB(color); + var r = rgb.r, + g = rgb.g, + b = rgb.b, + a = rgb.a, + roundA = mathRound(100*a) / 100, + format = rgb.format; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (r < 1) { r = mathRound(r); } + if (g < 1) { g = mathRound(g); } + if (b < 1) { b = mathRound(b); } + + return { + ok: rgb.ok, + format: format, + _tc_id: tinyCounter++, + alpha: a, + toHsv: function() { + var hsv = rgbToHsv(r, g, b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(r, g, b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(r, g, b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a }; + }, + toHslString: function() { + var hsl = rgbToHsl(r, g, b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")"; + }, + toHex: function() { + return rgbToHex(r, g, b); + }, + toHexString: function() { + return '#' + rgbToHex(r, g, b); + }, + toRgb: function() { + return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a }; + }, + toRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" : + "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a }; + }, + toPercentageRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")"; + }, + toName: function() { + return hexNames[rgbToHex(r, g, b)] || false; + }, + toFilter: function() { + var hex = rgbToHex(r, g, b); + var secondHex = hex; + var alphaHex = Math.round(parseFloat(a) * 255).toString(16); + var secondAlphaHex = alphaHex; + var gradientType = opts && opts.gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex = s.toHex(); + secondAlphaHex = Math.round(parseFloat(s.alpha) * 255).toString(16); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr=#" + pad2(alphaHex) + hex + ",endColorstr=#" + pad2(secondAlphaHex) + secondHex + ")"; + }, + toString: function(format) { + format = format || this.format; + var formattedString = false; + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex") { + formattedString = this.toHexString(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + } + }; +} + +// If input is an object, force 1 into "1.0" to handle ratios properly +// String input requires "1.0" as input, so 1 will be treated as 1 +tinycolor.fromRatio = function(color) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + newColor[i] = convertToPercentage(color[i]); + } + color = newColor; + } + + return tinycolor(color); +}; + +// Given a string or object, convert that input to RGB +// Possible string inputs: +// +// "red" +// "#f00" or "f00" +// "#ff0000" or "ff0000" +// "rgb 255 0 0" or "rgb (255, 0, 0)" +// "rgb 1.0 0 0" or "rgb (1, 0, 0)" +// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" +// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" +// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" +// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" +// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" +// +function inputToRGB(color) { + + var rgb = { r: 255, g: 255, b: 255 }; + var a = 1; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) { + color.s = convertToPercentage(color.s); + color.v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, color.s, color.v); + ok = true; + format = "hsv"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) { + color.s = convertToPercentage(color.s); + color.l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, color.s, color.l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = parseFloat(a); + + // Handle invalid alpha characters by setting to 1 + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; +} + + + +// Conversion Functions +// -------------------- + +// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: +// + +// `rgbToRgb` +// Handle bounds / percentage checking to conform to CSS color spec +// +// *Assumes:* r, g, b in [0, 255] or [0, 1] +// *Returns:* { r, g, b } in [0, 255] +function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; +} + +// `rgbToHsl` +// Converts an RGB color value to HSL. +// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] +// *Returns:* { h, s, l } in [0,1] +function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; +} + +// `hslToRgb` +// Converts an HSL color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] +function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// `rgbToHsv` +// Converts an RGB color value to HSV +// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] +// *Returns:* { h, s, v } in [0,1] +function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; +} + +// `hsvToRgb` +// Converts an HSV color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// `rgbToHex` +// Converts an RGB color to hex +// Assumes r, g, and b are contained in the set [0, 255] +// Returns a 3 or 6 character hex +function rgbToHex(r, g, b) { + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); +} + +// `equals` +// Can be called with any tinycolor input +tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); +}; +tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); +}; + + +// Modification Functions +// ---------------------- +// Thanks to less.js for some of the basics here +// + + +tinycolor.desaturate = function (color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.s -= ((amount || 10) / 100); + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +}; +tinycolor.saturate = function (color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.s += ((amount || 10) / 100); + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +}; +tinycolor.greyscale = function(color) { + return tinycolor.desaturate(color, 100); +}; +tinycolor.lighten = function(color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.l += ((amount || 10) / 100); + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +}; +tinycolor.darken = function (color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.l -= ((amount || 10) / 100); + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +}; +tinycolor.complement = function(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); +}; + + +// Combination Functions +// --------------------- +// Thanks to jQuery xColor for some of the ideas behind these +// + +tinycolor.triad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; +}; +tinycolor.tetrad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; +}; +tinycolor.splitcomplement = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; +}; +tinycolor.analogous = function(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; +}; +tinycolor.monochromatic = function(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; +}; +// Readability based on W3C recommendations: http://www.w3.org/TR/AERT#color-contrast +// Returns object with two properties: +// .brightness: the difference in brightness between the two colors +// .color: the difference in color/hue between the two colors +// An "acceptable" color is considered to have a brightness difference of 125 and a +// color difference of 500 +tinycolor.readability = function(color1, color2) { + var a = tinycolor(color1).toRgb(), b = tinycolor(color2).toRgb(); + var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000; + var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000; + var colorDiff = ( + Math.max(a.r, b.r) - Math.min(a.r, b.r) + + Math.max(a.g, b.g) - Math.min(a.g, b.g) + + Math.max(a.b, b.b) - Math.min(a.b, b.b)); + return { + brightness: Math.abs(brightnessA - brightnessB), + color: colorDiff + }; +}; +// True if using color1 over color2 (or vice versa) is "readable" +// Based on: http://www.w3.org/TR/AERT#color-contrast +// Example: +// tinycolor.readable("#000", "#111") => false +tinycolor.readable = function(color1, color2) { + var readability = tinycolor.readability(color1, color2); + return readability.brightness > 125 && readability.color > 500; +}; +// Given a base color and a list of possible foreground or background +// colors for that base, returns the most readable color. +// Example: +// tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000" +tinycolor.mostReadable = function(baseColor, colorList) { + var bestColor; + var bestScore = 0; + var bestIsReadable = false; + for (var i=0; i < colorList.length; i++) { + var readability = tinycolor.readability(baseColor, colorList[i]); + var readable = readability.brightness > 125 && readability.color > 500; + // We normalize both around the "acceptable" breaking point, + // but rank brightness constrast higher than hue. Why? I'm + // not sure, seems reasonable. + var score = 3 * (readability.brightness / 125) + (readability.color / 500); + if ((readable && ! bestIsReadable) || + (readable && bestIsReadable && score > bestScore) || + ((! readable) && (! bestIsReadable) && score > bestScore)) { + bestIsReadable = readable; + bestScore = score; + bestColor = colorList[i]; + } + } + return bestColor; +}; + + +// Big List of Colors +// --------- +// +var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" +}; + +// Make it easy to access colors via `hexNames[hex]` +var hexNames = tinycolor.hexNames = flip(names); + + +// Utilities +// --------- + +// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` +function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; +} + +// Take input from [0, n] and return it as [0, 1] +function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); +} + +// Force a number between 0 and 1 +function clamp01(val) { + return mathMin(1, mathMax(0, val)); +} + +// Parse an integer into hex +function parseHex(val) { + return parseInt(val, 16); +} + +// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 +// +function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; +} + +// Check to see if string passed in is a percentage +function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; +} + +// Force a hex value to have 2 characters +function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; +} + +// Replace a decimal with it's percentage value +function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; +} + +var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; +})(); + +// `stringInputToObject` +// Permissive string parsing. Take in a number of formats, and output an object +// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` +function stringInputToObject(color) { + + color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0 }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseHex(match[1]), + g: parseHex(match[2]), + b: parseHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseHex(match[1] + '' + match[1]), + g: parseHex(match[2] + '' + match[2]), + b: parseHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; +} + +// Node: Export function +if (typeof module !== "undefined" && module.exports) { + module.exports = tinycolor; +} +// AMD/requirejs: Define the module +else if (typeof define !== "undefined") { + define(function () {return tinycolor;}); +} +// Browser: Expose to window +else { + root.tinycolor = tinycolor; +} + +})(this); diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/index.html b/v3/js/togetherjs/togetherjs/libs/walkabout/index.html new file mode 100644 index 000000000..03a50844c --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/index.html @@ -0,0 +1,52 @@ + + + + walkabout.js: automated randomized Javascript frontend testing + + + + + + +
+ +

Walkabout.js

+ +

walkabout.js is a library to do automated randomized Javascript + testing (you might consider it "fuzz" testing). It figures out + what the application is listening for the user to do, and does + things randomly.

+ +

For more information + see the github + page.

+ +

There is a bookmarklet for use with jQuery apps:

+ +

+ walkabout +

+ +
+ + + diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/lib/esprima.js b/v3/js/togetherjs/togetherjs/libs/walkabout/lib/esprima.js new file mode 100644 index 000000000..90d1b14bb --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/lib/esprima.js @@ -0,0 +1,3808 @@ +/* + Copyright (C) 2012 Ariya Hidayat + Copyright (C) 2012 Mathias Bynens + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Yusuke Suzuki + Copyright (C) 2012 Arpad Borsos + Copyright (C) 2011 Ariya Hidayat + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*jslint bitwise:true plusplus:true */ +/*global esprima:true, define:true, exports:true, window: true, +throwError: true, createLiteral: true, generateStatement: true, +parseAssignmentExpression: true, parseBlock: true, parseExpression: true, +parseFunctionDeclaration: true, parseFunctionExpression: true, +parseFunctionSourceElements: true, parseVariableIdentifier: true, +parseLeftHandSideExpression: true, +parseStatement: true, parseSourceElement: true */ + +(function (factory) { + 'use strict'; + + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, + // and plain browser loading, + if (typeof define === 'function' && define.amd) { + define(['exports'], factory); + } else if (typeof exports !== 'undefined') { + factory(exports); + } else { + factory((window.esprima = {})); + } +}(function (exports) { + 'use strict'; + + var Token, + TokenName, + Syntax, + PropertyKind, + Messages, + Regex, + source, + strict, + index, + lineNumber, + lineStart, + length, + buffer, + state, + extra; + + Token = { + BooleanLiteral: 1, + EOF: 2, + Identifier: 3, + Keyword: 4, + NullLiteral: 5, + NumericLiteral: 6, + Punctuator: 7, + StringLiteral: 8 + }; + + TokenName = {}; + TokenName[Token.BooleanLiteral] = 'Boolean'; + TokenName[Token.EOF] = ''; + TokenName[Token.Identifier] = 'Identifier'; + TokenName[Token.Keyword] = 'Keyword'; + TokenName[Token.NullLiteral] = 'Null'; + TokenName[Token.NumericLiteral] = 'Numeric'; + TokenName[Token.Punctuator] = 'Punctuator'; + TokenName[Token.StringLiteral] = 'String'; + + Syntax = { + AssignmentExpression: 'AssignmentExpression', + ArrayExpression: 'ArrayExpression', + BlockStatement: 'BlockStatement', + BinaryExpression: 'BinaryExpression', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DoWhileStatement: 'DoWhileStatement', + DebuggerStatement: 'DebuggerStatement', + EmptyStatement: 'EmptyStatement', + ExpressionStatement: 'ExpressionStatement', + ForStatement: 'ForStatement', + ForInStatement: 'ForInStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + Literal: 'Literal', + LabeledStatement: 'LabeledStatement', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + NewExpression: 'NewExpression', + ObjectExpression: 'ObjectExpression', + Program: 'Program', + Property: 'Property', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SwitchStatement: 'SwitchStatement', + SwitchCase: 'SwitchCase', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TryStatement: 'TryStatement', + UnaryExpression: 'UnaryExpression', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement' + }; + + PropertyKind = { + Data: 1, + Get: 2, + Set: 4 + }; + + // Error messages should be identical to V8. + Messages = { + UnexpectedToken: 'Unexpected token %0', + UnexpectedNumber: 'Unexpected number', + UnexpectedString: 'Unexpected string', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedEOS: 'Unexpected end of input', + NewlineAfterThrow: 'Illegal newline after throw', + InvalidRegExp: 'Invalid regular expression', + UnterminatedRegExp: 'Invalid regular expression: missing /', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NoCatchOrFinally: 'Missing catch or finally after try', + UnknownLabel: 'Undefined label \'%0\'', + Redeclaration: '%0 \'%1\' has already been declared', + IllegalContinue: 'Illegal continue statement', + IllegalBreak: 'Illegal break statement', + IllegalReturn: 'Illegal return statement', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictDuplicateProperty: 'Duplicate data property in object literal not allowed in strict mode', + AccessorDataProperty: 'Object literal may not have data and accessor property with the same name', + AccessorGetSet: 'Object literal may not have multiple get/set accessors with the same name', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode' + }; + + // See also tools/generate-unicode-regex.py. + Regex = { + NonAsciiIdentifierStart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]'), + NonAsciiIdentifierPart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u0800-\u082d\u0840-\u085b\u08a0\u08a2-\u08ac\u08e4-\u08fe\u0900-\u0963\u0966-\u096f\u0971-\u0977\u0979-\u097f\u0981-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c60-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d57\u0d60-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17d3\u17d7\u17dc\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191c\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19d9\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1cd0-\u1cd2\u1cd4-\u1cf6\u1d00-\u1de6\u1dfc-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200c\u200d\u203f\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099\u309a\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua697\ua69f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua827\ua840-\ua873\ua880-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua900-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a\uaa7b\uaa80-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabea\uabec\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]') + }; + + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + + function assert(condition, message) { + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + + function sliceSource(from, to) { + return source.slice(from, to); + } + + if (typeof 'esprima'[0] === 'undefined') { + sliceSource = function sliceArraySource(from, to) { + return source.slice(from, to).join(''); + }; + } + + function isDecimalDigit(ch) { + return '0123456789'.indexOf(ch) >= 0; + } + + function isHexDigit(ch) { + return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; + } + + function isOctalDigit(ch) { + return '01234567'.indexOf(ch) >= 0; + } + + + // 7.2 White Space + + function isWhiteSpace(ch) { + return (ch === ' ') || (ch === '\u0009') || (ch === '\u000B') || + (ch === '\u000C') || (ch === '\u00A0') || + (ch.charCodeAt(0) >= 0x1680 && + '\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\uFEFF'.indexOf(ch) >= 0); + } + + // 7.3 Line Terminators + + function isLineTerminator(ch) { + return (ch === '\n' || ch === '\r' || ch === '\u2028' || ch === '\u2029'); + } + + // 7.6 Identifier Names and Identifiers + + function isIdentifierStart(ch) { + return (ch === '$') || (ch === '_') || (ch === '\\') || + (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || + ((ch.charCodeAt(0) >= 0x80) && Regex.NonAsciiIdentifierStart.test(ch)); + } + + function isIdentifierPart(ch) { + return (ch === '$') || (ch === '_') || (ch === '\\') || + (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || + ((ch >= '0') && (ch <= '9')) || + ((ch.charCodeAt(0) >= 0x80) && Regex.NonAsciiIdentifierPart.test(ch)); + } + + // 7.6.1.2 Future Reserved Words + + function isFutureReservedWord(id) { + switch (id) { + + // Future reserved words. + case 'class': + case 'enum': + case 'export': + case 'extends': + case 'import': + case 'super': + return true; + } + + return false; + } + + function isStrictModeReservedWord(id) { + switch (id) { + + // Strict Mode reserved words. + case 'implements': + case 'interface': + case 'package': + case 'private': + case 'protected': + case 'public': + case 'static': + case 'yield': + case 'let': + return true; + } + + return false; + } + + function isRestrictedWord(id) { + return id === 'eval' || id === 'arguments'; + } + + // 7.6.1.1 Keywords + + function isKeyword(id) { + var keyword = false; + switch (id.length) { + case 2: + keyword = (id === 'if') || (id === 'in') || (id === 'do'); + break; + case 3: + keyword = (id === 'var') || (id === 'for') || (id === 'new') || (id === 'try'); + break; + case 4: + keyword = (id === 'this') || (id === 'else') || (id === 'case') || (id === 'void') || (id === 'with'); + break; + case 5: + keyword = (id === 'while') || (id === 'break') || (id === 'catch') || (id === 'throw'); + break; + case 6: + keyword = (id === 'return') || (id === 'typeof') || (id === 'delete') || (id === 'switch'); + break; + case 7: + keyword = (id === 'default') || (id === 'finally'); + break; + case 8: + keyword = (id === 'function') || (id === 'continue') || (id === 'debugger'); + break; + case 10: + keyword = (id === 'instanceof'); + break; + } + + if (keyword) { + return true; + } + + switch (id) { + // Future reserved words. + // 'const' is specialized as Keyword in V8. + case 'const': + return true; + + // For compatiblity to SpiderMonkey and ES.next + case 'yield': + case 'let': + return true; + } + + if (strict && isStrictModeReservedWord(id)) { + return true; + } + + return isFutureReservedWord(id); + } + + // Return the next character and move forward. + + function nextChar() { + return source[index++]; + } + + // 7.4 Comments + + function skipComment() { + var ch, blockComment, lineComment; + + blockComment = false; + lineComment = false; + + while (index < length) { + ch = source[index]; + + if (lineComment) { + ch = nextChar(); + if (isLineTerminator(ch)) { + lineComment = false; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + ++lineNumber; + lineStart = index; + } + } else if (blockComment) { + if (isLineTerminator(ch)) { + if (ch === '\r' && source[index + 1] === '\n') { + ++index; + } + ++lineNumber; + ++index; + lineStart = index; + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else { + ch = nextChar(); + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + if (ch === '*') { + ch = source[index]; + if (ch === '/') { + ++index; + blockComment = false; + } + } + } + } else if (ch === '/') { + ch = source[index + 1]; + if (ch === '/') { + index += 2; + lineComment = true; + } else if (ch === '*') { + index += 2; + blockComment = true; + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else { + break; + } + } else if (isWhiteSpace(ch)) { + ++index; + } else if (isLineTerminator(ch)) { + ++index; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + ++lineNumber; + lineStart = index; + } else { + break; + } + } + } + + function scanHexEscape(prefix) { + var i, len, ch, code = 0; + + len = (prefix === 'u') ? 4 : 2; + for (i = 0; i < len; ++i) { + if (index < length && isHexDigit(source[index])) { + ch = nextChar(); + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } else { + return ''; + } + } + return String.fromCharCode(code); + } + + function scanIdentifier() { + var ch, start, id, restore; + + ch = source[index]; + if (!isIdentifierStart(ch)) { + return; + } + + start = index; + if (ch === '\\') { + ++index; + if (source[index] !== 'u') { + return; + } + ++index; + restore = index; + ch = scanHexEscape('u'); + if (ch) { + if (ch === '\\' || !isIdentifierStart(ch)) { + return; + } + id = ch; + } else { + index = restore; + id = 'u'; + } + } else { + id = nextChar(); + } + + while (index < length) { + ch = source[index]; + if (!isIdentifierPart(ch)) { + break; + } + if (ch === '\\') { + ++index; + if (source[index] !== 'u') { + return; + } + ++index; + restore = index; + ch = scanHexEscape('u'); + if (ch) { + if (ch === '\\' || !isIdentifierPart(ch)) { + return; + } + id += ch; + } else { + index = restore; + id += 'u'; + } + } else { + id += nextChar(); + } + } + + // There is no keyword or literal with only one character. + // Thus, it must be an identifier. + if (id.length === 1) { + return { + type: Token.Identifier, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (isKeyword(id)) { + return { + type: Token.Keyword, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 7.8.1 Null Literals + + if (id === 'null') { + return { + type: Token.NullLiteral, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 7.8.2 Boolean Literals + + if (id === 'true' || id === 'false') { + return { + type: Token.BooleanLiteral, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + return { + type: Token.Identifier, + value: id, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 7.7 Punctuators + + function scanPunctuator() { + var start = index, + ch1 = source[index], + ch2, + ch3, + ch4; + + // Check for most common single-character punctuators. + + if (ch1 === ';' || ch1 === '{' || ch1 === '}') { + ++index; + return { + type: Token.Punctuator, + value: ch1, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === ',' || ch1 === '(' || ch1 === ')') { + ++index; + return { + type: Token.Punctuator, + value: ch1, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // Dot (.) can also start a floating-point number, hence the need + // to check the next character. + + ch2 = source[index + 1]; + if (ch1 === '.' && !isDecimalDigit(ch2)) { + return { + type: Token.Punctuator, + value: nextChar(), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // Peek more characters. + + ch3 = source[index + 2]; + ch4 = source[index + 3]; + + // 4-character punctuator: >>>= + + if (ch1 === '>' && ch2 === '>' && ch3 === '>') { + if (ch4 === '=') { + index += 4; + return { + type: Token.Punctuator, + value: '>>>=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + // 3-character punctuators: === !== >>> <<= >>= + + if (ch1 === '=' && ch2 === '=' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '===', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '!' && ch2 === '=' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '!==', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '>' && ch2 === '>' && ch3 === '>') { + index += 3; + return { + type: Token.Punctuator, + value: '>>>', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '<' && ch2 === '<' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '<<=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + if (ch1 === '>' && ch2 === '>' && ch3 === '=') { + index += 3; + return { + type: Token.Punctuator, + value: '>>=', + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 2-character punctuators: <= >= == != ++ -- << >> && || + // += -= *= %= &= |= ^= /= + + if (ch2 === '=') { + if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { + index += 2; + return { + type: Token.Punctuator, + value: ch1 + ch2, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + if (ch1 === ch2 && ('+-<>&|'.indexOf(ch1) >= 0)) { + if ('+-<>&|'.indexOf(ch2) >= 0) { + index += 2; + return { + type: Token.Punctuator, + value: ch1 + ch2, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + // The remaining 1-character punctuators. + + if ('[]<>+-*%&|^!~?:=/'.indexOf(ch1) >= 0) { + return { + type: Token.Punctuator, + value: nextChar(), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + } + + // 7.8.3 Numeric Literals + + function scanNumericLiteral() { + var number, start, ch; + + ch = source[index]; + assert(isDecimalDigit(ch) || (ch === '.'), + 'Numeric literal must start with a decimal digit or a decimal point'); + + start = index; + number = ''; + if (ch !== '.') { + number = nextChar(); + ch = source[index]; + + // Hex number starts with '0x'. + // Octal number starts with '0'. + if (number === '0') { + if (ch === 'x' || ch === 'X') { + number += nextChar(); + while (index < length) { + ch = source[index]; + if (!isHexDigit(ch)) { + break; + } + number += nextChar(); + } + + if (number.length <= 2) { + // only 0x + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + if (index < length) { + ch = source[index]; + if (isIdentifierStart(ch)) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + return { + type: Token.NumericLiteral, + value: parseInt(number, 16), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } else if (isOctalDigit(ch)) { + number += nextChar(); + while (index < length) { + ch = source[index]; + if (!isOctalDigit(ch)) { + break; + } + number += nextChar(); + } + + if (index < length) { + ch = source[index]; + if (isIdentifierStart(ch) || isDecimalDigit(ch)) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + return { + type: Token.NumericLiteral, + value: parseInt(number, 8), + octal: true, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // decimal number starts with '0' such as '09' is illegal. + if (isDecimalDigit(ch)) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + while (index < length) { + ch = source[index]; + if (!isDecimalDigit(ch)) { + break; + } + number += nextChar(); + } + } + + if (ch === '.') { + number += nextChar(); + while (index < length) { + ch = source[index]; + if (!isDecimalDigit(ch)) { + break; + } + number += nextChar(); + } + } + + if (ch === 'e' || ch === 'E') { + number += nextChar(); + + ch = source[index]; + if (ch === '+' || ch === '-') { + number += nextChar(); + } + + ch = source[index]; + if (isDecimalDigit(ch)) { + number += nextChar(); + while (index < length) { + ch = source[index]; + if (!isDecimalDigit(ch)) { + break; + } + number += nextChar(); + } + } else { + ch = 'character ' + ch; + if (index >= length) { + ch = ''; + } + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + if (index < length) { + ch = source[index]; + if (isIdentifierStart(ch)) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } + + return { + type: Token.NumericLiteral, + value: parseFloat(number), + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + // 7.8.4 String Literals + + function scanStringLiteral() { + var str = '', quote, start, ch, code, unescaped, restore, octal = false; + + quote = source[index]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index; + ++index; + + while (index < length) { + ch = nextChar(); + + if (ch === quote) { + quote = ''; + break; + } else if (ch === '\\') { + ch = nextChar(); + if (!isLineTerminator(ch)) { + switch (ch) { + case 'n': + str += '\n'; + break; + case 'r': + str += '\r'; + break; + case 't': + str += '\t'; + break; + case 'u': + case 'x': + restore = index; + unescaped = scanHexEscape(ch); + if (unescaped) { + str += unescaped; + } else { + index = restore; + str += ch; + } + break; + case 'b': + str += '\b'; + break; + case 'f': + str += '\f'; + break; + case 'v': + str += '\v'; + break; + + default: + if (isOctalDigit(ch)) { + code = '01234567'.indexOf(ch); + + // \0 is not octal escape sequence + if (code !== 0) { + octal = true; + } + + if (index < length && isOctalDigit(source[index])) { + octal = true; + code = code * 8 + '01234567'.indexOf(nextChar()); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index < length && + isOctalDigit(source[index])) { + code = code * 8 + '01234567'.indexOf(nextChar()); + } + } + str += String.fromCharCode(code); + } else { + str += ch; + } + break; + } + } else { + ++lineNumber; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + } + } else if (isLineTerminator(ch)) { + break; + } else { + str += ch; + } + } + + if (quote !== '') { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + return { + type: Token.StringLiteral, + value: str, + octal: octal, + lineNumber: lineNumber, + lineStart: lineStart, + range: [start, index] + }; + } + + function scanRegExp() { + var str = '', ch, start, pattern, flags, value, classMarker = false, restore, terminated = false; + + buffer = null; + skipComment(); + + start = index; + ch = source[index]; + assert(ch === '/', 'Regular expression literal must start with a slash'); + str = nextChar(); + + while (index < length) { + ch = nextChar(); + str += ch; + if (classMarker) { + if (ch === ']') { + classMarker = false; + } + } else { + if (ch === '\\') { + ch = nextChar(); + // ECMA-262 7.8.5 + if (isLineTerminator(ch)) { + throwError({}, Messages.UnterminatedRegExp); + } + str += ch; + } else if (ch === '/') { + terminated = true; + break; + } else if (ch === '[') { + classMarker = true; + } else if (isLineTerminator(ch)) { + throwError({}, Messages.UnterminatedRegExp); + } + } + } + + if (!terminated) { + throwError({}, Messages.UnterminatedRegExp); + } + + // Exclude leading and trailing slash. + pattern = str.substr(1, str.length - 2); + + flags = ''; + while (index < length) { + ch = source[index]; + if (!isIdentifierPart(ch)) { + break; + } + + ++index; + if (ch === '\\' && index < length) { + ch = source[index]; + if (ch === 'u') { + ++index; + restore = index; + ch = scanHexEscape('u'); + if (ch) { + flags += ch; + str += '\\u'; + for (; restore < index; ++restore) { + str += source[restore]; + } + } else { + index = restore; + flags += 'u'; + str += '\\u'; + } + } else { + str += '\\'; + } + } else { + flags += ch; + str += ch; + } + } + + try { + value = new RegExp(pattern, flags); + } catch (e) { + throwError({}, Messages.InvalidRegExp); + } + + return { + literal: str, + value: value, + range: [start, index] + }; + } + + function isIdentifierName(token) { + return token.type === Token.Identifier || + token.type === Token.Keyword || + token.type === Token.BooleanLiteral || + token.type === Token.NullLiteral; + } + + function advance() { + var ch, token; + + skipComment(); + + if (index >= length) { + return { + type: Token.EOF, + lineNumber: lineNumber, + lineStart: lineStart, + range: [index, index] + }; + } + + token = scanPunctuator(); + if (typeof token !== 'undefined') { + return token; + } + + ch = source[index]; + + if (ch === '\'' || ch === '"') { + return scanStringLiteral(); + } + + if (ch === '.' || isDecimalDigit(ch)) { + return scanNumericLiteral(); + } + + token = scanIdentifier(); + if (typeof token !== 'undefined') { + return token; + } + + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + + function lex() { + var token; + + if (buffer) { + index = buffer.range[1]; + lineNumber = buffer.lineNumber; + lineStart = buffer.lineStart; + token = buffer; + buffer = null; + return token; + } + + buffer = null; + return advance(); + } + + function lookahead() { + var pos, line, start; + + if (buffer !== null) { + return buffer; + } + + pos = index; + line = lineNumber; + start = lineStart; + buffer = advance(); + index = pos; + lineNumber = line; + lineStart = start; + + return buffer; + } + + // Return true if there is a line terminator before the next token. + + function peekLineTerminator() { + var pos, line, start, found; + + pos = index; + line = lineNumber; + start = lineStart; + skipComment(); + found = lineNumber !== line; + index = pos; + lineNumber = line; + lineStart = start; + + return found; + } + + // Throw an exception + + function throwError(token, messageFormat) { + var error, + args = Array.prototype.slice.call(arguments, 2), + msg = messageFormat.replace( + /%(\d)/g, + function (whole, index) { + return args[index] || ''; + } + ); + + if (typeof token.lineNumber === 'number') { + error = new Error('Line ' + token.lineNumber + ': ' + msg); + error.index = token.range[0]; + error.lineNumber = token.lineNumber; + error.column = token.range[0] - lineStart + 1; + } else { + error = new Error('Line ' + lineNumber + ': ' + msg); + error.index = index; + error.lineNumber = lineNumber; + error.column = index - lineStart + 1; + } + + throw error; + } + + function throwErrorTolerant() { + try { + throwError.apply(null, arguments); + } catch (e) { + if (extra.errors) { + extra.errors.push(e); + } else { + throw e; + } + } + } + + + // Throw an exception because of the token. + + function throwUnexpected(token) { + if (token.type === Token.EOF) { + throwError(token, Messages.UnexpectedEOS); + } + + if (token.type === Token.NumericLiteral) { + throwError(token, Messages.UnexpectedNumber); + } + + if (token.type === Token.StringLiteral) { + throwError(token, Messages.UnexpectedString); + } + + if (token.type === Token.Identifier) { + throwError(token, Messages.UnexpectedIdentifier); + } + + if (token.type === Token.Keyword) { + if (isFutureReservedWord(token.value)) { + throwError(token, Messages.UnexpectedReserved); + } else if (strict && isStrictModeReservedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictReservedWord); + return; + } + throwError(token, Messages.UnexpectedToken, token.value); + } + + // BooleanLiteral, NullLiteral, or Punctuator. + throwError(token, Messages.UnexpectedToken, token.value); + } + + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + + function expect(value) { + var token = lex(); + if (token.type !== Token.Punctuator || token.value !== value) { + throwUnexpected(token); + } + } + + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + + function expectKeyword(keyword) { + var token = lex(); + if (token.type !== Token.Keyword || token.value !== keyword) { + throwUnexpected(token); + } + } + + // Return true if the next token matches the specified punctuator. + + function match(value) { + var token = lookahead(); + return token.type === Token.Punctuator && token.value === value; + } + + // Return true if the next token matches the specified keyword + + function matchKeyword(keyword) { + var token = lookahead(); + return token.type === Token.Keyword && token.value === keyword; + } + + // Return true if the next token is an assignment operator + + function matchAssign() { + var token = lookahead(), + op = token.value; + + if (token.type !== Token.Punctuator) { + return false; + } + return op === '=' || + op === '*=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + } + + function consumeSemicolon() { + var token, line; + + // Catch the very common case first. + if (source[index] === ';') { + lex(); + return; + } + + line = lineNumber; + skipComment(); + if (lineNumber !== line) { + return; + } + + if (match(';')) { + lex(); + return; + } + + token = lookahead(); + if (token.type !== Token.EOF && !match('}')) { + throwUnexpected(token); + } + return; + } + + // Return true if provided expression is LeftHandSideExpression + + function isLeftHandSide(expr) { + return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression; + } + + // 11.1.4 Array Initialiser + + function parseArrayInitialiser() { + var elements = []; + + expect('['); + + while (!match(']')) { + if (match(',')) { + lex(); + elements.push(null); + } else { + elements.push(parseAssignmentExpression()); + + if (!match(']')) { + expect(','); + } + } + } + + expect(']'); + + return { + type: Syntax.ArrayExpression, + elements: elements + }; + } + + // 11.1.5 Object Initialiser + + function parsePropertyFunction(param, first) { + var previousStrict, body; + + previousStrict = strict; + body = parseFunctionSourceElements(); + if (first && strict && isRestrictedWord(param[0].name)) { + throwErrorTolerant(first, Messages.StrictParamName); + } + strict = previousStrict; + + return { + type: Syntax.FunctionExpression, + id: null, + params: param, + defaults: [], + body: body, + rest: null, + generator: false, + expression: false + }; + } + + function parseObjectPropertyKey() { + var token = lex(); + + // Note: This function is called only from parseObjectProperty(), where + // EOF and Punctuator tokens are already filtered out. + + if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { + if (strict && token.octal) { + throwErrorTolerant(token, Messages.StrictOctalLiteral); + } + return createLiteral(token); + } + + return { + type: Syntax.Identifier, + name: token.value + }; + } + + function parseObjectProperty() { + var token, key, id, param; + + token = lookahead(); + + if (token.type === Token.Identifier) { + + id = parseObjectPropertyKey(); + + // Property Assignment: Getter and Setter. + + if (token.value === 'get' && !match(':')) { + key = parseObjectPropertyKey(); + expect('('); + expect(')'); + return { + type: Syntax.Property, + key: key, + value: parsePropertyFunction([]), + kind: 'get' + }; + } else if (token.value === 'set' && !match(':')) { + key = parseObjectPropertyKey(); + expect('('); + token = lookahead(); + if (token.type !== Token.Identifier) { + throwUnexpected(lex()); + } + param = [ parseVariableIdentifier() ]; + expect(')'); + return { + type: Syntax.Property, + key: key, + value: parsePropertyFunction(param, token), + kind: 'set' + }; + } else { + expect(':'); + return { + type: Syntax.Property, + key: id, + value: parseAssignmentExpression(), + kind: 'init' + }; + } + } else if (token.type === Token.EOF || token.type === Token.Punctuator) { + throwUnexpected(token); + } else { + key = parseObjectPropertyKey(); + expect(':'); + return { + type: Syntax.Property, + key: key, + value: parseAssignmentExpression(), + kind: 'init' + }; + } + } + + function parseObjectInitialiser() { + var properties = [], property, name, kind, map = {}, toString = String; + + expect('{'); + + while (!match('}')) { + property = parseObjectProperty(); + + if (property.key.type === Syntax.Identifier) { + name = property.key.name; + } else { + name = toString(property.key.value); + } + kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set; + if (Object.prototype.hasOwnProperty.call(map, name)) { + if (map[name] === PropertyKind.Data) { + if (strict && kind === PropertyKind.Data) { + throwErrorTolerant({}, Messages.StrictDuplicateProperty); + } else if (kind !== PropertyKind.Data) { + throwErrorTolerant({}, Messages.AccessorDataProperty); + } + } else { + if (kind === PropertyKind.Data) { + throwErrorTolerant({}, Messages.AccessorDataProperty); + } else if (map[name] & kind) { + throwErrorTolerant({}, Messages.AccessorGetSet); + } + } + map[name] |= kind; + } else { + map[name] = kind; + } + + properties.push(property); + + if (!match('}')) { + expect(','); + } + } + + expect('}'); + + return { + type: Syntax.ObjectExpression, + properties: properties + }; + } + + // 11.1 Primary Expressions + + function parsePrimaryExpression() { + var expr, + token = lookahead(), + type = token.type; + + if (type === Token.Identifier) { + return { + type: Syntax.Identifier, + name: lex().value + }; + } + + if (type === Token.StringLiteral || type === Token.NumericLiteral) { + if (strict && token.octal) { + throwErrorTolerant(token, Messages.StrictOctalLiteral); + } + return createLiteral(lex()); + } + + if (type === Token.Keyword) { + if (matchKeyword('this')) { + lex(); + return { + type: Syntax.ThisExpression + }; + } + + if (matchKeyword('function')) { + return parseFunctionExpression(); + } + } + + if (type === Token.BooleanLiteral) { + lex(); + token.value = (token.value === 'true'); + return createLiteral(token); + } + + if (type === Token.NullLiteral) { + lex(); + token.value = null; + return createLiteral(token); + } + + if (match('[')) { + return parseArrayInitialiser(); + } + + if (match('{')) { + return parseObjectInitialiser(); + } + + if (match('(')) { + lex(); + state.lastParenthesized = expr = parseExpression(); + expect(')'); + return expr; + } + + if (match('/') || match('/=')) { + return createLiteral(scanRegExp()); + } + + return throwUnexpected(lex()); + } + + // 11.2 Left-Hand-Side Expressions + + function parseArguments() { + var args = []; + + expect('('); + + if (!match(')')) { + while (index < length) { + args.push(parseAssignmentExpression()); + if (match(')')) { + break; + } + expect(','); + } + } + + expect(')'); + + return args; + } + + function parseNonComputedProperty() { + var token = lex(); + + if (!isIdentifierName(token)) { + throwUnexpected(token); + } + + return { + type: Syntax.Identifier, + name: token.value + }; + } + + function parseNonComputedMember() { + expect('.'); + + return parseNonComputedProperty(); + } + + function parseComputedMember() { + var expr; + + expect('['); + + expr = parseExpression(); + + expect(']'); + + return expr; + } + + function parseNewExpression() { + var expr; + + expectKeyword('new'); + + expr = { + type: Syntax.NewExpression, + callee: parseLeftHandSideExpression(), + 'arguments': [] + }; + + if (match('(')) { + expr['arguments'] = parseArguments(); + } + + return expr; + } + + function parseLeftHandSideExpressionAllowCall() { + var expr; + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[') || match('(')) { + if (match('(')) { + expr = { + type: Syntax.CallExpression, + callee: expr, + 'arguments': parseArguments() + }; + } else if (match('[')) { + expr = { + type: Syntax.MemberExpression, + computed: true, + object: expr, + property: parseComputedMember() + }; + } else { + expr = { + type: Syntax.MemberExpression, + computed: false, + object: expr, + property: parseNonComputedMember() + }; + } + } + + return expr; + } + + + function parseLeftHandSideExpression() { + var expr; + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[')) { + if (match('[')) { + expr = { + type: Syntax.MemberExpression, + computed: true, + object: expr, + property: parseComputedMember() + }; + } else { + expr = { + type: Syntax.MemberExpression, + computed: false, + object: expr, + property: parseNonComputedMember() + }; + } + } + + return expr; + } + + // 11.3 Postfix Expressions + + function parsePostfixExpression() { + var expr = parseLeftHandSideExpressionAllowCall(); + + if ((match('++') || match('--')) && !peekLineTerminator()) { + // 11.3.1, 11.3.2 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant({}, Messages.StrictLHSPostfix); + } + + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + expr = { + type: Syntax.UpdateExpression, + operator: lex().value, + argument: expr, + prefix: false + }; + } + + return expr; + } + + // 11.4 Unary Operators + + function parseUnaryExpression() { + var token, expr; + + if (match('++') || match('--')) { + token = lex(); + expr = parseUnaryExpression(); + // 11.4.4, 11.4.5 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant({}, Messages.StrictLHSPrefix); + } + + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + expr = { + type: Syntax.UpdateExpression, + operator: token.value, + argument: expr, + prefix: true + }; + return expr; + } + + if (match('+') || match('-') || match('~') || match('!')) { + expr = { + type: Syntax.UnaryExpression, + operator: lex().value, + argument: parseUnaryExpression() + }; + return expr; + } + + if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { + expr = { + type: Syntax.UnaryExpression, + operator: lex().value, + argument: parseUnaryExpression() + }; + if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { + throwErrorTolerant({}, Messages.StrictDelete); + } + return expr; + } + + return parsePostfixExpression(); + } + + // 11.5 Multiplicative Operators + + function parseMultiplicativeExpression() { + var expr = parseUnaryExpression(); + + while (match('*') || match('/') || match('%')) { + expr = { + type: Syntax.BinaryExpression, + operator: lex().value, + left: expr, + right: parseUnaryExpression() + }; + } + + return expr; + } + + // 11.6 Additive Operators + + function parseAdditiveExpression() { + var expr = parseMultiplicativeExpression(); + + while (match('+') || match('-')) { + expr = { + type: Syntax.BinaryExpression, + operator: lex().value, + left: expr, + right: parseMultiplicativeExpression() + }; + } + + return expr; + } + + // 11.7 Bitwise Shift Operators + + function parseShiftExpression() { + var expr = parseAdditiveExpression(); + + while (match('<<') || match('>>') || match('>>>')) { + expr = { + type: Syntax.BinaryExpression, + operator: lex().value, + left: expr, + right: parseAdditiveExpression() + }; + } + + return expr; + } + // 11.8 Relational Operators + + function parseRelationalExpression() { + var expr, previousAllowIn; + + previousAllowIn = state.allowIn; + state.allowIn = true; + + expr = parseShiftExpression(); + + while (match('<') || match('>') || match('<=') || match('>=') || (previousAllowIn && matchKeyword('in')) || matchKeyword('instanceof')) { + expr = { + type: Syntax.BinaryExpression, + operator: lex().value, + left: expr, + right: parseShiftExpression() + }; + } + + state.allowIn = previousAllowIn; + return expr; + } + + // 11.9 Equality Operators + + function parseEqualityExpression() { + var expr = parseRelationalExpression(); + + while (match('==') || match('!=') || match('===') || match('!==')) { + expr = { + type: Syntax.BinaryExpression, + operator: lex().value, + left: expr, + right: parseRelationalExpression() + }; + } + + return expr; + } + + // 11.10 Binary Bitwise Operators + + function parseBitwiseANDExpression() { + var expr = parseEqualityExpression(); + + while (match('&')) { + lex(); + expr = { + type: Syntax.BinaryExpression, + operator: '&', + left: expr, + right: parseEqualityExpression() + }; + } + + return expr; + } + + function parseBitwiseXORExpression() { + var expr = parseBitwiseANDExpression(); + + while (match('^')) { + lex(); + expr = { + type: Syntax.BinaryExpression, + operator: '^', + left: expr, + right: parseBitwiseANDExpression() + }; + } + + return expr; + } + + function parseBitwiseORExpression() { + var expr = parseBitwiseXORExpression(); + + while (match('|')) { + lex(); + expr = { + type: Syntax.BinaryExpression, + operator: '|', + left: expr, + right: parseBitwiseXORExpression() + }; + } + + return expr; + } + + // 11.11 Binary Logical Operators + + function parseLogicalANDExpression() { + var expr = parseBitwiseORExpression(); + + while (match('&&')) { + lex(); + expr = { + type: Syntax.LogicalExpression, + operator: '&&', + left: expr, + right: parseBitwiseORExpression() + }; + } + + return expr; + } + + function parseLogicalORExpression() { + var expr = parseLogicalANDExpression(); + + while (match('||')) { + lex(); + expr = { + type: Syntax.LogicalExpression, + operator: '||', + left: expr, + right: parseLogicalANDExpression() + }; + } + + return expr; + } + + // 11.12 Conditional Operator + + function parseConditionalExpression() { + var expr, previousAllowIn, consequent; + + expr = parseLogicalORExpression(); + + if (match('?')) { + lex(); + previousAllowIn = state.allowIn; + state.allowIn = true; + consequent = parseAssignmentExpression(); + state.allowIn = previousAllowIn; + expect(':'); + + expr = { + type: Syntax.ConditionalExpression, + test: expr, + consequent: consequent, + alternate: parseAssignmentExpression() + }; + } + + return expr; + } + + // 11.13 Assignment Operators + + function parseAssignmentExpression() { + var token, expr; + + token = lookahead(); + expr = parseConditionalExpression(); + + if (matchAssign()) { + // LeftHandSideExpression + if (!isLeftHandSide(expr)) { + throwError({}, Messages.InvalidLHSInAssignment); + } + + // 11.13.1 + if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { + throwErrorTolerant(token, Messages.StrictLHSAssignment); + } + + expr = { + type: Syntax.AssignmentExpression, + operator: lex().value, + left: expr, + right: parseAssignmentExpression() + }; + } + + return expr; + } + + // 11.14 Comma Operator + + function parseExpression() { + var expr = parseAssignmentExpression(); + + if (match(',')) { + expr = { + type: Syntax.SequenceExpression, + expressions: [ expr ] + }; + + while (index < length) { + if (!match(',')) { + break; + } + lex(); + expr.expressions.push(parseAssignmentExpression()); + } + + } + return expr; + } + + // 12.1 Block + + function parseStatementList() { + var list = [], + statement; + + while (index < length) { + if (match('}')) { + break; + } + statement = parseSourceElement(); + if (typeof statement === 'undefined') { + break; + } + list.push(statement); + } + + return list; + } + + function parseBlock() { + var block; + + expect('{'); + + block = parseStatementList(); + + expect('}'); + + return { + type: Syntax.BlockStatement, + body: block + }; + } + + // 12.2 Variable Statement + + function parseVariableIdentifier() { + var token = lex(); + + if (token.type !== Token.Identifier) { + throwUnexpected(token); + } + + return { + type: Syntax.Identifier, + name: token.value + }; + } + + function parseVariableDeclaration(kind) { + var id = parseVariableIdentifier(), + init = null; + + // 12.2.1 + if (strict && isRestrictedWord(id.name)) { + throwErrorTolerant({}, Messages.StrictVarName); + } + + if (kind === 'const') { + expect('='); + init = parseAssignmentExpression(); + } else if (match('=')) { + lex(); + init = parseAssignmentExpression(); + } + + return { + type: Syntax.VariableDeclarator, + id: id, + init: init + }; + } + + function parseVariableDeclarationList(kind) { + var list = []; + + while (index < length) { + list.push(parseVariableDeclaration(kind)); + if (!match(',')) { + break; + } + lex(); + } + + return list; + } + + function parseVariableStatement() { + var declarations; + + expectKeyword('var'); + + declarations = parseVariableDeclarationList(); + + consumeSemicolon(); + + return { + type: Syntax.VariableDeclaration, + declarations: declarations, + kind: 'var' + }; + } + + // kind may be `const` or `let` + // Both are experimental and not in the specification yet. + // see http://wiki.ecmascript.org/doku.php?id=harmony:const + // and http://wiki.ecmascript.org/doku.php?id=harmony:let + function parseConstLetDeclaration(kind) { + var declarations; + + expectKeyword(kind); + + declarations = parseVariableDeclarationList(kind); + + consumeSemicolon(); + + return { + type: Syntax.VariableDeclaration, + declarations: declarations, + kind: kind + }; + } + + // 12.3 Empty Statement + + function parseEmptyStatement() { + expect(';'); + + return { + type: Syntax.EmptyStatement + }; + } + + // 12.4 Expression Statement + + function parseExpressionStatement() { + var expr = parseExpression(); + + consumeSemicolon(); + + return { + type: Syntax.ExpressionStatement, + expression: expr + }; + } + + // 12.5 If statement + + function parseIfStatement() { + var test, consequent, alternate; + + expectKeyword('if'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + consequent = parseStatement(); + + if (matchKeyword('else')) { + lex(); + alternate = parseStatement(); + } else { + alternate = null; + } + + return { + type: Syntax.IfStatement, + test: test, + consequent: consequent, + alternate: alternate + }; + } + + // 12.6 Iteration Statements + + function parseDoWhileStatement() { + var body, test, oldInIteration; + + expectKeyword('do'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + if (match(';')) { + lex(); + } + + return { + type: Syntax.DoWhileStatement, + body: body, + test: test + }; + } + + function parseWhileStatement() { + var test, body, oldInIteration; + + expectKeyword('while'); + + expect('('); + + test = parseExpression(); + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + return { + type: Syntax.WhileStatement, + test: test, + body: body + }; + } + + function parseForVariableDeclaration() { + var token = lex(); + + return { + type: Syntax.VariableDeclaration, + declarations: parseVariableDeclarationList(), + kind: token.value + }; + } + + function parseForStatement() { + var init, test, update, left, right, body, oldInIteration; + + init = test = update = null; + + expectKeyword('for'); + + expect('('); + + if (match(';')) { + lex(); + } else { + if (matchKeyword('var') || matchKeyword('let')) { + state.allowIn = false; + init = parseForVariableDeclaration(); + state.allowIn = true; + + if (init.declarations.length === 1 && matchKeyword('in')) { + lex(); + left = init; + right = parseExpression(); + init = null; + } + } else { + state.allowIn = false; + init = parseExpression(); + state.allowIn = true; + + if (matchKeyword('in')) { + // LeftHandSideExpression + if (!isLeftHandSide(init)) { + throwError({}, Messages.InvalidLHSInForIn); + } + + lex(); + left = init; + right = parseExpression(); + init = null; + } + } + + if (typeof left === 'undefined') { + expect(';'); + } + } + + if (typeof left === 'undefined') { + + if (!match(';')) { + test = parseExpression(); + } + expect(';'); + + if (!match(')')) { + update = parseExpression(); + } + } + + expect(')'); + + oldInIteration = state.inIteration; + state.inIteration = true; + + body = parseStatement(); + + state.inIteration = oldInIteration; + + if (typeof left === 'undefined') { + return { + type: Syntax.ForStatement, + init: init, + test: test, + update: update, + body: body + }; + } + + return { + type: Syntax.ForInStatement, + left: left, + right: right, + body: body, + each: false + }; + } + + // 12.7 The continue statement + + function parseContinueStatement() { + var token, label = null; + + expectKeyword('continue'); + + // Optimize the most common form: 'continue;'. + if (source[index] === ';') { + lex(); + + if (!state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return { + type: Syntax.ContinueStatement, + label: null + }; + } + + if (peekLineTerminator()) { + if (!state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return { + type: Syntax.ContinueStatement, + label: null + }; + } + + token = lookahead(); + if (token.type === Token.Identifier) { + label = parseVariableIdentifier(); + + if (!Object.prototype.hasOwnProperty.call(state.labelSet, label.name)) { + throwError({}, Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !state.inIteration) { + throwError({}, Messages.IllegalContinue); + } + + return { + type: Syntax.ContinueStatement, + label: label + }; + } + + // 12.8 The break statement + + function parseBreakStatement() { + var token, label = null; + + expectKeyword('break'); + + // Optimize the most common form: 'break;'. + if (source[index] === ';') { + lex(); + + if (!(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return { + type: Syntax.BreakStatement, + label: null + }; + } + + if (peekLineTerminator()) { + if (!(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return { + type: Syntax.BreakStatement, + label: null + }; + } + + token = lookahead(); + if (token.type === Token.Identifier) { + label = parseVariableIdentifier(); + + if (!Object.prototype.hasOwnProperty.call(state.labelSet, label.name)) { + throwError({}, Messages.UnknownLabel, label.name); + } + } + + consumeSemicolon(); + + if (label === null && !(state.inIteration || state.inSwitch)) { + throwError({}, Messages.IllegalBreak); + } + + return { + type: Syntax.BreakStatement, + label: label + }; + } + + // 12.9 The return statement + + function parseReturnStatement() { + var token, argument = null; + + expectKeyword('return'); + + if (!state.inFunctionBody) { + throwErrorTolerant({}, Messages.IllegalReturn); + } + + // 'return' followed by a space and an identifier is very common. + if (source[index] === ' ') { + if (isIdentifierStart(source[index + 1])) { + argument = parseExpression(); + consumeSemicolon(); + return { + type: Syntax.ReturnStatement, + argument: argument + }; + } + } + + if (peekLineTerminator()) { + return { + type: Syntax.ReturnStatement, + argument: null + }; + } + + if (!match(';')) { + token = lookahead(); + if (!match('}') && token.type !== Token.EOF) { + argument = parseExpression(); + } + } + + consumeSemicolon(); + + return { + type: Syntax.ReturnStatement, + argument: argument + }; + } + + // 12.10 The with statement + + function parseWithStatement() { + var object, body; + + if (strict) { + throwErrorTolerant({}, Messages.StrictModeWith); + } + + expectKeyword('with'); + + expect('('); + + object = parseExpression(); + + expect(')'); + + body = parseStatement(); + + return { + type: Syntax.WithStatement, + object: object, + body: body + }; + } + + // 12.10 The swith statement + + function parseSwitchCase() { + var test, + consequent = [], + statement; + + if (matchKeyword('default')) { + lex(); + test = null; + } else { + expectKeyword('case'); + test = parseExpression(); + } + expect(':'); + + while (index < length) { + if (match('}') || matchKeyword('default') || matchKeyword('case')) { + break; + } + statement = parseStatement(); + if (typeof statement === 'undefined') { + break; + } + consequent.push(statement); + } + + return { + type: Syntax.SwitchCase, + test: test, + consequent: consequent + }; + } + + function parseSwitchStatement() { + var discriminant, cases, clause, oldInSwitch, defaultFound; + + expectKeyword('switch'); + + expect('('); + + discriminant = parseExpression(); + + expect(')'); + + expect('{'); + + if (match('}')) { + lex(); + return { + type: Syntax.SwitchStatement, + discriminant: discriminant + }; + } + + cases = []; + + oldInSwitch = state.inSwitch; + state.inSwitch = true; + defaultFound = false; + + while (index < length) { + if (match('}')) { + break; + } + clause = parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + throwError({}, Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + + state.inSwitch = oldInSwitch; + + expect('}'); + + return { + type: Syntax.SwitchStatement, + discriminant: discriminant, + cases: cases + }; + } + + // 12.13 The throw statement + + function parseThrowStatement() { + var argument; + + expectKeyword('throw'); + + if (peekLineTerminator()) { + throwError({}, Messages.NewlineAfterThrow); + } + + argument = parseExpression(); + + consumeSemicolon(); + + return { + type: Syntax.ThrowStatement, + argument: argument + }; + } + + // 12.14 The try statement + + function parseCatchClause() { + var param; + + expectKeyword('catch'); + + expect('('); + if (!match(')')) { + param = parseExpression(); + // 12.14.1 + if (strict && param.type === Syntax.Identifier && isRestrictedWord(param.name)) { + throwErrorTolerant({}, Messages.StrictCatchVariable); + } + } + expect(')'); + + return { + type: Syntax.CatchClause, + param: param, + body: parseBlock() + }; + } + + function parseTryStatement() { + var block, handlers = [], finalizer = null; + + expectKeyword('try'); + + block = parseBlock(); + + if (matchKeyword('catch')) { + handlers.push(parseCatchClause()); + } + + if (matchKeyword('finally')) { + lex(); + finalizer = parseBlock(); + } + + if (handlers.length === 0 && !finalizer) { + throwError({}, Messages.NoCatchOrFinally); + } + + return { + type: Syntax.TryStatement, + block: block, + guardedHandlers: [], + handlers: handlers, + finalizer: finalizer + }; + } + + // 12.15 The debugger statement + + function parseDebuggerStatement() { + expectKeyword('debugger'); + + consumeSemicolon(); + + return { + type: Syntax.DebuggerStatement + }; + } + + // 12 Statements + + function parseStatement() { + var token = lookahead(), + expr, + labeledBody; + + if (token.type === Token.EOF) { + throwUnexpected(token); + } + + if (token.type === Token.Punctuator) { + switch (token.value) { + case ';': + return parseEmptyStatement(); + case '{': + return parseBlock(); + case '(': + return parseExpressionStatement(); + default: + break; + } + } + + if (token.type === Token.Keyword) { + switch (token.value) { + case 'break': + return parseBreakStatement(); + case 'continue': + return parseContinueStatement(); + case 'debugger': + return parseDebuggerStatement(); + case 'do': + return parseDoWhileStatement(); + case 'for': + return parseForStatement(); + case 'function': + return parseFunctionDeclaration(); + case 'if': + return parseIfStatement(); + case 'return': + return parseReturnStatement(); + case 'switch': + return parseSwitchStatement(); + case 'throw': + return parseThrowStatement(); + case 'try': + return parseTryStatement(); + case 'var': + return parseVariableStatement(); + case 'while': + return parseWhileStatement(); + case 'with': + return parseWithStatement(); + default: + break; + } + } + + expr = parseExpression(); + + // 12.12 Labelled Statements + if ((expr.type === Syntax.Identifier) && match(':')) { + lex(); + + if (Object.prototype.hasOwnProperty.call(state.labelSet, expr.name)) { + throwError({}, Messages.Redeclaration, 'Label', expr.name); + } + + state.labelSet[expr.name] = true; + labeledBody = parseStatement(); + delete state.labelSet[expr.name]; + + return { + type: Syntax.LabeledStatement, + label: expr, + body: labeledBody + }; + } + + consumeSemicolon(); + + return { + type: Syntax.ExpressionStatement, + expression: expr + }; + } + + // 13 Function Definition + + function parseFunctionSourceElements() { + var sourceElement, sourceElements = [], token, directive, firstRestricted, + oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody; + + expect('{'); + + while (index < length) { + token = lookahead(); + if (token.type !== Token.StringLiteral) { + break; + } + + sourceElement = parseSourceElement(); + sourceElements.push(sourceElement); + if (sourceElement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = sliceSource(token.range[0] + 1, token.range[1] - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + oldLabelSet = state.labelSet; + oldInIteration = state.inIteration; + oldInSwitch = state.inSwitch; + oldInFunctionBody = state.inFunctionBody; + + state.labelSet = {}; + state.inIteration = false; + state.inSwitch = false; + state.inFunctionBody = true; + + while (index < length) { + if (match('}')) { + break; + } + sourceElement = parseSourceElement(); + if (typeof sourceElement === 'undefined') { + break; + } + sourceElements.push(sourceElement); + } + + expect('}'); + + state.labelSet = oldLabelSet; + state.inIteration = oldInIteration; + state.inSwitch = oldInSwitch; + state.inFunctionBody = oldInFunctionBody; + + return { + type: Syntax.BlockStatement, + body: sourceElements + }; + } + + function parseFunctionDeclaration() { + var id, param, params = [], body, token, stricted, firstRestricted, message, previousStrict, paramSet; + + expectKeyword('function'); + token = lookahead(); + id = parseVariableIdentifier(); + if (strict) { + if (isRestrictedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + + expect('('); + + if (!match(')')) { + paramSet = {}; + while (index < length) { + token = lookahead(); + param = parseVariableIdentifier(); + if (strict) { + if (isRestrictedWord(token.value)) { + stricted = token; + message = Messages.StrictParamName; + } + if (Object.prototype.hasOwnProperty.call(paramSet, token.value)) { + stricted = token; + message = Messages.StrictParamDupe; + } + } else if (!firstRestricted) { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictParamName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } else if (Object.prototype.hasOwnProperty.call(paramSet, token.value)) { + firstRestricted = token; + message = Messages.StrictParamDupe; + } + } + params.push(param); + paramSet[param.name] = true; + if (match(')')) { + break; + } + expect(','); + } + } + + expect(')'); + + previousStrict = strict; + body = parseFunctionSourceElements(); + if (strict && firstRestricted) { + throwError(firstRestricted, message); + } + if (strict && stricted) { + throwErrorTolerant(stricted, message); + } + strict = previousStrict; + + return { + type: Syntax.FunctionDeclaration, + id: id, + params: params, + defaults: [], + body: body, + rest: null, + generator: false, + expression: false + }; + } + + function parseFunctionExpression() { + var token, id = null, stricted, firstRestricted, message, param, params = [], body, previousStrict, paramSet; + + expectKeyword('function'); + + if (!match('(')) { + token = lookahead(); + id = parseVariableIdentifier(); + if (strict) { + if (isRestrictedWord(token.value)) { + throwErrorTolerant(token, Messages.StrictFunctionName); + } + } else { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictFunctionName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } + } + } + + expect('('); + + if (!match(')')) { + paramSet = {}; + while (index < length) { + token = lookahead(); + param = parseVariableIdentifier(); + if (strict) { + if (isRestrictedWord(token.value)) { + stricted = token; + message = Messages.StrictParamName; + } + if (Object.prototype.hasOwnProperty.call(paramSet, token.value)) { + stricted = token; + message = Messages.StrictParamDupe; + } + } else if (!firstRestricted) { + if (isRestrictedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictParamName; + } else if (isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = Messages.StrictReservedWord; + } else if (Object.prototype.hasOwnProperty.call(paramSet, token.value)) { + firstRestricted = token; + message = Messages.StrictParamDupe; + } + } + params.push(param); + paramSet[param.name] = true; + if (match(')')) { + break; + } + expect(','); + } + } + + expect(')'); + + previousStrict = strict; + body = parseFunctionSourceElements(); + if (strict && firstRestricted) { + throwError(firstRestricted, message); + } + if (strict && stricted) { + throwErrorTolerant(stricted, message); + } + strict = previousStrict; + + return { + type: Syntax.FunctionExpression, + id: id, + params: params, + defaults: [], + body: body, + rest: null, + generator: false, + expression: false + }; + } + + // 14 Program + + function parseSourceElement() { + var token = lookahead(); + + if (token.type === Token.Keyword) { + switch (token.value) { + case 'const': + case 'let': + return parseConstLetDeclaration(token.value); + case 'function': + return parseFunctionDeclaration(); + default: + return parseStatement(); + } + } + + if (token.type !== Token.EOF) { + return parseStatement(); + } + } + + function parseSourceElements() { + var sourceElement, sourceElements = [], token, directive, firstRestricted; + + while (index < length) { + token = lookahead(); + if (token.type !== Token.StringLiteral) { + break; + } + + sourceElement = parseSourceElement(); + sourceElements.push(sourceElement); + if (sourceElement.expression.type !== Syntax.Literal) { + // this is not directive + break; + } + directive = sliceSource(token.range[0] + 1, token.range[1] - 1); + if (directive === 'use strict') { + strict = true; + if (firstRestricted) { + throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral); + } + } else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + + while (index < length) { + sourceElement = parseSourceElement(); + if (typeof sourceElement === 'undefined') { + break; + } + sourceElements.push(sourceElement); + } + return sourceElements; + } + + function parseProgram() { + var program; + strict = false; + program = { + type: Syntax.Program, + body: parseSourceElements() + }; + return program; + } + + // The following functions are needed only when the option to preserve + // the comments is active. + + function addComment(type, value, start, end, loc) { + assert(typeof start === 'number', 'Comment must have valid position'); + + // Because the way the actual token is scanned, often the comments + // (if any) are skipped twice during the lexical analysis. + // Thus, we need to skip adding a comment if the comment array already + // handled it. + if (extra.comments.length > 0) { + if (extra.comments[extra.comments.length - 1].range[1] > start) { + return; + } + } + + extra.comments.push({ + type: type, + value: value, + range: [start, end], + loc: loc + }); + } + + function scanComment() { + var comment, ch, loc, start, blockComment, lineComment; + + comment = ''; + blockComment = false; + lineComment = false; + + while (index < length) { + ch = source[index]; + + if (lineComment) { + ch = nextChar(); + if (isLineTerminator(ch)) { + loc.end = { + line: lineNumber, + column: index - lineStart - 1 + }; + lineComment = false; + addComment('Line', comment, start, index - 1, loc); + if (ch === '\r' && source[index] === '\n') { + ++index; + } + ++lineNumber; + lineStart = index; + comment = ''; + } else if (index >= length) { + lineComment = false; + comment += ch; + loc.end = { + line: lineNumber, + column: length - lineStart + }; + addComment('Line', comment, start, length, loc); + } else { + comment += ch; + } + } else if (blockComment) { + if (isLineTerminator(ch)) { + if (ch === '\r' && source[index + 1] === '\n') { + ++index; + comment += '\r\n'; + } else { + comment += ch; + } + ++lineNumber; + ++index; + lineStart = index; + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else { + ch = nextChar(); + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + comment += ch; + if (ch === '*') { + ch = source[index]; + if (ch === '/') { + comment = comment.substr(0, comment.length - 1); + blockComment = false; + ++index; + loc.end = { + line: lineNumber, + column: index - lineStart + }; + addComment('Block', comment, start, index, loc); + comment = ''; + } + } + } + } else if (ch === '/') { + ch = source[index + 1]; + if (ch === '/') { + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + start = index; + index += 2; + lineComment = true; + if (index >= length) { + loc.end = { + line: lineNumber, + column: index - lineStart + }; + lineComment = false; + addComment('Line', comment, start, index, loc); + } + } else if (ch === '*') { + start = index; + index += 2; + blockComment = true; + loc = { + start: { + line: lineNumber, + column: index - lineStart - 2 + } + }; + if (index >= length) { + throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); + } + } else { + break; + } + } else if (isWhiteSpace(ch)) { + ++index; + } else if (isLineTerminator(ch)) { + ++index; + if (ch === '\r' && source[index] === '\n') { + ++index; + } + ++lineNumber; + lineStart = index; + } else { + break; + } + } + } + + function filterCommentLocation() { + var i, entry, comment, comments = []; + + for (i = 0; i < extra.comments.length; ++i) { + entry = extra.comments[i]; + comment = { + type: entry.type, + value: entry.value + }; + if (extra.range) { + comment.range = entry.range; + } + if (extra.loc) { + comment.loc = entry.loc; + } + comments.push(comment); + } + + extra.comments = comments; + } + + function collectToken() { + var start, loc, token, range, value; + + skipComment(); + start = index; + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + token = extra.advance(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + if (token.type !== Token.EOF) { + range = [token.range[0], token.range[1]]; + value = sliceSource(token.range[0], token.range[1]); + extra.tokens.push({ + type: TokenName[token.type], + value: value, + range: range, + loc: loc + }); + } + + return token; + } + + function collectRegex() { + var pos, loc, regex, token; + + skipComment(); + + pos = index; + loc = { + start: { + line: lineNumber, + column: index - lineStart + } + }; + + regex = extra.scanRegExp(); + loc.end = { + line: lineNumber, + column: index - lineStart + }; + + // Pop the previous token, which is likely '/' or '/=' + if (extra.tokens.length > 0) { + token = extra.tokens[extra.tokens.length - 1]; + if (token.range[0] === pos && token.type === 'Punctuator') { + if (token.value === '/' || token.value === '/=') { + extra.tokens.pop(); + } + } + } + + extra.tokens.push({ + type: 'RegularExpression', + value: regex.literal, + range: [pos, index], + loc: loc + }); + + return regex; + } + + function filterTokenLocation() { + var i, entry, token, tokens = []; + + for (i = 0; i < extra.tokens.length; ++i) { + entry = extra.tokens[i]; + token = { + type: entry.type, + value: entry.value + }; + if (extra.range) { + token.range = entry.range; + } + if (extra.loc) { + token.loc = entry.loc; + } + tokens.push(token); + } + + extra.tokens = tokens; + } + + function createLiteral(token) { + return { + type: Syntax.Literal, + value: token.value + }; + } + + function createRawLiteral(token) { + return { + type: Syntax.Literal, + value: token.value, + raw: sliceSource(token.range[0], token.range[1]) + }; + } + + function createLocationMarker() { + var marker = {}; + + marker.range = [index, index]; + marker.loc = { + start: { + line: lineNumber, + column: index - lineStart + }, + end: { + line: lineNumber, + column: index - lineStart + } + }; + + marker.end = function () { + this.range[1] = index; + this.loc.end.line = lineNumber; + this.loc.end.column = index - lineStart; + }; + + marker.apply = function (node) { + if (extra.range) { + node.range = [this.range[0], this.range[1]]; + } + if (extra.loc) { + node.loc = { + start: { + line: this.loc.start.line, + column: this.loc.start.column + }, + end: { + line: this.loc.end.line, + column: this.loc.end.column + } + }; + } + }; + + return marker; + } + + function trackLeftHandSideExpression() { + var marker, expr; + + skipComment(); + marker = createLocationMarker(); + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[')) { + if (match('[')) { + expr = { + type: Syntax.MemberExpression, + computed: true, + object: expr, + property: parseComputedMember() + }; + marker.end(); + marker.apply(expr); + } else { + expr = { + type: Syntax.MemberExpression, + computed: false, + object: expr, + property: parseNonComputedMember() + }; + marker.end(); + marker.apply(expr); + } + } + + return expr; + } + + function trackLeftHandSideExpressionAllowCall() { + var marker, expr; + + skipComment(); + marker = createLocationMarker(); + + expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression(); + + while (match('.') || match('[') || match('(')) { + if (match('(')) { + expr = { + type: Syntax.CallExpression, + callee: expr, + 'arguments': parseArguments() + }; + marker.end(); + marker.apply(expr); + } else if (match('[')) { + expr = { + type: Syntax.MemberExpression, + computed: true, + object: expr, + property: parseComputedMember() + }; + marker.end(); + marker.apply(expr); + } else { + expr = { + type: Syntax.MemberExpression, + computed: false, + object: expr, + property: parseNonComputedMember() + }; + marker.end(); + marker.apply(expr); + } + } + + return expr; + } + + function wrapTrackingFunction(range, loc) { + + return function (parseFunction) { + + function isBinary(node) { + return node.type === Syntax.LogicalExpression || + node.type === Syntax.BinaryExpression; + } + + function visit(node) { + if (isBinary(node.left)) { + visit(node.left); + } + if (isBinary(node.right)) { + visit(node.right); + } + + if (range && typeof node.range === 'undefined') { + node.range = [node.left.range[0], node.right.range[1]]; + } + if (loc && typeof node.loc === 'undefined') { + node.loc = { + start: node.left.loc.start, + end: node.right.loc.end + }; + } + } + + return function () { + var marker, node; + + skipComment(); + + marker = createLocationMarker(); + node = parseFunction.apply(null, arguments); + marker.end(); + + if (range && typeof node.range === 'undefined') { + marker.apply(node); + } + + if (loc && typeof node.loc === 'undefined') { + marker.apply(node); + } + + if (isBinary(node)) { + visit(node); + } + + return node; + }; + }; + } + + function patch() { + + var wrapTracking; + + if (extra.comments) { + extra.skipComment = skipComment; + skipComment = scanComment; + } + + if (extra.raw) { + extra.createLiteral = createLiteral; + createLiteral = createRawLiteral; + } + + if (extra.range || extra.loc) { + + extra.parseLeftHandSideExpression = parseLeftHandSideExpression; + extra.parseLeftHandSideExpressionAllowCall = parseLeftHandSideExpressionAllowCall; + parseLeftHandSideExpression = trackLeftHandSideExpression; + parseLeftHandSideExpressionAllowCall = trackLeftHandSideExpressionAllowCall; + + wrapTracking = wrapTrackingFunction(extra.range, extra.loc); + + extra.parseAdditiveExpression = parseAdditiveExpression; + extra.parseAssignmentExpression = parseAssignmentExpression; + extra.parseBitwiseANDExpression = parseBitwiseANDExpression; + extra.parseBitwiseORExpression = parseBitwiseORExpression; + extra.parseBitwiseXORExpression = parseBitwiseXORExpression; + extra.parseBlock = parseBlock; + extra.parseFunctionSourceElements = parseFunctionSourceElements; + extra.parseCatchClause = parseCatchClause; + extra.parseComputedMember = parseComputedMember; + extra.parseConditionalExpression = parseConditionalExpression; + extra.parseConstLetDeclaration = parseConstLetDeclaration; + extra.parseEqualityExpression = parseEqualityExpression; + extra.parseExpression = parseExpression; + extra.parseForVariableDeclaration = parseForVariableDeclaration; + extra.parseFunctionDeclaration = parseFunctionDeclaration; + extra.parseFunctionExpression = parseFunctionExpression; + extra.parseLeftHandSideExpression = parseLeftHandSideExpression; + extra.parseLeftHandSideExpressionAllowCall = parseLeftHandSideExpressionAllowCall; + extra.parseLogicalANDExpression = parseLogicalANDExpression; + extra.parseLogicalORExpression = parseLogicalORExpression; + extra.parseMultiplicativeExpression = parseMultiplicativeExpression; + extra.parseNewExpression = parseNewExpression; + extra.parseNonComputedProperty = parseNonComputedProperty; + extra.parseObjectProperty = parseObjectProperty; + extra.parseObjectPropertyKey = parseObjectPropertyKey; + extra.parsePostfixExpression = parsePostfixExpression; + extra.parsePrimaryExpression = parsePrimaryExpression; + extra.parseProgram = parseProgram; + extra.parsePropertyFunction = parsePropertyFunction; + extra.parseRelationalExpression = parseRelationalExpression; + extra.parseStatement = parseStatement; + extra.parseShiftExpression = parseShiftExpression; + extra.parseSwitchCase = parseSwitchCase; + extra.parseUnaryExpression = parseUnaryExpression; + extra.parseVariableDeclaration = parseVariableDeclaration; + extra.parseVariableIdentifier = parseVariableIdentifier; + + parseAdditiveExpression = wrapTracking(extra.parseAdditiveExpression); + parseAssignmentExpression = wrapTracking(extra.parseAssignmentExpression); + parseBitwiseANDExpression = wrapTracking(extra.parseBitwiseANDExpression); + parseBitwiseORExpression = wrapTracking(extra.parseBitwiseORExpression); + parseBitwiseXORExpression = wrapTracking(extra.parseBitwiseXORExpression); + parseBlock = wrapTracking(extra.parseBlock); + parseFunctionSourceElements = wrapTracking(extra.parseFunctionSourceElements); + parseCatchClause = wrapTracking(extra.parseCatchClause); + parseComputedMember = wrapTracking(extra.parseComputedMember); + parseConditionalExpression = wrapTracking(extra.parseConditionalExpression); + parseConstLetDeclaration = wrapTracking(extra.parseConstLetDeclaration); + parseEqualityExpression = wrapTracking(extra.parseEqualityExpression); + parseExpression = wrapTracking(extra.parseExpression); + parseForVariableDeclaration = wrapTracking(extra.parseForVariableDeclaration); + parseFunctionDeclaration = wrapTracking(extra.parseFunctionDeclaration); + parseFunctionExpression = wrapTracking(extra.parseFunctionExpression); + parseLeftHandSideExpression = wrapTracking(parseLeftHandSideExpression); + parseLeftHandSideExpressionAllowCall = wrapTracking(parseLeftHandSideExpressionAllowCall); + parseLogicalANDExpression = wrapTracking(extra.parseLogicalANDExpression); + parseLogicalORExpression = wrapTracking(extra.parseLogicalORExpression); + parseMultiplicativeExpression = wrapTracking(extra.parseMultiplicativeExpression); + parseNewExpression = wrapTracking(extra.parseNewExpression); + parseNonComputedProperty = wrapTracking(extra.parseNonComputedProperty); + parseObjectProperty = wrapTracking(extra.parseObjectProperty); + parseObjectPropertyKey = wrapTracking(extra.parseObjectPropertyKey); + parsePostfixExpression = wrapTracking(extra.parsePostfixExpression); + parsePrimaryExpression = wrapTracking(extra.parsePrimaryExpression); + parseProgram = wrapTracking(extra.parseProgram); + parsePropertyFunction = wrapTracking(extra.parsePropertyFunction); + parseRelationalExpression = wrapTracking(extra.parseRelationalExpression); + parseStatement = wrapTracking(extra.parseStatement); + parseShiftExpression = wrapTracking(extra.parseShiftExpression); + parseSwitchCase = wrapTracking(extra.parseSwitchCase); + parseUnaryExpression = wrapTracking(extra.parseUnaryExpression); + parseVariableDeclaration = wrapTracking(extra.parseVariableDeclaration); + parseVariableIdentifier = wrapTracking(extra.parseVariableIdentifier); + } + + if (typeof extra.tokens !== 'undefined') { + extra.advance = advance; + extra.scanRegExp = scanRegExp; + + advance = collectToken; + scanRegExp = collectRegex; + } + } + + function unpatch() { + if (typeof extra.skipComment === 'function') { + skipComment = extra.skipComment; + } + + if (extra.raw) { + createLiteral = extra.createLiteral; + } + + if (extra.range || extra.loc) { + parseAdditiveExpression = extra.parseAdditiveExpression; + parseAssignmentExpression = extra.parseAssignmentExpression; + parseBitwiseANDExpression = extra.parseBitwiseANDExpression; + parseBitwiseORExpression = extra.parseBitwiseORExpression; + parseBitwiseXORExpression = extra.parseBitwiseXORExpression; + parseBlock = extra.parseBlock; + parseFunctionSourceElements = extra.parseFunctionSourceElements; + parseCatchClause = extra.parseCatchClause; + parseComputedMember = extra.parseComputedMember; + parseConditionalExpression = extra.parseConditionalExpression; + parseConstLetDeclaration = extra.parseConstLetDeclaration; + parseEqualityExpression = extra.parseEqualityExpression; + parseExpression = extra.parseExpression; + parseForVariableDeclaration = extra.parseForVariableDeclaration; + parseFunctionDeclaration = extra.parseFunctionDeclaration; + parseFunctionExpression = extra.parseFunctionExpression; + parseLeftHandSideExpression = extra.parseLeftHandSideExpression; + parseLeftHandSideExpressionAllowCall = extra.parseLeftHandSideExpressionAllowCall; + parseLogicalANDExpression = extra.parseLogicalANDExpression; + parseLogicalORExpression = extra.parseLogicalORExpression; + parseMultiplicativeExpression = extra.parseMultiplicativeExpression; + parseNewExpression = extra.parseNewExpression; + parseNonComputedProperty = extra.parseNonComputedProperty; + parseObjectProperty = extra.parseObjectProperty; + parseObjectPropertyKey = extra.parseObjectPropertyKey; + parsePrimaryExpression = extra.parsePrimaryExpression; + parsePostfixExpression = extra.parsePostfixExpression; + parseProgram = extra.parseProgram; + parsePropertyFunction = extra.parsePropertyFunction; + parseRelationalExpression = extra.parseRelationalExpression; + parseStatement = extra.parseStatement; + parseShiftExpression = extra.parseShiftExpression; + parseSwitchCase = extra.parseSwitchCase; + parseUnaryExpression = extra.parseUnaryExpression; + parseVariableDeclaration = extra.parseVariableDeclaration; + parseVariableIdentifier = extra.parseVariableIdentifier; + } + + if (typeof extra.scanRegExp === 'function') { + advance = extra.advance; + scanRegExp = extra.scanRegExp; + } + } + + function stringToArray(str) { + var length = str.length, + result = [], + i; + for (i = 0; i < length; ++i) { + result[i] = str.charAt(i); + } + return result; + } + + function parse(code, options) { + var program, toString; + + toString = String; + if (typeof code !== 'string' && !(code instanceof String)) { + code = toString(code); + } + + source = code; + index = 0; + lineNumber = (source.length > 0) ? 1 : 0; + lineStart = 0; + length = source.length; + buffer = null; + state = { + allowIn: true, + labelSet: {}, + lastParenthesized: null, + inFunctionBody: false, + inIteration: false, + inSwitch: false + }; + + extra = {}; + if (typeof options !== 'undefined') { + extra.range = (typeof options.range === 'boolean') && options.range; + extra.loc = (typeof options.loc === 'boolean') && options.loc; + extra.raw = (typeof options.raw === 'boolean') && options.raw; + if (typeof options.tokens === 'boolean' && options.tokens) { + extra.tokens = []; + } + if (typeof options.comment === 'boolean' && options.comment) { + extra.comments = []; + } + if (typeof options.tolerant === 'boolean' && options.tolerant) { + extra.errors = []; + } + } + + if (length > 0) { + if (typeof source[0] === 'undefined') { + // Try first to convert to a string. This is good as fast path + // for old IE which understands string indexing for string + // literals only and not for string object. + if (code instanceof String) { + source = code.valueOf(); + } + + // Force accessing the characters via an array. + if (typeof source[0] === 'undefined') { + source = stringToArray(code); + } + } + } + + patch(); + try { + program = parseProgram(); + if (typeof extra.comments !== 'undefined') { + filterCommentLocation(); + program.comments = extra.comments; + } + if (typeof extra.tokens !== 'undefined') { + filterTokenLocation(); + program.tokens = extra.tokens; + } + if (typeof extra.errors !== 'undefined') { + program.errors = extra.errors; + } + } catch (e) { + throw e; + } finally { + unpatch(); + extra = {}; + } + + return program; + } + + // Sync with package.json. + exports.version = '1.0.0-dev'; + + exports.parse = parse; + + // Deep copy. + exports.Syntax = (function () { + var name, types = {}; + + if (typeof Object.create === 'function') { + types = Object.create(null); + } + + for (name in Syntax) { + if (Syntax.hasOwnProperty(name)) { + types[name] = Syntax[name]; + } + } + + if (typeof Object.freeze === 'function') { + Object.freeze(types); + } + + return types; + }()); + +})); +/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/lib/falafel.js b/v3/js/togetherjs/togetherjs/libs/walkabout/lib/falafel.js new file mode 100644 index 000000000..1805fa4d7 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/lib/falafel.js @@ -0,0 +1,100 @@ +var _tmpModule = {exports: {}}; +(function (module) { + +var parse = esprima.parse; +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +}; +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn); + for (var i = 0; i < xs.length; i++) { + fn.call(xs, xs[i], i, xs); + } +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + +module.exports = function (src, opts, fn) { + if (typeof opts === 'function') { + fn = opts; + opts = {}; + } + if (typeof src === 'object') { + opts = src; + src = opts.source; + delete opts.source; + } + src = src || opts.source; + opts.range = true; + if (typeof src !== 'string') src = String(src); + + var ast = parse(src, opts); + + var result = { + chunks : src.split(''), + toString : function () { return result.chunks.join('') }, + inspect : function () { return result.toString() } + }; + var index = 0; + + (function walk (node, parent) { + insertHelpers(node, parent, result.chunks); + + forEach(objectKeys(node), function (key) { + if (key === 'parent') return; + + var child = node[key]; + if (isArray(child)) { + forEach(child, function (c) { + if (c && typeof c.type === 'string') { + walk(c, node); + } + }); + } + else if (child && typeof child.type === 'string') { + insertHelpers(child, node, result.chunks); + walk(child, node); + } + }); + fn(node); + })(ast, undefined); + + return result; +}; + +function insertHelpers (node, parent, chunks) { + if (!node.range) return; + + node.parent = parent; + + node.source = function () { + return chunks.slice( + node.range[0], node.range[1] + ).join(''); + }; + + if (node.update && typeof node.update === 'object') { + var prev = node.update; + forEach(objectKeys(prev), function (key) { + update[key] = prev[key]; + }); + node.update = update; + } + else { + node.update = update; + } + + function update (s) { + chunks[node.range[0]] = s; + for (var i = node.range[0] + 1; i < node.range[1]; i++) { + chunks[i] = ''; + } + }; +} + +})(_tmpModule); +var falafel = _tmpModule.exports; diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/node-proxy.js b/v3/js/togetherjs/togetherjs/libs/walkabout/node-proxy.js new file mode 100644 index 000000000..00048009d --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/node-proxy.js @@ -0,0 +1,219 @@ +const dns = require("dns"); +const http = require("http"); +const fs = require("fs"); +const walkabout = require("./walkabout.js"); +const parseUrl = require("url").parse; + +var IPs = { + localhost: ["127.0.0.1"] +}; + +var PortAliases = {}; + +function loadEtcHosts(callback) { + fs.readFile("/etc/hosts", "UTF-8", function (error, text) { + if (error) { + console.log("Error reading /etc/hosts:", error); + return; + } + var lines = text.split(/\n/g); + lines.forEach(function (l) { + l = l.replace(/^\s*/, ""); + if (! l) { + // empty line + return; + } + if (l.search(/^\#/) != -1) { + // comment + return; + } + var parts = l.split(/\s+/g); + if (parts[0] == "255.255.255.255" || parts[0].indexOf(":") != -1 || + parts[0] == "127.0.0.1") { + return; + } + for (var i=1; i_Walkabout_start_UI = true;_Walkabout_sitewide = true;' + + '' +); + +var seenForwards = {}; + +function forwardRequest(addresses, port, request, response) { + var address = addresses[Math.floor(Math.random() * addresses.length)]; + if (! seenForwards[address]) { + seenForwards[address] = true; + console.log("Forwarding", request.headers.host, "to", address + ":" + port); + } + // Avoid gzipped responses: + delete request.headers["accept-encoding"]; + delete request.headers["if-modified-since"]; + delete request.headers["if-not-matches"]; + delete request.headers["connection"]; + request.headers["connection"] = "close"; + var origHost = request.headers.host; + request.headers.host = request.headers.host.replace(/:\d+$/, "") + ":" + port; + var clientRequest = http.request({ + hostname: address, + port: port, + method: request.method, + path: request.url, + headers: request.headers + }); + clientRequest.on("response", function (clientResponse) { + var contentType = clientResponse.headers["content-type"] || ""; + var isHtml = contentType.indexOf("text/html") != -1; + var isJavascript = contentType.indexOf("javascript") != -1; + var location = clientResponse.headers["location"]; + if (location) { + clientResponse.location = location.replace( + request.headers.host.replace(/:80$/, ""), origHost.replace(/:80$/, "")); + } + if (isHtml) { + var contentLength = clientResponse.headers["content-length"]; + if (contentLength) { + contentLength = parseInt(contentLength, 10); + contentLength += preamble.length; + clientResponse.headers["content-length"] = contentLength + ""; + } + } else if (isJavascript) { + delete clientResponse.headers["content-length"]; + } + response.writeHead(clientResponse.statusCode, clientResponse.headers); + var s; + if ((! isHtml) && ! isJavascript) { + clientResponse.on("data", function (chunk) { + response.write(chunk); + }); + } else { + s = ""; + clientResponse.on("data", function (chunk) { + s += chunk; + }); + } + clientResponse.on("end", function () { + if (isHtml) { + if (s.search(/^/i); + if (pos == -1) { + return preamble + s; + } else { + return s.substr(0, pos+6) + preamble + s.substr(pos+6); + } +} + +function translateJavascript(s) { + return walkabout.rewriteListeners(s) + ""; +} + +function write500(error, response) { + console.warn("Error:", error); + response.writeHead(500, {"Content-Type": "text/plain"}); + if (typeof error != "string") { + error = "\n" + JSON.stringify(error, null, " "); + } + response.end("Error: " + error); +} + +var PORT = parseInt(process.env.PORT || 80, 10); +var BIND = process.env.BIND || "127.0.0.1"; + +if (process.env.PORT_ALIASES) { + process.env.PORT_ALIASES.split(/;/g).forEach(function (part) { + part = part.split(/:/); + PortAliases[part[0]] = part[1]; + }); +} + +console.log("Serving on", "http://"+BIND+":"+PORT); +server.listen(PORT, BIND, function () { +}); diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/test_overlap.html b/v3/js/togetherjs/togetherjs/libs/walkabout/test_overlap.html new file mode 100644 index 000000000..697269cc1 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/test_overlap.html @@ -0,0 +1,26 @@ + + + + + Walkabout tests + + + + + + + +
+

+    
+ +
+ + + +
goes under
+ +
+ + + diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/test_overlap.js b/v3/js/togetherjs/togetherjs/libs/walkabout/test_overlap.js new file mode 100644 index 000000000..b8f9d758b --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/test_overlap.js @@ -0,0 +1,77 @@ +var fixture = document.getElementById("fixture"); +var modal = document.getElementById("modal"); +var underlay = document.getElementById("underlay"); + +Walkabout.addEventListener(underlay, function (event) { + print("clicked"); +}, false); + +function show(el) { + el.style.display = ""; +} + +function hide(el) { + el.style.display = "none"; +} + +print(Walkabout.visible(modal)); +print(Walkabout.visible(underlay)); +print(Walkabout.clickable(underlay)); +hide(modal); +print(Walkabout.visible(modal)); +show(modal); + +/* => +true +true +true +false +*/ + +hide(underlay); +print(Walkabout.clickable(underlay)); +show(underlay); + +// => false + +modal.style.position = "absolute"; +modal.style.width = "100px"; +modal.style.height = "100px"; +modal.style.top = "0px"; +modal.style.right = "0px"; +modal.style.zIndex = 10; +underlay.style.position = "absolute"; +underlay.style.width = "90px"; +underlay.style.height = "90px"; +underlay.style.top = "5px"; +underlay.style.right = "5px"; +underlay.style.zIndex = 5; + +print(getComputedStyle(modal).getPropertyValue("position")); + +// => absolute + +var rect = modal.getBoundingClientRect(); + +print(rect.bottom, rect.top, rect.height); +print(rect.left, rect.right, rect.width); + +/* => +100 0 100 +? ? 100 +*/ + +print(Walkabout.clickable(underlay)); + +// => false + +underlay.style.zIndex = 15; +print(Walkabout.clickable(underlay)); + +// => true + +underlay.style.zIndex = 5; +underlay.style.right = "20px"; +print(Walkabout.clickable(underlay)); + +// => true diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/test_walkabout.html b/v3/js/togetherjs/togetherjs/libs/walkabout/test_walkabout.html new file mode 100644 index 000000000..6e40da3f2 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/test_walkabout.html @@ -0,0 +1,35 @@ + + + + + Walkabout tests + + + + + + + + +
+

+    
+ +
+ + + link +
    +
  • an item 1
  • +
  • an item 2
  • +
+

+    
+ +
+ +
+ + + diff --git a/v3/js/togetherjs/togetherjs/libs/walkabout/test_walkabout.js b/v3/js/togetherjs/togetherjs/libs/walkabout/test_walkabout.js new file mode 100644 index 000000000..c7454f278 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/libs/walkabout/test_walkabout.js @@ -0,0 +1,218 @@ +jshint("walkabout.js", {evil: true, scripturl: true}); +// => Script passed: .../walkabout.js + +function log(text) { + console.log(text); + if (window.print) { + print(text); + } + $("#log").text($("#log").text() + text + "\n"); +} + +function logger(name) { + return function (text) { + log(name + ": " + text); + }; +} + +$("#button").click(function () { + log("button click"); +}); + +$("#textinput").bindKey({which: 13}, function () { + log("Entered text: " + $("#textinput").val()); + $("#textinput").val(""); +}); + +location.hash = ""; + +$(window).on("hashchange", function () { + var hash = location.hash; + if (! hash) { + return; + } + log("Hash changed: " + hash); + hash = parseInt(hash.substr(1), 10); + $("#link").attr("href", "#" + (hash + 1)); +}); + +$("#fixture").on("click", ".item", function () { + log("Clicked li: " + $(this).text()); +}); + +// => + +var actions = $("#fixture").findActions(); +print(actions); + +/* => + +[ + {element: link, options: {}, type: "click"}, + { + element:
  • an item 1
  • , + handler: function ..., + jQuery: true, + options: {}, + type: "click" + }, + { + element:
  • an item 2
  • , + handler: function ..., + jQuery: true, + options: {}, + type: "click" + }, + { + element: , + handler: function ..., + jQuery: true, + options: {}, + type: "click" + }, + { + element: , + handler: function ..., + jQuery: true, + options: {}, + type: "keypress" + } +] + +*/ + +Walkabout.random.setSeed(100); +jQuery.fn.val.patch(); + +actions.forEach(function (a) { + a.run(); +}); +wait(); + +// I don't understand why "Hash change: #1" happens twice +/* => + +Clicked li: an item 1 +Clicked li: an item 2 +button click +Entered text: zsmOG +Hash changed: #1... +*/ + +// Here we demonstrate that the random numbers are repeatable +// (and hopefully portable): +var rand = Walkabout.RandomStream(1); +for (var i=0; i<10; i++) { + print(rand()); +} + +/* => + +0.0225802504... +0.8612917717... +0.3039651696... +0.8526061845... +0.2648052292... +0.5323929718... +0.9003424612... +0.0378481761... +0.7294780843... +0.4245760307... + +*/ + +$("#textinput").attr("data-walkabout-options", "['a', 'b']"); +print($("#textinput").findActions()); +$("#textinput").findActions()[0].run(); +$("#textinput").findActions()[0].run(); +$("#textinput").findActions()[0].run(); + +/* => + +[ + { + element: , + handler: function ..., + jQuery: true, + options: {}, + type: "keypress" + } +] +Entered text: a +Entered text: a +Entered text: b + +*/ + +location.hash = "#2"; +actions = $("#fixture").findActions(); +var last = actions[actions.length - 1]; +print(last.constructor.name, location.hash); + +// => Back #2 + +last.run(); +print(location.hash); + +// => #1 + +actions = $("#textarea-fixture").findActions(); +print(actions); + +/* => +[ + { + element: +
    + + + + diff --git a/v3/js/togetherjs/togetherjs/recorder.js b/v3/js/togetherjs/togetherjs/recorder.js new file mode 100644 index 000000000..5e32cda60 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/recorder.js @@ -0,0 +1,110 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define(["jquery", "util", "channels"], function ($, util, channels) { + var recorder = util.Module("recorder"); + var assert = util.assert; + var channel = null; + var baseUrl = null; + var clientId = "recorder"; + + function display(el) { + el = $(el); + var toggles = el.attr("data-toggles"); + if (toggles) { + $(toggles).hide(); + } + el.show(); + } + + recorder.start = function (options) { + $(function () { + $("#record").css({height: $(window).height() - 50}); + $("#restart").click(function () { + location.reload(); + }); + $("#select").click(function () { + $("#record").select(); + }); + recorder.activate(options); + }); + }; + + recorder.activate = function (options) { + var match; + baseUrl = options.baseUrl; + recorder.shareId = TogetherJS.startup._joinShareId; + if (! recorder.shareId) { + match = /\&togetherjs=([^&]+)/.exec(location.hash); + if (! match) { + display("#no-session-id"); + return; + } + recorder.shareId = match[1]; + } + var hubBase = options.defaultHubBase; + match = /\&hubBase=([^&]+)/.exec(location.hash); + if (match) { + hubBase = match[1]; + } + hubBase = hubBase.replace(/\/*$/, ""); + var url = hubBase + "/hub/" + recorder.shareId; + channel = channels.WebSocketChannel(url); + channel.onmessage = function (msg) { + if (msg.type == "hello-back") { + display("#connected"); + } + if (msg.type == "hello") { + sendHello(true); + } + if (msg.type == "get-logs") { + sendLogs(msg); + return; + } + recorder.logMessage(msg); + }; + sendHello(false); + }; + + function sendHello(helloBack) { + var msg = { + type: helloBack ? "hello-back" : "hello", + name: "Recorder 'bot", + // FIXME: replace with robot: + avatar: TogetherJS.baseUrl + "/togetherjs/images/robot-avatar.png", + color: "#888888", + rtcSupported: false, + clientId: clientId, + url: "about:blank" + }; + channel.send(msg); + } + + function sendLogs(req) { + var msg = { + type: "logs", + clientId: clientId, + logs: $("#record").val(), + request: req + }; + channel.send(msg); + } + + recorder.logMessage = function (msg) { + msg.date = Date.now(); + msg = JSON.stringify(msg); + var $record = $("#record"); + $record.val($record.val() + msg + "\n\n"); + }; + + $(window).unload(function () { + channel.send({ + type: "bye", + clientId: clientId + }); + }); + + return recorder; + +}); diff --git a/v3/js/togetherjs/togetherjs/session.js b/v3/js/togetherjs/togetherjs/session.js new file mode 100644 index 000000000..62e6006a0 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/session.js @@ -0,0 +1,483 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define(["require", "util", "channels", "jquery", "storage"], function (require, util, channels, $, storage) { + + var DEBUG = true; + + // This is the amount of time in which a hello-back must be received after a hello + // for us to respect a URL change: + var HELLO_BACK_CUTOFF = 1500; + + var session = util.mixinEvents(util.Module("session")); + var assert = util.assert; + + // We will load this module later (there's a circular import): + var peers; + + // This is the hub we connect to: + session.shareId = null; + // This is the ID that identifies this client: + session.clientId = null; + session.router = channels.Router(); + // Indicates if TogetherJS has just started (not continuing from a saved session): + session.firstRun = false; + + // This is the key we use for localStorage: + var localStoragePrefix = "togetherjs."; + // This is the channel to the hub: + var channel = null; + + // Setting, essentially global: + session.AVATAR_SIZE = 90; + + var MAX_SESSION_AGE = 30*24*60*60*1000; // 30 days + + /**************************************** + * URLs + */ + var includeHashInUrl = TogetherJS.config.get("includeHashInUrl"); + TogetherJS.config.close("includeHashInUrl"); + var currentUrl = (location.href + "").replace(/\#.*$/, ""); + if (includeHashInUrl) { + currentUrl = location.href; + } + + session.hubUrl = function (id) { + id = id || session.shareId; + assert(id, "URL cannot be resolved before TogetherJS.shareId has been initialized"); + TogetherJS.config.close("hubBase"); + var hubBase = TogetherJS.config.get("hubBase"); + return hubBase.replace(/\/*$/, "") + "/hub/" + id; + }; + + session.shareUrl = function () { + assert(session.shareId, "Attempted to access shareUrl() before shareId is set"); + var hash = location.hash; + var m = /\?[^#]*/.exec(location.href); + var query = ""; + if (m) { + query = m[0]; + } + hash = hash.replace(/&?togetherjs-[a-zA-Z0-9]+/, ""); + hash = hash || "#"; + return location.protocol + "//" + location.host + location.pathname + query + + hash + "&togetherjs=" + session.shareId; + }; + + session.recordUrl = function () { + assert(session.shareId); + var url = TogetherJS.baseUrl.replace(/\/*$/, "") + "/togetherjs/recorder.html"; + url += "#&togetherjs=" + session.shareId + "&hubBase=" + TogetherJS.config.get("hubBase"); + return url; + }; + + /* location.href without the hash */ + session.currentUrl = function () { + if (includeHashInUrl) { + return location.href; + } else { + return location.href.replace(/#.*/, ""); + } + }; + + /**************************************** + * Message handling/dispatching + */ + + session.hub = util.mixinEvents({}); + + var IGNORE_MESSAGES = TogetherJS.config.get("ignoreMessages"); + if (IGNORE_MESSAGES === true) { + DEBUG = false; + IGNORE_MESSAGES = []; + } + // These are messages sent by clients who aren't "part" of the TogetherJS session: + var MESSAGES_WITHOUT_CLIENTID = ["who", "invite", "init-connection"]; + + // We ignore incoming messages from the channel until this is true: + var readyForMessages = false; + + function openChannel() { + assert(! channel, "Attempt to re-open channel"); + console.info("Connecting to", session.hubUrl(), location.href); + var c = channels.WebSocketChannel(session.hubUrl()); + c.onmessage = function (msg) { + if (! readyForMessages) { + if (DEBUG) { + console.info("In (but ignored for being early):", msg); + } + return; + } + if (DEBUG && IGNORE_MESSAGES.indexOf(msg.type) == -1) { + console.info("In:", msg); + } + if (! peers) { + // We're getting messages before everything is fully initialized + console.warn("Message received before all modules loaded (ignoring):", msg); + return; + } + if ((! msg.clientId) && MESSAGES_WITHOUT_CLIENTID.indexOf(msg.type) == -1) { + console.warn("Got message without clientId, where clientId is required", msg); + return; + } + if (msg.clientId) { + msg.peer = peers.getPeer(msg.clientId, msg); + } + if (msg.type == "hello" || msg.type == "hello-back" || msg.type == "peer-update") { + // We do this here to make sure this is run before any other + // hello handlers: + msg.peer.updateFromHello(msg); + } + if (msg.peer) { + msg.sameUrl = msg.peer.url == currentUrl; + if (!msg.peer.isSelf) { + msg.peer.updateMessageDate(msg); + } + } + session.hub.emit(msg.type, msg); + TogetherJS._onmessage(msg); + }; + channel = c; + session.router.bindChannel(channel); + } + + session.send = function (msg) { + if (DEBUG && IGNORE_MESSAGES.indexOf(msg.type) == -1) { + console.info("Send:", msg); + } + msg.clientId = session.clientId; + channel.send(msg); + }; + + session.appSend = function (msg) { + var type = msg.type; + if (type.search(/^togetherjs\./) === 0) { + type = type.substr("togetherjs.".length); + } else if (type.search(/^app\./) === -1) { + type = "app." + type; + } + msg.type = type; + session.send(msg); + }; + + /**************************************** + * Standard message responses + */ + + /* Always say hello back, and keep track of peers: */ + session.hub.on("hello hello-back", function (msg) { + if (msg.type == "hello") { + sendHello(true); + } + if (session.isClient && (! msg.isClient) && + session.firstRun && session.timeHelloSent && + Date.now() - session.timeHelloSent < HELLO_BACK_CUTOFF) { + processFirstHello(msg); + } + }); + + session.hub.on("who", function (msg) { + sendHello(true); + }); + + function processFirstHello(msg) { + if (! msg.sameUrl) { + var url = msg.url; + if (msg.urlHash) { + url += msg.urlHash; + } + require("ui").showUrlChangeMessage(msg.peer, url); + location.href = url; + } + } + + session.timeHelloSent = null; + + function sendHello(helloBack) { + var msg = session.makeHelloMessage(helloBack); + if (! helloBack) { + session.timeHelloSent = Date.now(); + peers.Self.url = msg.url; + } + session.send(msg); + } + + session.makeHelloMessage = function (helloBack) { + var msg = { + name: peers.Self.name || peers.Self.defaultName, + avatar: peers.Self.avatar, + color: peers.Self.color, + url: session.currentUrl(), + urlHash: location.hash, + // FIXME: titles update, we should track those changes: + title: document.title, + rtcSupported: session.RTCSupported, + isClient: session.isClient + }; + if (helloBack) { + msg.type = "hello-back"; + } else { + msg.type = "hello"; + msg.clientVersion = TogetherJS.version; + } + if (! TogetherJS.startup.continued) { + msg.starting = true; + } + // This is a chance for other modules to effect the hello message: + session.emit("prepare-hello", msg); + return msg; + }; + /**************************************** + * Lifecycle (start and end) + */ + + // These are Javascript files that implement features, and so must + // be injected at runtime because they aren't pulled in naturally + // via define(). + // ui must be the first item: + var features = ["peers", "ui", "chat", "webrtc", "cursor", "startup", "videos", "forms", "visibilityApi", "youtubeVideos"]; + + function getRoomName(prefix, maxSize) { + var findRoom = TogetherJS.config.get("hubBase").replace(/\/*$/, "") + "/findroom"; + return $.ajax({ + url: findRoom, + dataType: "json", + data: {prefix: prefix, max: maxSize} + }).then(function (resp) { + return resp.name; + }); + } + + function initIdentityId() { + return util.Deferred(function (def) { + if (session.identityId) { + def.resolve(); + return; + } + storage.get("identityId").then(function (identityId) { + if (! identityId) { + identityId = util.generateId(); + storage.set("identityId", identityId); + } + session.identityId = identityId; + // We don't actually have to wait for the set to succede, so + // long as session.identityId is set + def.resolve(); + }); + }); + } + + initIdentityId.done = initIdentityId(); + + function initShareId() { + return util.Deferred(function (def) { + var hash = location.hash; + var shareId = session.shareId; + var isClient = true; + var set = true; + var sessionId; + session.firstRun = ! TogetherJS.startup.continued; + if (! shareId) { + if (TogetherJS.startup._joinShareId) { + // Like, below, this *also* means we got the shareId from the hash + // (in togetherjs.js): + shareId = TogetherJS.startup._joinShareId; + } + } + if (! shareId) { + // FIXME: I'm not sure if this will ever happen, because togetherjs.js should + // handle it + var m = /&?togetherjs=([^&]*)/.exec(hash); + if (m) { + isClient = ! m[1]; + shareId = m[2]; + var newHash = hash.substr(0, m.index) + hash.substr(m.index + m[0].length); + location.hash = newHash; + } + } + return storage.tab.get("status").then(function (saved) { + var findRoom = TogetherJS.config.get("findRoom"); + TogetherJS.config.close("findRoom"); + if (findRoom && saved && findRoom != saved.shareId) { + console.info("Ignoring findRoom in lieu of continued session"); + } else if (findRoom && TogetherJS.startup._joinShareId) { + console.info("Ignoring findRoom in lieu of explicit invite to session"); + } + if (findRoom && typeof findRoom == "string" && (! saved) && (! TogetherJS.startup._joinShareId)) { + isClient = true; + shareId = findRoom; + sessionId = util.generateId(); + } else if (findRoom && (! saved) && (! TogetherJS.startup._joinShareId)) { + assert(findRoom.prefix && typeof findRoom.prefix == "string", "Bad findRoom.prefix", findRoom); + assert(findRoom.max && typeof findRoom.max == "number" && findRoom.max > 0, + "Bad findRoom.max", findRoom); + sessionId = util.generateId(); + if (findRoom.prefix.search(/[^a-zA-Z0-9]/) != -1) { + console.warn("Bad value for findRoom.prefix:", JSON.stringify(findRoom.prefix)); + } + getRoomName(findRoom.prefix, findRoom.max).then(function (shareId) { + // FIXME: duplicates code below: + session.clientId = session.identityId + "." + sessionId; + storage.tab.set("status", {reason: "joined", shareId: shareId, running: true, date: Date.now(), sessionId: sessionId}); + session.isClient = true; + session.shareId = shareId; + session.emit("shareId"); + def.resolve(session.shareId); + }); + return; + } else if (TogetherJS.startup._launch) { + if (saved) { + isClient = saved.reason == "joined"; + if (! shareId) { + shareId = saved.shareId; + } + sessionId = saved.sessionId; + } else { + isClient = TogetherJS.startup.reason == "joined"; + assert(! sessionId); + sessionId = util.generateId(); + } + if (! shareId) { + shareId = util.generateId(); + } + } else if (saved) { + isClient = saved.reason == "joined"; + TogetherJS.startup.reason = saved.reason; + TogetherJS.startup.continued = true; + shareId = saved.shareId; + sessionId = saved.sessionId; + // The only case when we don't need to set the storage status again is when + // we're already set to be running + set = ! saved.running; + } else { + throw new util.AssertionError("No saved status, and no startup._launch request; why did TogetherJS start?"); + } + assert(session.identityId); + session.clientId = session.identityId + "." + sessionId; + if (set) { + storage.tab.set("status", {reason: TogetherJS.startup.reason, shareId: shareId, running: true, date: Date.now(), sessionId: sessionId}); + } + session.isClient = isClient; + session.shareId = shareId; + session.emit("shareId"); + def.resolve(session.shareId); + }); + }); + } + + function initStartTarget() { + var id; + if (TogetherJS.startup.button) { + id = TogetherJS.startup.button.id; + if (id) { + storage.set("startTarget", id); + } + return; + } + storage.get("startTarget").then(function (id) { + var el = document.getElementById(id); + if (el) { + TogetherJS.startup.button = el; + } + }); + } + session.start = function () { + initStartTarget(); + initIdentityId().then(function () { + initShareId().then(function () { + readyForMessages = false; + openChannel(); + require(["ui"], function (ui) { + TogetherJS.running = true; + ui.prepareUI(); + require(features, function () { + $(function () { + peers = require("peers"); + var startup = require("startup"); + session.emit("start"); + session.once("ui-ready", function () { + readyForMessages = true; + startup.start(); + }); + ui.activateUI(); + TogetherJS.config.close("enableAnalytics"); + if (TogetherJS.config.get("enableAnalytics")) { + require(["analytics"], function (analytics) { + analytics.activate(); + }); + } + peers._SelfLoaded.then(function () { + sendHello(false); + }); + TogetherJS.emit("ready"); + }); + }); + }); + }); + }); + }; + + session.close = function (reason) { + TogetherJS.running = false; + var msg = {type: "bye"}; + if (reason) { + msg.reason = reason; + } + session.send(msg); + session.emit("close"); + var name = window.name; + storage.tab.get("status").then(function (saved) { + if (! saved) { + console.warn("No session information saved in", "status." + name); + } else { + saved.running = false; + saved.date = Date.now(); + storage.tab.set("status", saved); + } + channel.close(); + channel = null; + session.shareId = null; + session.emit("shareId"); + TogetherJS.emit("close"); + TogetherJS._teardown(); + }); + }; + + session.on("start", function () { + $(window).on("resize", resizeEvent); + if (includeHashInUrl) { + $(window).on("hashchange", hashchangeEvent); + } + }); + + session.on("close", function () { + $(window).off("resize", resizeEvent); + if (includeHashInUrl) { + $(window).off("hashchange", hashchangeEvent); + } + }); + + function hashchangeEvent() { + // needed because when message arives from peer this variable will be checked to + // decide weather to show actions or not + sendHello(false); + } + + function resizeEvent() { + session.emit("resize"); + } + + if (TogetherJS.startup._launch) { + setTimeout(session.start); + } + + util.testExpose({ + getChannel: function () { + return channel; + } + }); + + return session; +}); diff --git a/v3/js/togetherjs/togetherjs/startup.js b/v3/js/togetherjs/togetherjs/startup.js new file mode 100644 index 000000000..d3f4bbf1f --- /dev/null +++ b/v3/js/togetherjs/togetherjs/startup.js @@ -0,0 +1,157 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* This module handles all the different UI that happens (sometimes in order) when + TogetherJS is started: + + - Introduce the session when you've been invited + - Show any browser compatibility indicators + - Show the walkthrough the first time + - Show the share link window + + When everything is done it fires session.emit("startup-ready") + +*/ +define(["util", "require", "jquery", "windowing", "storage"], function (util, require, $, windowing, storage) { + var assert = util.assert; + var startup = util.Module("startup"); + // Avoid circular import: + var session = null; + + var STEPS = [ + "browserBroken", + "browserUnsupported", + "sessionIntro", + "walkthrough", + // Look in the share() below if you add anything after here: + "share" + ]; + + var currentStep = null; + + startup.start = function () { + if (! session) { + require(["session"], function (sessionModule) { + session = sessionModule; + startup.start(); + }); + return; + } + var index = -1; + if (currentStep) { + index = STEPS.indexOf(currentStep); + } + index++; + if (index >= STEPS.length) { + session.emit("startup-ready"); + return; + } + currentStep = STEPS[index]; + handlers[currentStep](startup.start); + }; + + var handlers = { + + browserBroken: function (next) { + if (window.WebSocket) { + next(); + return; + } + windowing.show("#togetherjs-browser-broken", { + onClose: function () { + session.close(); + } + }); + if ($.browser.msie) { + $("#togetherjs-browser-broken-is-ie").show(); + } + }, + + browserUnsupported: function (next) { + if (! $.browser.msie) { + next(); + return; + } + var cancel = true; + windowing.show("#togetherjs-browser-unsupported", { + onClose: function () { + if (cancel) { + session.close(); + } else { + next(); + } + } + }); + $("#togetherjs-browser-unsupported-anyway").click(function () { + cancel = false; + }); + }, + + sessionIntro: function (next) { + // pgbovine - pop open chat + windowing.show("#togetherjs-chat"); + + if ((! session.isClient) || ! session.firstRun) { + next(); + return; + } + TogetherJS.config.close("suppressJoinConfirmation"); + if (TogetherJS.config.get("suppressJoinConfirmation")) { + next(); + return; + } + var cancelled = false; + windowing.show("#togetherjs-intro", { + onClose: function () { + if (! cancelled) { + next(); + } + } + }); + $("#togetherjs-intro .togetherjs-modal-dont-join").click(function () { + cancelled = true; + windowing.hide(); + session.close("declined-join"); + }); + }, + + // pgbovine - disable boilerplate walkthrough popup + walkthrough: function (next) { + next(); + }, + /* + walkthrough: function (next) { + storage.settings.get("seenIntroDialog").then(function (seenIntroDialog) { + if (seenIntroDialog) { + next(); + return; + } + require(["walkthrough"], function (walkthrough) { + walkthrough.start(true, function () { + storage.settings.set("seenIntroDialog", true); + next(); + }); + }); + }); + }, + */ + + share: function (next) { + TogetherJS.config.close("suppressInvite"); + if (session.isClient || (! session.firstRun) || + TogetherJS.config.get("suppressInvite")) { + next(); + return; + } + require(["windowing"], function (windowing) { + windowing.show("#togetherjs-share"); + // FIXME: no way to detect when the window is closed + // If there was a next() step then it would not work + }); + } + + }; + + return startup; +}); diff --git a/v3/js/togetherjs/togetherjs/storage.js b/v3/js/togetherjs/togetherjs/storage.js new file mode 100644 index 000000000..1378bd21f --- /dev/null +++ b/v3/js/togetherjs/togetherjs/storage.js @@ -0,0 +1,142 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define(["util"], function (util) { + var assert = util.assert; + var Deferred = util.Deferred; + var DEFAULT_SETTINGS = { + name: "", + defaultName: "", + avatar: null, + stickyShare: null, + color: null, + seenIntroDialog: false, + seenWalkthrough: false, + dontShowRtcInfo: false + }; + + var DEBUG_STORAGE = false; + + var Storage = util.Class({ + constructor: function (name, storage, prefix) { + this.name = name; + this.storage = storage; + this.prefix = prefix; + }, + + get: function (key, defaultValue) { + var self = this; + return Deferred(function (def) { + // Strictly this isn't necessary, but eventually I want to move to something more + // async for the storage, and this simulates that much better. + setTimeout(util.resolver(def, function () { + key = self.prefix + key; + var value = self.storage.getItem(key); + if (! value) { + value = defaultValue; + if (DEBUG_STORAGE) { + console.debug("Get storage", key, "defaults to", value); + } + } else { + value = JSON.parse(value); + if (DEBUG_STORAGE) { + console.debug("Get storage", key, "=", value); + } + } + return value; + })); + }); + }, + + set: function (key, value) { + var self = this; + if (value !== undefined) { + value = JSON.stringify(value); + } + return Deferred(function (def) { + key = self.prefix + key; + if (value === undefined) { + self.storage.removeItem(key); + if (DEBUG_STORAGE) { + console.debug("Delete storage", key); + } + } else { + self.storage.setItem(key, value); + if (DEBUG_STORAGE) { + console.debug("Set storage", key, value); + } + } + setTimeout(def.resolve); + }); + }, + + clear: function () { + var self = this; + var promises = []; + return Deferred((function (def) { + this.keys().then(function (keys) { + keys.forEach(function (key) { + // FIXME: technically we're ignoring the promise returned by all + // these sets: + promises.push(self.set(key, undefined)); + }); + util.resolveMany(promises).then(function () { + def.resolve(); + }); + }); + }).bind(this)); + }, + + keys: function (prefix, excludePrefix) { + // Returns a list of keys, potentially with the given prefix + var self = this; + return Deferred(function (def) { + setTimeout(util.resolver(def, function () { + prefix = prefix || ""; + var result = []; + for (var i = 0; i < self.storage.length; i++) { + var key = self.storage.key(i); + if (key.indexOf(self.prefix + prefix) === 0) { + var shortKey = key.substr(self.prefix.length); + if (excludePrefix) { + shortKey = shortKey.substr(prefix.length); + } + result.push(shortKey); + } + } + return result; + })); + }); + }, + + toString: function () { + return '[storage for ' + this.name + ']'; + } + + }); + + var namePrefix = TogetherJS.config.get("storagePrefix"); + TogetherJS.config.close("storagePrefix"); + + var storage = Storage('localStorage', localStorage, namePrefix + "."); + + storage.settings = util.mixinEvents({ + defaults: DEFAULT_SETTINGS, + + get: function (name) { + assert(storage.settings.defaults.hasOwnProperty(name), "Unknown setting:", name); + return storage.get("settings." + name, storage.settings.defaults[name]); + }, + + set: function (name, value) { + assert(storage.settings.defaults.hasOwnProperty(name), "Unknown setting:", name); + return storage.set("settings." + name, value); + } + + }); + + storage.tab = Storage('sessionStorage', sessionStorage, namePrefix + "-session."); + + return storage; +}); diff --git a/v3/js/togetherjs/togetherjs/templates-en-US.js b/v3/js/togetherjs/togetherjs/templates-en-US.js new file mode 100644 index 000000000..dc042732b --- /dev/null +++ b/v3/js/togetherjs/togetherjs/templates-en-US.js @@ -0,0 +1,11 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define([], function () { + return { + "interface": "<% /*\n This is basically all the markup and interface for TogetherJS.\n Note all links should be like http://localhost:8080/togetherjs/*\n these links are rewritten with the location where TogetherJS was deployed.\n\n This file is inlined into togetherjs/templates.js\n*/ %>\n
    \n\n \n
    \n
    \n \n \"drag\"\n \n \n \"drag\"\n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n
    \n\n \n
    \n
    Update avatar
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n \n or\n \n
    \n
    \n\n \n
    \n
    Invite a friend
    \n
    \n
    \n

    Copy and paste this link over IM or email:

    \n \n
    \n
    \n

    Copy and paste this link over IM or email:

    \n \n \n
    \n
    \n
    \n\n \n
    \n
    Participants
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    \n\n
    \n

    Role:\n \n

    \n\n

    Currently at:\n \n

    \n\n

    Status:\n \n

    \n\n

    Follow this participant:\n \n \n

    \n\n
    \n\n
    \n \n \n \n
    \n is on the same page as you.\n
    \n
    \n
    \n\n \n
    \n
    Chat
    \n
    \n
    \n \n & You\n
    \n \n
    \n Nobody is here yet. Please wait ...\n
    \n\n
    \n\n
    \n\n \n
    \n
    \n
    HH:MM AM/PM
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    left the session.
    \n
    \n
    \n
    declined to join the session.
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    joined the session.
    \n
    \n
    \n\n \n
    \n \n
    \n\n \n \n\n \n
    \n
    \n
    \n
    \n \n is on the same page as you.\n
    \n
    \n \n has gone to: \n
    \n \n \n
    \n\n \n\n
    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n
    \n \n
    \n
    \n\n \n
    \n\n
    Audio Chat
    \n
    \n

    \n Activate your browser microphone near your URL bar above.\n

    \n

    \n Talking on your microphone through your web browser is an experimental feature.\n

    \n

    \n Read more about Audio Chat here.\n

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Audio Chat
    \n\n
    \n

    Audio chat requires you to use a newer browser!

    \n

    \n Live audio chat requires a newer (or different) browser than you're using.\n

    \n

    \n See this pagefor more information and a list of supported browsers.\n

    \n
    \n\n
    \n
    \n \n
    \n
    \n
    \n\n \n
    \n \"\"\n \"[close]\"\n
    \n
    \n
    \n\n \n
    \n
    \n \n [nickname]\n \n
    \n
    \n
    \"\" Update your name
    \n
    \"\" Change avatar
    \n
    Pick profile color
    \n
    \n
    Help
    \n
    Feedback
    \n
    \n
    \n
    \n
    Refresh users
    \n
    Invite anyone
    \n
    \n
    \n
    \"\" End TogetherJS
    \n
    \n\n \n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    Settings and Profile
    \n
    \n
    \n \n \n
    \n
    \n
    \"\" Update your name
    \n
    \"\" Change avatar
    \n
    Pick profile color
    \n
    \n
    Help
    \n
    Feedback
    \n
    \n
    \"\" End TOOL_NAME
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    Update Name
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n \n \n \n \n\n \n
    \n
    Join TOOL_NAME session?
    \n
    \n

    Your friend has asked you to join their TOOL_SITE_LINK browser session to collaborate in real-time!

    \n

    Would you like to join their session?

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Sorry
    \n\n
    \n

    \n We're sorry, TOOL_NAME doesn't work with this browser. Please upgrade to a supported browser to try TOOL_NAME.\n

    \n\n

    \n We need your help fixing TogetherJS on Internet Explorer! Here are a list of IE GitHub issues we need fixed that you can work on.\n Internet Explorer is currently not supported. If you do want to try out TogetherJS, we'd suggest using Firefox or Chrome.\n

    \n
    \n\n
    \n \n
    \n\n
    \n\n \n
    \n
    Unsupported Browser
    \n\n
    \n

    \n We need your help fixing TogetherJS on Internet Explorer! Here are a list of IE GitHub issues we need fixed that you can work on.\n Internet Explorer is currently not supported. If you do want to try out TogetherJS, we'd suggest using Firefox or Chrome.\n

    \n\n

    You can continue to try to use TOOL_NAME, but you are likely to hit lots of bugs. So be warned.

    \n\n
    \n\n
    \n \n \n
    \n\n
    \n\n
    \n
    End session?
    \n
    \n

    \n Are you sure you'd like to end your TOOL_NAME session?\n

    \n
    \n
    \n \n or\n \n
    \n
    \n\n
    \n
    Feedback
    \n \n \n
    \n\n
    \n \n
    \n
    Following to new URL...
    \n
    \n
    \n Following\n \n to \n
    \n
    \n\n \n
    \n
    \n
    \n \n has invited anyone\n you\n to \n
    \n
    \n\n
    \n\n \n
    \n
    \n\n \n
    \n\n \n
    \n\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n
    \n\n \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    \n", + walkthrough: "\n
    \n
    You're using TOOL_NAME!
    \n\n
    \n
    \n\n
    \n

    \n\t

    TOOL_NAME is a service for your website that makes it easy to collaborate in real-time on SITE_NAME

    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n

    Set up your avatar, name and user color above. If you'd like to update it later, you can click your Profile button.

    \n
    \n
    \n

    \n

    Change your avatar, name and user color using the Profile button.

    \n
    \n
    \n\n
    \n

    \n

    \n

    You can invite more friends to the session by sending the invite link in the TOOL_NAME dock.

    \n

    \n \n Copy and paste this link into IM or email to invite friends.\n \n \n

    \n

    Send the above link to a friend so they can join your session! You can find this invite link on the TOOL_NAME dock as well.

    \n
    \n\n
    \n

    \n

    Friends who join your TOOL_NAME session will appear here. You can click their avatars to see more.

    \n
    \n\n
    \n

    \n

    When your friends join you in your TOOL_NAME session, you can chat with them here!

    \n
    \n\n
    \n

    \n

    If your browser supports it, click the microphone icon to begin a audio chat. Learn more about this experimental feature here.

    \n
    \n\n
    \n

    \n

    Alright, you're ready to use TOOL_NAME. Now start collaborating on SITE_NAME!

    \n
    \n\n
    \n \n \n
    \n
    \n
    \n\n
    \n \n
    \n\n
    \n", + names: "Friendly Fox, Brilliant Beaver, Observant Owl, Gregarious Giraffe, Wild Wolf, Silent Seal, Wacky Whale, Curious Cat, Intelligent Iguana" + }; +}); diff --git a/v3/js/togetherjs/togetherjs/templates-ru.js b/v3/js/togetherjs/togetherjs/templates-ru.js new file mode 100644 index 000000000..6b00ac358 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/templates-ru.js @@ -0,0 +1,11 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define([], function () { + return { + "interface": "<% /*\n This is basically all the markup and interface for TogetherJS.\n Note all links should be like http://localhost:8080/togetherjs/*\n these links are rewritten with the location where TogetherJS was deployed.\n\n This file is inlined into togetherjs/templates.js\n*/ %>\n
    \n\n \n
    \n
    \n \n \"drag\"\n \n \n \"drag\"\n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n
    \n\n \n
    \n
    Обновить аватар
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n \n или\n \n
    \n
    \n\n \n
    \n
    Пригласить друга
    \n
    \n
    \n

    Скопируйте эту ссылку и приклейте её в IM или в имейл:

    \n \n
    \n
    \n

    Скопируйте эту ссылку и приклейте её в IM или в имейл:

    \n \n \n
    \n
    \n
    \n\n \n
    \n
    Участники
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    \n\n
    \n

    Роль:\n \n

    \n\n

    Сейчас на:\n \n

    \n\n

    Статус:\n \n

    \n\n

    Следовать за этим участником:\n \n \n

    \n\n
    \n\n
    \n \n \n \n
    \n с Вами на одной странице.\n
    \n
    \n
    \n\n \n
    \n
    Чат
    \n
    \n
    \n \n & Вы\n
    \n \n
    \n Nobody is here yet. Please wait ...\n
    \n\n
    \n\n
    \n\n \n
    \n
    \n
    HH:MM AM/PM
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    покинул сеанс.
    \n
    \n
    \n
    отказался присоединиться к сеансу.
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    присоединился к сеансу.
    \n
    \n
    \n\n \n
    \n \n
    \n\n \n \n\n \n
    \n
    \n
    \n
    \n \n с Вами на одной странице.\n
    \n
    \n \n отправился на: \n
    \n \n \n
    \n\n \n\n
    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n
    \n \n
    \n
    \n\n \n
    \n\n
    Аудио-чат
    \n
    \n

    \n Включите микрофон браузера возле адресной строки вверху.\n

    \n

    \n Разговор по микрофону через веб-браузер - экспериментальное свойство.\n

    \n

    \n Почитайте больше об аудио-чате здесь.\n

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Аудио-чат
    \n\n
    \n

    Аудио-чат требует, чтобы Вы использовалибраузер поновее!

    \n

    \n Для живого аудио-чата требуется более новый (или другой) браузер, чем тот, который Вы используете.\n

    \n

    \n Посмотрите на 'этой странице' дополнительную информацию и список поддерживаемых браузеров.\n

    \n
    \n\n
    \n
    \n \n
    \n
    \n
    \n\n \n
    \n \"\"\n \"[close]\"\n
    \n
    \n
    \n\n \n
    \n
    \n \n [nickname]\n \n
    \n
    \n
    \"\" Обновить своё имя
    \n
    \"\" Изменить аватар
    \n
    Выбрать цвет профиля
    \n
    \n
    Помощь
    \n
    Отзывы и предложения
    \n
    \n
    \n
    \n
    Refresh users
    \n
    Пригласить кого-нибудь
    \n
    \n
    \n
    \"\" Закончить TogetherJS
    \n
    \n\n \n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    Установки и профиль
    \n
    \n
    \n \n \n
    \n
    \n
    \"\" Обновить своё имя
    \n
    \"\" Изменить аватар
    \n
    Выбрать цвет профиля
    \n
    \n
    Помощь
    \n
    Отзывы и предложения
    \n
    \n
    \"\" Закончить TOOL_NAME
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    Обновить имя
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n \n \n \n \n\n \n
    \n
    Присоединиться к сеансу TOOL_NAME?
    \n
    \n

    Ваш друг просит Вас присоединиться к его TOOL_SITE_LINK браузер-сеансу, чтобы сотрудничать с Вами в реальном времени!

    \n

    Хотели бы Вы присоединиться к его сеансу?

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Извините
    \n\n
    \n

    \n Извините, TOOL_NAME не работает на этом браузере. Просьба обновиться до поддерживаемого браузера, чтобы попробовать TOOL_NAME.\n

    \n\n

    \n Нам нужна Ваша помощь в починке TogetherJS на Internet Explorer! Вот список ошибок на GitHub, которые нам нужно починить, и над которыми Вы можете поработать.\n Internet Explorer в настоящее время не поддерживается. Если Вы действительно хотите испытать TogetherJS, советуем Вам использовать Firefox или Chrome.\n

    \n
    \n\n
    \n \n
    \n\n
    \n\n \n
    \n
    Браузер не поддерживается
    \n\n
    \n

    \n Нам нужна Ваша помощь в починке TogetherJS на Internet Explorer! Вот список ошибок на GitHub, которые нам нужно починить, и над которыми Вы можете поработать.\n Internet Explorer в настоящее время не поддерживается. Если Вы действительно хотите испытать TogetherJS, советуем Вам использовать Firefox или Chrome.\n

    \n\n

    Вы можете продолжать пробовать использовать TOOL_NAME, но скорее всего Вы получите массу ошибок. Мы Вас предупредили.

    \n\n
    \n\n
    \n \n \n
    \n\n
    \n\n
    \n
    Закончить сеанс?
    \n
    \n

    \n Вы уверены, что хотите завершить свой сеанс TOOL_NAME?\n

    \n
    \n
    \n \n или\n \n
    \n
    \n\n
    \n
    Отзывы и предложения
    \n \n \n
    \n\n
    \n \n
    \n
    Следую на новый URL...
    \n
    \n
    \n Следую\n \n на \n
    \n
    \n\n \n
    \n
    \n
    \n \n пригласил кого-либо\n Вас\n на \n
    \n
    \n\n
    \n\n \n
    \n
    \n\n \n
    \n\n \n
    \n\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n
    \n\n \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    \n", + walkthrough: "\n
    \n
    Вы используете TOOL_NAME!
    \n\n
    \n
    \n\n
    \n

    \n\t

    TOOL_NAME - это служба для Вашего сайта, которая помогает Вам сотрудничать с другими в реальном времени на сайте SITE_NAME

    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n

    Задайте свои аватар, имя и пользовательский цвет вверху. При желании изменить их позднее, щёлкните по кнопке Профиль.

    \n
    \n
    \n

    \n

    Вы можете изменить свои аватар, имя и пользовательский цвет, используя кнопку Профиль.

    \n
    \n
    \n\n
    \n

    \n

    \n

    Вы можете пригласить ещё друзей на Ваш сеанс, послав им ссылку с приглашением на панели TOOL_NAME.

    \n

    \n \n Скопируйте и приклейте эту ссылку в IM или в имейл, чтобы пригласить друзей.
    \n
    \n \n

    \n

    Пошлите другу ссылку вверху, чтобы он мог присоединиться к Вашему сеансу! Вы также можете найти эту ссылку с приглашением на панели TOOL_NAME.

    \n
    \n\n
    \n

    \n

    Друзья, которые присоединятся к Вашему сеансу TOOL_NAME, появятся здесь. Вы можете щёлкнуть по аватару друга, чтобы увидеть больше информации.

    \n
    \n\n
    \n

    \n

    Когда Ваши друзья присоединятся к Вашему сеансу TOOL_NAME, Вы сможете общаться с ними здесь!

    \n
    \n\n
    \n

    \n

    Если Ваш браузер поддерживает аудио-чат, Вы можете запустить его нажатием на иконку микрофона. Узнайте побольше об этой экспериментальной функции здесь.

    \n
    \n\n
    \n

    \n

    Ну вот Вы и готовы использовать TOOL_NAME. Теперь начинайте сотрудничать на сайте SITE_NAME!

    \n
    \n\n
    \n \n \n
    \n
    \n
    \n\n
    \n \n
    \n\n
    \n", + names: "Лысый Лис, Большой Бобёр, Умная Сова, Жирный Жираф, Серый Волк, Толстый Тюлень, Рыба-кит, Кисьян Котяра, Известная Игуана" + }; +}); diff --git a/v3/js/togetherjs/togetherjs/templates.js b/v3/js/togetherjs/togetherjs/templates.js new file mode 100644 index 000000000..b7fb53bc7 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/templates.js @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// FIXME: maybe it would be better to dynamically assemble the first +// argument to define() here to include the localized module: +define(["util", "require"], function (util, require) { + var assert = util.assert; + + function clean(t) { + // Removes <% /* ... */ %> comments: + t = t.replace(/[<][%]\s*\/\*[\S\s\r\n]*\*\/\s*[%][>]/, ""); + t = util.trim(t); + t = t.replace(/http:\/\/localhost:8080/g, TogetherJS.baseUrl); + t = t.replace(/TOOL_NAME/g, 'TogetherJS'); + t = t.replace(/SITE_NAME/g, '[site name]'); + t = t.replace(/TOOL_SITE_LINK/g, 'TogetherJS'); + return t; + } + + var lang = TogetherJS.getConfig("lang") || "en-US"; + var moduleName = "templates-" + lang; + var templatesLang; + require([moduleName], function (mod) { + templatesLang = mod; + }); + + return function (resourceName) { + // Sometimes require([moduleName]) doesn't return even after the + // module has been loaded, but this sync version of require() will + // pick up the module in that case: + if (! templatesLang) { + try { + templatesLang = require(moduleName); + } catch (e) { + console.warn("Error requiring module:", e); + } + } + assert(templatesLang, "Templates not yet loaded"); + return clean(templatesLang[resourceName]); + }; + +}); diff --git a/v3/js/togetherjs/togetherjs/templating.js b/v3/js/togetherjs/togetherjs/templating.js new file mode 100644 index 000000000..61d4ce864 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/templating.js @@ -0,0 +1,81 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +define(["jquery", "util", "peers", "windowing", "session"], function ($, util, peers, windowing, session) { + var assert = util.assert; + var templating = util.Module("templating"); + + templating.clone = function (templateId) { + templateId = "#togetherjs-template-" + templateId; + var template = $(templateId); + assert(template.length, "No template found with id:", templateId); + template = template.clone(); + template.attr("id", null); + // FIXME: if called directly, doesn't emit new-element event: + return template; + }; + + templating.sub = function (templateId, variables) { + var template = templating.clone(templateId); + variables = variables || {}; + util.forEachAttr(variables, function (value, attr) { + // FIXME: do the substitution... somehow? + var subs = template.find(".togetherjs-sub-" + attr).removeClass("togetherjs-sub-" + attr); + if (subs.length) { + if (typeof value == "string") { + subs.text(value); + } else if (value instanceof $) { + subs.append(value); + } else { + assert(false, "Unknown variable value type:", attr, "=", value); + } + } + var ifs = template.find(".togetherjs-if-" + attr).removeClass("togetherjs-sub-" + attr); + if (! value) { + ifs.hide(); + } + ifs = template.find(".togetherjs-ifnot-" + attr).removeClass("togetherjs-ifnot-" + attr); + if (value) { + ifs.hide(); + } + var attrName = "data-togetherjs-subattr-" + attr; + var attrs = template.find("[" + attrName + "]"); + attrs.each(function (index, element) { + assert(typeof value == "string"); + element = $(element); + var subAttribute = element.attr(attrName); + element.attr(attrName, null); + element.attr(subAttribute, value); + }); + }); + if (variables.peer) { + variables.peer.view.setElement(template); + } + if (variables.date) { + var date = variables.date; + if (typeof date == "number") { + date = new Date(date); + } + var ampm = "AM"; + var hour = date.getHours(); + if (hour > 12) { + hour -= 12; + ampm = "PM"; + } + var minute = date.getMinutes(); + var t = hour + ":"; + if (minute < 10) { + t += "0"; + } + t += minute; + template.find(".togetherjs-time").text(t); + template.find(".togetherjs-ampm").text(ampm); + } + + // FIXME: silly this is on session: + session.emit("new-element", template); + return template; + }; + + return templating; +}); diff --git a/v3/js/togetherjs/togetherjs/togetherjs.css b/v3/js/togetherjs/togetherjs/togetherjs.css new file mode 100644 index 000000000..ca2cedf13 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/togetherjs.css @@ -0,0 +1,2728 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this file, +* You can obtain one at http://mozilla.org/MPL/2.0/. */ +/*Fonts*/ +@font-face { + font-family: openSansRegular; + src: url('fonts/OpenSans-Regular.ttf'); +} +@font-face { + font-family: openSansLight; + src: url('fonts/OpenSans-Light.ttf'); +} +@font-face { + font-family: openSansBold; + src: url('fonts/OpenSans-Bold.ttf'); +} +/* .togetherjs reset */ +/* http://yuilibrary.com/yui/docs/cssreset/ */ +.togetherjs { + /* +YUI 3.10.3 (build 2fb5187) +Copyright 2013 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +http://yuilibrary.com/license/ +*/ + + /* + TODO think about hanlding inheritence differently, maybe letting IE6 fail a bit... +*/ + + /* to preserve line-height and selector appearance */ + + /*to enable resizing for IE*/ + + /*because legend doesn't inherit in IE */ + +} +.togetherjs * { + -webkit-box-sizing: content-box !important; + -moz-box-sizing: content-box !important; + box-sizing: content-box !important; +} +.togetherjs header { + width: auto; +} +.togetherjs div, +.togetherjs dl, +.togetherjs dt, +.togetherjs dd, +.togetherjs ul, +.togetherjs ol, +.togetherjs li, +.togetherjs h1, +.togetherjs h2, +.togetherjs h3, +.togetherjs h4, +.togetherjs h5, +.togetherjs h6, +.togetherjs pre, +.togetherjs code, +.togetherjs form, +.togetherjs fieldset, +.togetherjs legend, +.togetherjs input, +.togetherjs textarea, +.togetherjs p, +.togetherjs blockquote, +.togetherjs th, +.togetherjs td { + margin: 0; + padding: 0; +} +.togetherjs table { + border-collapse: collapse; + border-spacing: 0; +} +.togetherjs fieldset, +.togetherjs img { + border: 0; +} +.togetherjs address, +.togetherjs caption, +.togetherjs cite, +.togetherjs code, +.togetherjs dfn, +.togetherjs em, +.togetherjs strong, +.togetherjs th, +.togetherjs var { + font-style: normal; + font-weight: normal; +} +.togetherjs ol, +.togetherjs ul { + list-style: none; +} +.togetherjs caption, +.togetherjs th { + text-align: left; +} +.togetherjs h1, +.togetherjs h2, +.togetherjs h3, +.togetherjs h4, +.togetherjs h5, +.togetherjs h6 { + font-size: 100%; + font-weight: normal; +} +.togetherjs q:before, +.togetherjs q:after { + content: ''; +} +.togetherjs abbr, +.togetherjs acronym { + border: 0; + font-variant: normal; +} +.togetherjs sup { + vertical-align: text-top; +} +.togetherjs sub { + vertical-align: text-bottom; +} +.togetherjs input, +.togetherjs textarea, +.togetherjs select { + font-family: inherit; + font-size: inherit; + font-weight: inherit; +} +.togetherjs input, +.togetherjs textarea, +.togetherjs select { + *font-size: 100%; +} +.togetherjs legend { + color: #000; +} +.togetherjs { + /* General styles */ + + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial; + font-size: 14px; + line-height: 20px; + color: #333333; + font-weight: normal; +} +.togetherjs a { + color: #0095DD; + text-decoration: none; +} +.togetherjs a:hover { + color: #0095DD; + text-decoration: underline; +} +.togetherjs p { + margin: 7px 0 7px 0; +} +.togetherjs button, +.togetherjs img { + vertical-align: middle; +} +.togetherjs input:focus { + outline: none; +} +.togetherjs button::-moz-focus-inner, +.togetherjs input::-moz-focus-inner { + padding: 0; + border: 0; +} +.togetherjs .togetherjs-right { + float: right; +} +button:disabled { + opacity: 0.2; +} +button[disabled]:hover { + background: #0194DB; +} +.togetherjs-default { + display: inline-block; + border-radius: 4px; + text-align: center; + height: 40px; + /*line-height not consistent across browsers*/ + + line-height: 37px; + text-decoration: none; + min-width: 100px; + border: none; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + /*transition: all 0.25s linear 0s;*/ + + text-shadow: none; + margin: 3px; + font-size: 14px; + background: #9A9A9A; + color: #fff; +} +.togetherjs-default.togetherjs-follow { + cursor: pointer; +} +.togetherjs-default:hover { + background: #ADADAD; +} +.togetherjs-primary { + display: inline-block; + border-radius: 4px; + text-align: center; + height: 40px; + /*line-height not consistent across browsers*/ + + line-height: 37px; + text-decoration: none; + min-width: 100px; + border: none; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + /*transition: all 0.25s linear 0s;*/ + + text-shadow: none; + margin: 3px; + font-size: 14px; + background: #0194DB; + color: #fff; +} +.togetherjs-primary.togetherjs-follow { + cursor: pointer; +} +.togetherjs-primary:hover { + background: #00ACFF; +} +a.togetherjs-primary, +a.togetherjs-default, +a.togetherjs-secondary, +a.togetherjs-primary:link, +a.togetherjs-default:link, +a.togetherjs-secondary:link, +a.togetherjs-primary:active, +a.togetherjs-default:active, +a.togetherjs-secondary:active, +a.togetherjs-primary:visited, +a.togetherjs-default:visited, +a.togetherjs-secondary:visited, +a.togetherjs-primary:hover, +a.togetherjs-default:hover, +a.togetherjs-secondary:hover { + color: #fff; + text-decoration: none; + vertical-align: middle; +} +#togetherjs-avatar-edit .togetherjs-person-avatar-swatch { + margin-left: 22px; +} +#togetherjs-avatar-edit .togetherjs-person { + float: left; + height: 36px; + width: 36px; + margin: 35px; + background-repeat: no-repeat; + background-size: 40px 40px; + background-position: -2px -1px; + border: 2px solid; + border-radius: 2px; + background-clip: border-box; +} +#togetherjs-avatar-edit #togetherjs-avatar-buttons { + float: right; + width: 172px; + padding: 45px 0px; +} +input.togetherjs-upload-avatar { + line-height: 0px; + width: 174px; + margin-left: -20px; +} +#togetherjs-upload-avatar { + float: left; +} +#togetherjs-camera-avatar { + clear: both; +} +#togetherjs-avatar-edit .togetherjs-buttons { + clear: both; +} +.togetherjs-destructive { + display: inline-block; + border-radius: 4px; + text-align: center; + height: 40px; + /*line-height not consistent across browsers*/ + + line-height: 37px; + text-decoration: none; + min-width: 100px; + border: none; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + /*transition: all 0.25s linear 0s;*/ + + text-shadow: none; + margin: 3px; + font-size: 14px; + background: #AC2924; + color: #ffffff; +} +.togetherjs-destructive:hover { + background: #d40606; +} +.togetherjs-secondary { + display: inline-block; + border-radius: 4px; + text-align: center; + height: 40px; + /*line-height not consistent across browsers*/ + + line-height: 37px; + text-decoration: none; + min-width: 100px; + border: none; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + /*transition: all 0.25s linear 0s;*/ + + text-shadow: none; + margin: 3px; + font-size: 14px; + background: #999999; + /* Old browsers */ + + background: -moz-linear-gradient(top, #999999 0%, #888888 100%); + /* FF3.6+ */ + + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #999999), color-stop(100%, #888888)); + /* Chrome,Safari4+ */ + + background: -webkit-linear-gradient(top, #999999 0%, #888888 100%); + /* Chrome10+,Safari5.1+ */ + + background: -o-linear-gradient(top, #999999 0%, #888888 100%); + /* Opera 11.10+ */ + + background: -ms-linear-gradient(top, #999999 0%, #888888 100%); + /* IE10+ */ + + background: linear-gradient(to bottom, #999999 0%, #888888 100%); + /* W3C */ + + color: #fff; +} +.togetherjs-cancel { + display: inline-block; + background: inherit; + border: none; + padding: 3px 0px; + margin: 0px 0px 0px; + min-width: 0; + font-size: 14px; + color: #333333; + font-family: openSansLight, Helvetica; + vertical-align: -2px !important; +} +.togetherjs-cancel:hover { + cursor: pointer; + border-bottom: 1px solid #BCBCBC; + margin: 0px 0px -1px; +} +.togetherjs-alt-text { + vertical-align: -2px; +} +/*FIX ME something weird is going on here. the avatar has no paddingTop only on Safari*/ +/*button#togetherjs-profile-button.togetherjs-button { + padding:10px 0px !important; +}*/ +/* General dock rules: */ +.togetherjs #togetherjs-buttons .togetherjs-button { + background-color: inherit; + border: none; + padding: 0; + margin: 0; + position: relative; + width: 60px; + height: 60px; + background-size: 40px 40px; + background-repeat: no-repeat; + background-position: center; + border-top: 1px solid rgba(0, 0, 0, 0.2); +} +.togetherjs #togetherjs-buttons .togetherjs-button:hover { + background-color: #0F81BF; +} +.togetherjs #togetherjs-buttons hr { + padding: 0; + margin: 0; +} +.togetherjs #togetherjs-dock-participants button.togetherjs-active { + background-color: #0F81BF !important; +} +.togetherjs #togetherjs-buttons #togetherjs-share-button { + background-image: url('./images/button-share.png'); +} +.togetherjs #togetherjs-buttons #togetherjs-share-button:hover { + background-image: url('./images/button-share-active.png'); +} +.togetherjs #togetherjs-buttons #togetherjs-share-button.togetherjs-active { + background-image: url('./images/button-share-active.png') !important; + background-color: #0F81BF; +} +.togetherjs #togetherjs-buttons #togetherjs-audio-button { + background-image: url('./images/button-mic.png'); +} +.togetherjs #togetherjs-buttons #togetherjs-audio-button:hover { + background-image: url('./images/button-mic-active.png'); + /*background-color:#0095dd;*/ + + /*cursor: default;*/ + +} +.togetherjs #togetherjs-buttons #togetherjs-audio-button.togetherjs-active { + background-image: url('./images/button-mic-active.png') !important; + background-color: #0F81BF; +} +.togetherjs #togetherjs-buttons #togetherjs-chat-button { + background-image: url('./images/button-chat.png'); +} +.togetherjs #togetherjs-buttons #togetherjs-chat-button:hover { + background-image: url('./images/button-chat-active.png'); +} +.togetherjs #togetherjs-buttons #togetherjs-chat-button.togetherjs-active { + background-image: url('./images/button-chat-active.png') !important; + background-color: #0F81BF; +} +.togetherjs #togetherjs-dock-anchor { + height: 20px; + text-align: center; + /* FIXME: disabling dock movement for now, cursor would be misleading: */ + + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + width: 100%; + position: relative; + left: 0px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.togetherjs .togetherjs-subtitle { + background: #0195DD; + width: 280px; + height: 17px; + border-bottom: 1px solid #0071A7; + color: rgba(255, 255, 255, 0.5); + font-size: 12px; + padding: 7px 10px; + left: -14px; + top: -15px; + position: relative; +} +.togetherjs .togetherjs-subtitle #togetherjs-chat-participants { + font-size: 12px; + color: rgba(255, 255, 255, 0.5); +} +.togetherjs .togetherjs-subtitle #togetherjs-chat-no-participants { + font-size: 12px; + color: rgba(255, 255, 255, 0.5); +} +.togetherjs .togetherjs-subtitle #togetherjs-chat-participant-list { + font-size: 12px; + color: rgba(255, 255, 255, 0.5); +} +.togetherjs #togetherjs-chat-input { + width: 264px; + height: 20px; + overflow-x: hidden; + overflow-y: hidden; + resize: none; + font-size: 14px; + padding: 4px 6px 5px; + border-radius: 4px; + border: 1px solid #cccccc; + /*box-shadow: inset 0 2px 2px rgba(0,0,0,0.1);*/ + + font-family: openSansLight, Helvetica, sans-serif; +} +.togetherjs #togetherjs-chat-input:focus { + border: 1px solid #0095DD; +} +.togetherjs #togetherjs-chat-input-box { + margin: 0; + padding: 10px 10px 11px; + border-top: 1px solid rgba(0, 0, 0, 0.1); + background: #F2F2F2; + position: relative; + /*box-shadow: 0 -1px 2px rgba(0,0,0,0.1);*/ + + height: 31px; + width: 280px; + margin-left: -7px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.togetherjs .togetherjs-window #togetherjs-chat-messages { + width: 300px; + position: relative; + left: -14px; + background: #fff; + top: -30px; + margin-bottom: -30px !important; +} +.togetherjs .togetherjs-chat-item { + padding: 0 0 20px 0; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + font-size: 14px; + padding: 10px 0px; + margin: 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + color: #333333; + min-height: 60px; +} +.togetherjs #togetherjs-chat-messages .togetherjs-chat-item a.togetherjs-person-url { + width: 105px; + white-space: nowrap; + vertical-align: top; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; +} +.togetherjs #togetherjs-chat-messages .togetherjs-person-self { + float: left; + margin-bottom: 20px; + margin-top: 7px; +} +.togetherjs #togetherjs-chat-messages .togetherjs-person { + float: left; + margin-bottom: 20px; +} +.togetherjs .togetherjs-person-name-abbrev { + color: #333333; + font-family: openSansRegular, Helvetica, sans-serif; + padding-top: 2px; +} +.togetherjs .togetherjs-timestamp { + float: right; + color: rgba(51, 51, 51, 0.5); + font-size: 9px !important; + padding: 0 15px; +} +.togetherjs .togetherjs-chat-content { + white-space: pre-wrap; + line-height: 20px; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + margin: 3px 15px 3px 60px; +} +.togetherjs #togetherjs-window-pointer-right, +.togetherjs #togetherjs-window-pointer-left { + position: fixed; + width: 10px; + height: 10px; + margin-right: -5px; + margin-top: -5px; + background: #fff; + border-right: 1px solid rgba(0, 0, 0, 0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + z-index: 10002; + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); +} +.togetherjs #togetherjs-window-pointer-right { + -moz-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); +} +.togetherjs #togetherjs-window-pointer-left { + -moz-transform: rotate(135deg); + -webkit-transform: rotate(135deg); +} +.togetherjs .togetherjs-window { + position: fixed; + background-color: #ffffff; + color: #000000; + padding: 0 7px 0 7px; + z-index: 10001; + width: 286px; + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); +} +.togetherjs .togetherjs-window section { + margin: 15px 7px; +} +.togetherjs .togetherjs-window > header { + font-weight: bold; + font-variant: normal; + text-align: center; + font-family: openSansRegular, Helvetica; + color: #fff; + margin: 0 -7px 0 -7px; + padding: 10px 4px 5px 30px; + height: 24px; + background: #0095DD; + border-radius: 4px 4px 0 0; + position: relative; + border-bottom: 1px solid #0071A7; +} +.togetherjs .togetherjs-window .togetherjs-share-link { + width: 256px; + font-size: 12px; + padding: 6px 6px 4px; + border-radius: 4px; + border: 1px solid #cccccc; + box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.1); + font-family: Monaco, sans-serif; + margin: 7px 0px; +} +.togetherjs .togetherjs-window .togetherjs-share-link:focus { + border: 1px solid #0095DD; +} +.togetherjs .togetherjs-window header button.togetherjs-close { + background-color: inherit; + border: none; + padding: 0; + margin: 0; + border-left: 1px solid #0071A7; + float: right; + font-weight: bold; + cursor: pointer; + background-image: url('./images/icon-close@2x.png'); + background-position: center center; + background-repeat: no-repeat; + background-size: 13px 13px; + width: 39px; + height: 39px; + margin-top: -10px; + margin-right: -4px; + border-top-right-radius: 4px; +} +.togetherjs .togetherjs-window header button.togetherjs-close:hover { + background-image: url('./images/icon-close-active.png'); + background-color: rgba(0, 0, 0, 0.1); +} +.togetherjs .togetherjs-window #togetherjs-chat-messages { + overflow-y: auto; + /*FIXME: I'm just pulling numbers out of thin air here:*/ + + /* pgbovine -- make a bit smaller */ + + height: 180px; + /* + height: 260px; + */ + +} +.togetherjs #togetherjs-feedback-form > header { + font-weight: bold; + font-variant: normal; + text-align: center; + font-family: openSansRegular, Helvetica, sans-serif; + color: #fff; + margin: 0 -1px 0 -1px; + padding: 10px 4px 5px 30px; + height: 24px; + background: #0095DD; + border-radius: 4px 4px 0 0; + position: relative; + border-bottom: 1px solid #0071A7; +} +.togetherjs #togetherjs-feedback-form.togetherjs-modal { + background-color: #fff; + color: #000000; + padding: 0 0 5px 0; + border-radius: 2px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + border-left: 1px solid #c9c9c9; + border-right: 1px solid #c9c9c9; + border-bottom: 1px solid #c9c9c9; + position: fixed; + top: 46%; + left: 47%; + margin-left: -150px; + margin-top: -10em; + height: 24em; + width: 399px; +} +.togetherjs #togetherjs-alpha-intro .togetherjs-small-feedback-txt { + font-size: 10px; +} +.togetherjs #togetherjs-alpha-intro .togetherjs-modal-close:hover { + background: #61921b; +} +.togetherjs #togetherjs-alpha-intro { + height: 24em; +} +.togetherjs #togetherjs-intro .togetherjs-modal-dont-join { + /* background-repeat: repeat-x; + border: 0; + color: rgb(255, 255, 255); + cursor: pointer; + display: inline-block; + text-transform: none; + vertical-align: middle; + padding: 10px 0 10px 0;*/ + +} +.togetherjs .togetherjs-notification { + position: fixed; + background-color: #ffffff; + color: #000000; + padding: 0 7px 0 7px; + z-index: 10001; + width: 300px; + border-radius: 4px; + background: rgba(242, 242, 242, 0.9); + border: 1px solid #BCBCBC; + -moz-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.4), inset 0px 3px 1px 0px #ffffff; + -webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.4), inset 0px 3px 1px 0px #ffffff; + box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.4), inset 0px 3px 1px 0px #ffffff; +} +.togetherjs .togetherjs-notification section { + margin: 15px 7px; +} +.togetherjs .togetherjs-notification > header { + font-weight: bold; + font-variant: normal; + text-align: center; + font-family: openSansRegular, Helvetica; + color: #fff; + margin: 0 -7px 0 -7px; + padding: 10px 4px 5px 30px; + height: 24px; + background: #0095DD; + border-radius: 4px 4px 0 0; + position: relative; + border-bottom: 1px solid #0071A7; +} +.togetherjs .togetherjs-notification .togetherjs-share-link { + width: 256px; + font-size: 12px; + padding: 6px 6px 4px; + border-radius: 4px; + border: 1px solid #cccccc; + box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.1); + font-family: Monaco, sans-serif; + margin: 7px 0px; +} +.togetherjs .togetherjs-notification .togetherjs-share-link:focus { + border: 1px solid #0095DD; +} +.togetherjs .togetherjs-notification header button.togetherjs-close { + background-color: inherit; + border: none; + padding: 0; + margin: 0; + border-left: 1px solid #0071A7; + float: right; + font-weight: bold; + cursor: pointer; + background-image: url('./images/icon-close@2x.png'); + background-position: center center; + background-repeat: no-repeat; + background-size: 13px 13px; + width: 39px; + height: 39px; + margin-top: -10px; + margin-right: -4px; + border-top-right-radius: 4px; +} +.togetherjs .togetherjs-notification header button.togetherjs-close:hover { + background-image: url('./images/icon-close-active.png'); + background-color: rgba(0, 0, 0, 0.1); +} +.togetherjs .togetherjs-notification #togetherjs-chat-messages { + overflow-y: auto; + /*FIXME: I'm just pulling numbers out of thin air here:*/ + + /* pgbovine -- make a bit smaller */ + + height: 180px; + /* + height: 260px; + */ + +} +.togetherjs .togetherjs-notification:hover { + background: #f2f2f2; + cursor: pointer; +} +.togetherjs .togetherjs-notification .togetherjs-chat-item { + border-bottom: 0px; + word-wrap: break-word; +} +.togetherjs .togetherjs-notification section#togetherjs-chat-notifier-message { + margin: 0px !important; +} +.togetherjs .togetherjs-notification .togetherjs-chat-content { + font-size: 12px; +} +.togetherjs .togetherjs-notification section { + font-size: 12px; +} +.togetherjs .togetherjs-notification .togetherjs-person-name { + font-family: openSansRegular, Helvetica Bold, 'Helvetica Neue', Arial; + font-size: 14px; +} +.togetherjs .togetherjs-notification button { + min-width: 47% !important; +} +.togetherjs .togetherjs-notification .togetherjs-person { + display: none; +} +.togetherjs .togetherjs-notification .togetherjs-timestamp { + display: none; +} +.togetherjs .togetherjs-notification { + border-bottom: 0px; +} +.togetherjs .togetherjs-notification img.togetherjs-notification-logo { + float: left; + margin: 22px 14px 14px 10px; + width: 34px; + height: 25px; +} +.togetherjs .togetherjs-notification img.togetherjs-notification-closebtn { + float: right; + padding: 14px 7px; +} +.togetherjs .togetherjs-notification img.togetherjs-notification-closebtn:hover { + opacity: 0.5; +} +.togetherjs .togetherjs-notification section.togetherjs-buttons { + border-top: 1px solid #E1E1E1; +} +.togetherjs .togetherjs-person { + height: 36px; + width: 36px; + margin: 10px; + background-repeat: no-repeat; + background-size: 40px 40px; + background-position: -2px -2px; + border: 2px solid; + border-radius: 2px; + background-clip: border-box; +} +.togetherjs .togetherjs-person.togetherjs-person-small { + display: inline-block; + height: 20px; + width: 20px; + margin: -1px -18px; + background-size: 22px 22px; + background-position: -1px -1px; +} +.togetherjs .togetherjs-person-small .togetherjs-person-avatar-swatch { + border-width: 3px; + margin-left: 14px; + margin-top: 0px; +} +.togetherjs .togetherjs-person-avatar-swatch { + /* This is the element that lives inside all .togetherjs-person elements + and is used for the triangle. */ + + width: 0; + height: 0; + margin-left: 23px; + padding: 0; + border-top: 7px solid transparent; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid transparent; + margin-top: 0px; +} +.togetherjs .togetherjs-person-inactive { + opacity: 0.5; +} +.togetherjs .togetherjs-button .togetherjs-person { + margin: 0 0 0 10px; +} +@-moz-document url-prefix() { + /* firefox only styles */ + .togetherjs-button .togetherjs-person { + margin: 10px 0 0 10px; + } +} +.togetherjs header .togetherjs-person { + float: left; +} +.togetherjs .togetherjs-dock-person > .togetherjs-dock-person-tooltip { + display: none; +} +.togetherjs .togetherjs-dock-person:hover > .togetherjs-dock-person-tooltip { + display: block; +} +.togetherjs .togetherjs-dock-person.togetherjs-active:hover > .togetherjs-dock-person-tooltip { + display: none; +} +.togetherjs .togetherjs-dock-person-tooltip { + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial; + position: absolute; + right: 70px; + top: 0px; + padding: 8px; + font-size: 12px; + text-align: left; + min-width: 30px; +} +.togetherjs .togetherjs-tooltip { + background-color: rgba(42, 42, 42, 0.9); + color: #fff; + border-radius: 4px; + line-height: 20px !important; +} +.togetherjs .togetherjs-dock-person-tooltip .togetherjs-person-name { + font-size: 12px; +} +.togetherjs .togetherjs-person-tooltip-arrow-r { + position: absolute; + left: 46px; + width: 0; + height: 0; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid rgba(0, 0, 0, 0.9); + line-height: 20px; + opacity: 0.9; + top: 20px; +} +.togetherjs-triangle-up { + position: absolute; + top: -15px; + width: 13px; + left: 50px; +} +.togetherjs-triangle-up img { + width: 12px; + height: 13px; +} +.togetherjs-rtc-dialog-btn { + text-align: right; +} +#togetherjs-rtc-info section.togetherjs-buttons { + text-align: right !important; +} +#togetherjs-rtc-info label { + font-size: 12px !important; + float: left !important; + padding-top: 13px; + padding-left: 30px; +} +#togetherjs-rtc-info input { + margin-top: 0px !important; +} +.togetherjs-chat-url-change { + background: #f2f2f2; + margin-top: 0px !important; +} +.togetherjs-chat-join-item { + background: #f2f2f2; + margin-top: 0px !important; +} +.togetherjs-chat-left-item { + background: #f2f2f2; + margin-top: 0px !important; +} +.togetherjs-inline-text { + margin-top: 10px !important; +} +.togetherjs-chat-join-item .togetherjs-person { + float: left; + margin-bottom: 0px !important; + margin-top: 0px; +} +.togetherjs-chat-left-item .togetherjs-person { + float: left; + margin-bottom: 0px !important; + margin-top: 0px; +} +.togetherjs-chat-url-change .togetherjs-person { + float: left; + margin-bottom: 0px !important; + margin-top: 0px; +} +.togetherjs-chat-join-item span.togetherjs-person-name { + font-family: openSansRegular, Helvetica; +} +.togetherjs-chat-left-item span.togetherjs-person-name { + font-family: openSansRegular, Helvetica; +} +.togetherjs-chat-url-change span.togetherjs-person-name { + font-family: openSansRegular, Helvetica; +} +.togetherjs-clear { + clear: both; +} +/* Menu */ +#togetherjs-menu { + width: 216px; + position: fixed; + font-size: 14px; + background-color: #fff; + z-index: 10003; + border: 1px solid #979797; + border-radius: 4px; +} +#togetherjs-menu hr { + margin: 0px; + border-top: 0px solid #E1E1E1; +} +#togetherjs-menu .togetherjs-menu-hr-avatar { + margin-top: 20px; + height: 0px; + border-bottom: 1px solid #E1E1E1; + font-size: 1px; +} +#togetherjs-menu .togetherjs-hr { + height: 0px; + margin: 0px; + border-bottom: 1px solid #E1E1E1; + font-size: 1px; +} +#togetherjs-menu .togetherjs-menu-item { + margin: -1px 0px -1px; + padding: 12px; + line-height: 9px; + height: 10px; + clear: both; + cursor: pointer; +} +#togetherjs-menu .togetherjs-menu-item.togetherjs-menu-disabled { + cursor: default; +} +#togetherjs-menu .togetherjs-menu-item.togetherjs-menu-disabled:hover { + background-color: inherit; + border-radius: 4px; + border-top: 1px solid #979797; + padding-top: 11px !important; +} +#togetherjs-menu .togetherjs-menu-item img { + float: left; + height: 20px; + width: 20px; + margin-right: 10px; + margin-top: -5px; +} +#togetherjs-menu .togetherjs-menu-item:hover { + background-color: rgba(216, 216, 216, 0.5); +} +#togetherjs-menu .togetherjs-menu-item .togetherjs-avatar { + height: 20px; + width: 20px; + padding: 0; + margin: 0 10px 0 0; +} +#togetherjs-menu .togetherjs-menu-item .togetherjs-person-bgcolor-self { + display: inline-block; + width: 12px; + height: 12px; + border: 1px solid #999; + border-radius: 2px; + margin-right: 12px; + float: left; + margin-top: -2px; + margin-left: 4px; +} +#togetherjs-menu #togetherjs-menu-help { + padding-left: 15px; +} +#togetherjs-menu #togetherjs-menu-feedback { + padding-left: 15px; +} +#togetherjs-menu img#togetherjs-menu-avatar { + float: left; + padding-top: 8px; +} +#togetherjs-menu .togetherjs-person-name-self { + padding-top: 8px; + line-height: 32px; + font-weight: bold; +} +#togetherjs-menu .togetherjs-self-name { + width: 146px !important; + float: right; + margin-top: -23px; + font-size: 12px; + padding: 7px 7px; + border-radius: 4px; + border: 1px solid #cccccc; + box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.1); + margin: -2px 0px; +} +#togetherjs-menu .togetherjs-self-name:focus { + border: 1px solid #0095DD; +} +#togetherjs-menu .togetherjs-self-name:focus { + border-bottom: 1px solid #0095DD; +} +/*Participant windows*/ +#togetherjs-participantlist.togetherjs-window { + padding: -1px; +} +#togetherjs-participantlist.togetherjs-window section { + overflow: scroll; + height: 200px; + margin: 0px -7px; +} +#togetherjs-participantlist section.togetherjs-buttons { + height: auto; + background: none; + text-align: left; + margin: auto; + padding-top: 0px; +} +#togetherjs-participantlist .togetherjs-person.togetherjs-person-small { + margin: 0px; + width: 30px; + height: 30px; +} +#togetherjs-participantlist.togetherjs-window section ul li { + padding: 10px; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} +#togetherjs-participantlist.togetherjs-window .tj-name { + padding-left: 5px; +} +#togetherjs-participantlist.togetherjs-window .tj-status { + float: right; + margin-top: 6px; + margin-right: 10px; + font-size: 24px; + color: green; +} +#togetherjs-participantlist.togetherjs-window .tj-urllocation { + font-size: 12px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +#togetherjs-participantlist .togetherjs-follow-question { + margin-left: 0px; +} +#togetherjs-participantlist.togetherjs-window .tj-follow { + font-size: 12px; +} +#togetherjs-participantlist.togetherjs-window .tj-btn-sm { + height: 30px; + line-height: 30px; + font-size: 12px; + margin: 0px 3px 0px 0px; +} +section.togetherjs-participant-window-main { + margin: 0px -7px -7px !important; +} +.togetherjs-participant-window-row a.togetherjs-person-url { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: 179px; + display: inline-block; +} +.togetherjs p.togetherjs-participant-window-row { + border-bottom: 1px solid #E1E1E1 !important; + padding: 7px 14px 14px !important; +} +.togetherjs-participant-window-row strong { + font-weight: 800; +} +.togetherjs-follow-question { + margin-left: 10px; +} +.togetherjs-float-left { + float: left; +} +.togetherjs-window input[type="radio"], +.togetherjs-window input[type="checkbox"] { + margin: 0 0 0 !important; +} +.togetherjs-clear { + clear: both; + margin: 10px; +} +section.togetherjs-buttons { + background: #F3F2F2; + margin: 0px -7px !important; + padding: 7px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + text-align: right; +} +section.togetherjs-buttons.togetherjs-buttons-notification-diff-url { + margin: 7px -7px 0px !important; + padding: 7px 3px 0px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + width: 300px; + text-align: right; +} +.togetherjs-notification-diff-url { + width: 288px !important; + margin: 0px 7px !important; +} +.togetherjs-different-url button { + min-width: 47% !important; +} +/*.togetherjs-different-url { + text-align:right; +}*/ +.togetherjs-same-url { + padding-left: 7px !important; + opacity: .5 !important; + padding-top: 7px !important; + padding-bottom: 7px !important; +} +section.togetherjs-buttons .togetherjs-same-url { + text-align: left; +} +/* Button set */ +#togetherjs-dock { + position: fixed; + z-index: 10000; + background-color: #0095dd; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); + /*border:1px solid #000;*/ + +} +#togetherjs-dock.togetherjs-dock-right { + padding: 0; + bottom: 50px; + right: 5px; + border-radius: 4px; + height: 260px; + width: 60px; +} +#togetherjs-dock.togetherjs-dock-right #togetherjs-dock-anchor-vertical { + display: none; +} +#togetherjs-dock.togetherjs-dock-right #togetherjs-dock-anchor-horizontal { + display: inline; +} +#togetherjs-dock.togetherjs-dock-right #togetherjs-dock-anchor-horizontal img { + width: 31px; + height: 7px; + padding: 0px 2px 2px 2px; + pointer-events: none; +} +#togetherjs-dock.togetherjs-dock-left { + padding: 0; + bottom: 60px; + left: 5px; + border-radius: 0 4px 4px 0; + height: 214px; + width: 60px; +} +#togetherjs-dock.togetherjs-dock-left #togetherjs-dock-anchor-vertical { + display: none; +} +#togetherjs-dock.togetherjs-dock-left #togetherjs-dock-anchor-horizontal { + display: inline; +} +#togetherjs-dock.togetherjs-dock-left #togetherjs-dock-anchor-horizontal img { + width: 6px; + height: 6px; + padding: 7px 2px 2px 2px; +} +#togetherjs-dock.togetherjs-dock-top { + padding: 0; + top: 40px; + left: 50%; + margin-left: -130px; + border-radius: 4px 4px 0 0; + height: 60px; + width: 260px; +} +#togetherjs-dock.togetherjs-dock-top #togetherjs-buttons, +#togetherjs-dock.togetherjs-dock-top #togetherjs-dock-anchor { + display: inline; +} +#togetherjs-dock.togetherjs-dock-top #togetherjs-dock-anchor-vertical { + display: inline; +} +#togetherjs-dock.togetherjs-dock-top #togetherjs-dock-anchor-horizontal { + display: none; +} +#togetherjs-dock.togetherjs-dock-top #togetherjs-dock-anchor-vertical img { + width: 6px; + height: 6px; + padding: 2px; +} +/* Arrows for pointing */ +.togetherjs-arrow { + position: absolute; + border: 2px solid #f00; + z-index: 10010; + padding: 0; + margin: 0; + -moz-transform-origin: top left; + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + -o-transform-origin: top left; + transform-origin: top left; +} +.togetherjs-chat-message.togetherjs-arrow-message { + border: 2px solid #f00; +} +/* Shared cursors */ +.togetherjs-cursor svg { + -webkit-filter: drop-shadow(1px 3px 2px rgba(0, 0, 0, 0.3)); + -webkit-transform: rotate(-10deg); +} +.togetherjs-cursor-img { + position: relative; + top: 0; +} +.togetherjs-cursor img { + width: 20px; + -webkit-filter: drop-shadow(0px 2px 1px rgba(0, 0, 0, 0.2)); + /*FIX ME, moz filter not working...*/ + + -moz-filter: drop-shadow(0px 2px 1px rgba(0, 0, 0, 0.2)); + filter: drop-shadow(0px 2px 1px rgba(0, 0, 0, 0.2)); +} +.togetherjs-cursor { + position: absolute; + z-index: 9999; + font-size: 28px; + font-weight: bolder; + /* This magic CSS rule makes this element basically invisible to clicks/etc: + (good on all but IE: http://caniuse.com/pointer-events */ + + pointer-events: none; + /*FIXME: maybe these should use position: fixed so the cursor + stays stuck to the top of the screen until the appropriate time + (when .togetherjs-scrolled-above/below is removed)?*/ + +} +.togetherjs-cursor:hover { + cursor: pointer; +} +.togetherjs-cursor.togetherjs-scrolled-above { + position: fixed; +} +.togetherjs-cursor.togetherjs-scrolled-above svg { + -webkit-transition-duration: 0.8s; + -webkit-transition-property: -webkit-transform; + -webkit-transform: rotate(20deg); + transition-duration: 0.8s; + transition-property: transform; + transform: rotate(20deg); +} +.togetherjs-cursor.togetherjs-scrolled-above .togetherjs-cursor-down { + display: none; +} +.togetherjs-cursor.togetherjs-scrolled-below { + position: fixed; +} +.togetherjs-cursor.togetherjs-scrolled-below svg { + -webkit-transition-duration: 0.8s; + -webkit-transition-property: -webkit-transform; + -webkit-transform: rotate(-150deg); + transition-duration: 0.8s; + transition-property: transform; + transform: rotate(-150deg); +} +.togetherjs-cursor.togetherjs-scrolled-below .togetherjs-cursor-up { + display: none; +} +.togetherjs-cursor.togetherjs-scrolled-normal svg { + -webkit-transition-duration: 0.8s; + -webkit-transition-property: -webkit-transform; + -webkit-transform: rotate(-10deg); + transition-duration: 0.8s; + transition-property: transform; + transform: rotate(-10deg); +} +.togetherjs-cursor.togetherjs-scrolled-normal .togetherjs-cursor-up, +.togetherjs-cursor.togetherjs-scrolled-normal .togetherjs-cursor-down { + display: none; +} +.togetherjs-cursor .togetherjs-cursor-container { + opacity: 0.9; + white-space: nowrap; + font-family: openSansLight, Helvetica, 'Helvetica Neue', Arial, sans-serif; + font-size: 40%; + position: relative; + top: 5px; + left: 15px; + padding: 8px; + border-radius: 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + border: 1px solid rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.5); + box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.5); +} +.togetherjs-click { + position: absolute; + z-index: 9998; + pointer-events: none; + width: 10px; + height: 10px; + margin: -5px 0 0 -5px; + border-radius: 5px; + border: 3px solid #ff3a29; + /* Note, you must call this like: + .transition(~"value, value, value")*/ + + transition: width 2s, height 2s, margin 2s, border 2s; + -moz-transition: width 2s, height 2s, margin 2s, border 2s; + -webkit-transition: width 2s, height 2s, margin 2s, border 2s; + -o-transition: width 2s, height 2s, margin 2s, border 2s; +} +.togetherjs-click.togetherjs-clicking { + width: 40px; + height: 40px; + margin: -20px 0 0 -20px; + border-radius: 20px; + border: 3px solid rgba(0, 0, 0, 0); +} +#togetherjs-starter .togetherjs-running { + background-color: #f00; + color: #fff; + border-radius: 4px; + border: 3px outset #d00; + /*FIXME: add gradient*/ + +} +/* Modals */ +#togetherjs-modal-background { + position: fixed; + background-color: #000; + opacity: 0.5; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 10002; +} +.togetherjs .togetherjs-modal { + background-color: #ffffff; + color: #000000; + padding: 0 7px 0 7px; + z-index: 10001; + width: 286px; + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); + border-radius: 5px !important; + position: fixed; + z-index: 10003; + top: 50%; + left: 50%; + margin-left: -150px; + width: 300px; + margin-top: -10em; +} +.togetherjs .togetherjs-modal section { + margin: 15px 7px; +} +.togetherjs .togetherjs-modal > header { + font-weight: bold; + font-variant: normal; + text-align: center; + font-family: openSansRegular, Helvetica; + color: #fff; + margin: 0 -7px 0 -7px; + padding: 10px 4px 5px 30px; + height: 24px; + background: #0095DD; + border-radius: 4px 4px 0 0; + position: relative; + border-bottom: 1px solid #0071A7; +} +.togetherjs .togetherjs-modal .togetherjs-share-link { + width: 256px; + font-size: 12px; + padding: 6px 6px 4px; + border-radius: 4px; + border: 1px solid #cccccc; + box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.1); + font-family: Monaco, sans-serif; + margin: 7px 0px; +} +.togetherjs .togetherjs-modal .togetherjs-share-link:focus { + border: 1px solid #0095DD; +} +.togetherjs .togetherjs-modal header button.togetherjs-close { + background-color: inherit; + border: none; + padding: 0; + margin: 0; + border-left: 1px solid #0071A7; + float: right; + font-weight: bold; + cursor: pointer; + background-image: url('./images/icon-close@2x.png'); + background-position: center center; + background-repeat: no-repeat; + background-size: 13px 13px; + width: 39px; + height: 39px; + margin-top: -10px; + margin-right: -4px; + border-top-right-radius: 4px; +} +.togetherjs .togetherjs-modal header button.togetherjs-close:hover { + background-image: url('./images/icon-close-active.png'); + background-color: rgba(0, 0, 0, 0.1); +} +.togetherjs .togetherjs-modal #togetherjs-chat-messages { + overflow-y: auto; + /*FIXME: I'm just pulling numbers out of thin air here:*/ + + /* pgbovine -- make a bit smaller */ + + height: 180px; + /* + height: 260px; + */ + +} +.togetherjs .togetherjs-modal.togetherjs-modal-wide { + width: 550px; + margin-left: -284px; + height: 530px; + margin-top: -275px; +} +.togetherjs .togetherjs-modal section.togetherjs-buttons { + /*position: absolute;*/ + + bottom: 0; + background: #F2F2F2; + width: 294px; + padding: 10px; + text-align: right; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + margin-left: -7px; + margin-bottom: 0px; + border-top: 1px solid #E1E1E1; +} +.togetherjs .togetherjs-modal-wide section.togetherjs-buttons { + width: 544px; + text-align: center !important; + position: absolute; +} +.togetherjs .togetherjs-walkthrough-slide { + padding: 0 30px 0 30px; + text-align: center; +} +.togetherjs .togetherjs-walkthrough-slide p { + margin: 18px auto; + width: 400px; +} +.togetherjs .togetherjs-walkthrough-slide iframe { + border-radius: 4px; +} +.togetherjs section.togetherjs-walkthrough-slide .togetherjs-walkthrough-main-image .togetherjs-walkthrough-avatar-section { + margin-top: 115px; +} +.togetherjs .togetherjs-avatar-preview { + float: left; + margin-left: 82px; +} +.togetherjs .togetherjs-avatar-upload-input { + float: right; + margin-right: 82px; + margin-top: 19px; +} +.togetherjs .togetherjs-save-settings { + margin-top: 239px; +} +.togetherjs section.togetherjs-walkthrough-slide .togetherjs-walkthrough-avatar { + width: 80px; + height: 80px; + position: absolute; + left: 44%; + top: 30%; + border-radius: 4px 4px 4px 4px; + border: 2px solid #cccccc; + background: none repeat scroll 0% 0% #000000; +} +.togetherjs section.togetherjs-walkthrough-slide .togetherjs-walkthrough-avatar:hover { + cursor: pointer; + border: 2px solid #cccccc; +} +.togetherjs section.togetherjs-walkthrough-slide input.togetherjs-self-name { + position: absolute; + top: 50%; + left: 29%; + font-size: 14px; + padding: 6px 6px 6px; + border-radius: 4px 4px 4px 4px; + border: 1px solid #cccccc; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1) inset; + font-family: openSansRegular, Helvetica, sans-serif; + margin: -20px 0px; +} +.togetherjs section.togetherjs-walkthrough-slide .togetherjs-swatch { + width: 32px; + height: 32px; + background: none repeat scroll 0% 0% #000000; + position: absolute; + top: 46.2%; + right: 29%; + border-radius: 4px 4px 4px 4px; + border: 1px solid #cccccc; +} +.togetherjs section.togetherjs-walkthrough-slide .togetherjs-swatch:hover { + cursor: pointer; + border: 1px solid rgba(204, 204, 204, 0.2); +} +.togetherjs section.togetherjs-walkthrough-slide span.togetherjs-walkthrough-sendlink { + top: 44%; + position: relative; +} +.togetherjs section.togetherjs-walkthrough-slide input.togetherjs-share-link { + top: 44%; + position: relative; +} +.togetherjs .togetherjs-walkthrough-main-image { + width: 400px; + height: 300px; + background: rgba(216, 216, 216, 0.1); + border-radius: 4px; + border: 1px solid rgba(151, 151, 151, 0.1); + margin: 0 auto; +} +.togetherjs .togetherjs-walkthrough-main-image img { + width: 400px; + height: 300px; +} +.togetherjs #togetherjs-walkthrough input, +.togetherjs textarea, +.togetherjs .uneditable-input { + width: 177px; +} +.togetherjs #togetherjs-walkthrough select, +.togetherjs input[type="file"] { + height: 30px; + line-height: 0px; +} +.togetherjs #togetherjs-walkthrough-previous { + cursor: pointer; + width: 19px; + height: 36px; + background-repeat: no-repeat; + background-size: 60% 60%; + margin-left: 36px; + margin-top: 28%; + background-image: url('./images/icn-walkthrough-arrow-l.png'); + float: left; +} +.togetherjs #togetherjs-walkthrough-previous.togetherjs-disabled { + cursor: default; + opacity: 0.2; +} +.togetherjs #togetherjs-walkthrough-previous:hover { + background-image: url('./images/icn-walkthrough-arrow-l-hover.png'); +} +.togetherjs #togetherjs-walkthrough-next { + cursor: pointer; + width: 19px; + height: 36px; + background-repeat: no-repeat; + background-size: 60% 60%; + margin-right: 28px; + margin-top: 28%; + background-image: url('./images/icn-walkthrough-arrow-r.png'); + float: right; +} +.togetherjs #togetherjs-walkthrough-next.togetherjs-disabled { + cursor: default; + opacity: 0.2; +} +.togetherjs #togetherjs-walkthrough-next:hover { + background-image: url('./images/icn-walkthrough-arrow-r-hover.png'); +} +.togetherjs #togetherjs-walkthrough-progress { + width: 537px; + position: absolute; + bottom: 66px; + text-align: center; +} +.togetherjs .togetherjs-walkthrough-slide-progress { + cursor: pointer; + padding: 0 5px 0 5px; + color: #D8D8D8; + font-size: 20px; +} +.togetherjs .togetherjs-walkthrough-slide-progress.togetherjs-active { + color: #9C9C9C; +} +.togetherjs .togetherjs-walkthrough-slide-progress:hover { + color: #9C9C9C; +} +/* Animations */ +/* Inspired by https://github.com/daneden/animate.css */ +@-webkit-keyframes togetherjs-pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(1.1); + } + 100% { + -webkit-transform: scale(1); + } +} +@-moz-keyframes togetherjs-pulse { + 0% { + -moz-transform: scale(1); + } + 50% { + -moz-transform: scale(1.1); + } + 100% { + -moz-transform: scale(1); + } +} +@-o-keyframes togetherjs-pulse { + 0% { + -o-transform: scale(1); + } + 50% { + -o-transform: scale(1.1); + } + 100% { + -o-transform: scale(1); + } +} +@keyframes togetherjs-pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +} +.togetherjs-pulse { + -webkit-animation-name: togetherjs-pulse; + -moz-animation-name: togetherjs-pulse; + -o-animation-name: togetherjs-pulse; + animation-name: togetherjs-pulse; +} +.togetherjs-animated { + -webkit-animation-duration: 1s; + -moz-animation-duration: 1s; + -o-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + -moz-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; +} +@-webkit-keyframes togetherjs-color-pulse { + 0% { + box-shadow: none; + } + 50% { + box-shadow: inset 0 0 2px #0095dd; + } + 100% { + box-shadow: none; + } +} +@-moz-keyframes togetherjs-color-pulse { + 0% { + box-shadow: none; + } + 50% { + box-shadow: inset 0 0 2px #0095dd; + } + 100% { + box-shadow: none; + } +} +@-o-keyframes togetherjs-color-pulse { + 0% { + box-shadow: none; + } + 50% { + box-shadow: inset 0 0 2px #0095dd; + } + 100% { + box-shadow: none; + } +} +@keyframes togetherjs-color-pulse { + 0% { + box-shadow: none; + } + 50% { + box-shadow: inset 0 0 2px #0095dd; + } + 100% { + box-shadow: none; + } +} +.togetherjs-color-pulse { + -webkit-animation-name: togetherjs-color-pulse; + -moz-animation-name: togetherjs-color-pulse; + -o-animation-name: togetherjs-color-pulse; + animation-name: togetherjs-color-pulse; +} +@-webkit-keyframes togetherjs-color-alert { + 0% { + box-shadow: none; + } + 50% { + box-shadow: 0 0 5px #0095dd; + } + 100% { + box-shadow: none; + } +} +@-moz-keyframes togetherjs-color-alert { + 0% { + box-shadow: none; + } + 50% { + box-shadow: 0 0 5px #0095dd; + } + 100% { + box-shadow: none; + } +} +@-o-keyframes togetherjs-color-alert { + 0% { + box-shadow: none; + } + 50% { + box-shadow: 0 0 5px #0095dd; + } + 100% { + box-shadow: none; + } +} +@keyframes togetherjs-color-alert { + 0% { + box-shadow: none; + } + 50% { + box-shadow: 0 0 5px #0095dd; + } + 100% { + box-shadow: none; + } +} +.togetherjs-color-alert { + -webkit-animation-name: togetherjs-color-alert; + -moz-animation-name: togetherjs-color-alert; + -o-animation-name: togetherjs-color-alert; + animation-name: togetherjs-color-alert; + animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite; + -moz-animation-iteration-count: infinite; + -o-animation-iteration-count: infinite; +} +#togetherjs-profile-arrow { + position: absolute; + width: 12px; + height: 12px; + left: 42px; + top: 46px; + background: url('./images/icn-gear.png'); + background-size: 12px 12px; + background-repeat: no-repeat; +} +#togetherjs-pick-color { + width: 100px; + height: 76px; + margin-left: -35px; + position: absolute; + margin-top: 25px; + background-color: #fff; + z-index: 10004; + border: 1px solid #979797; + border-radius: 4px; + padding: 5px; +} +#togetherjs-pick-color .togetherjs-swatch { + cursor: pointer; + display: inline-block; + height: 12px; + width: 12px; + border: 1px solid; + border-radius: 1px; + margin: 4px; +} +#togetherjs-pick-color .togetherjs-swatch.togetherjs-swatch-active { + border: 3px solid; + border-radius: 3px; +} +#togetherjs-pick-color .togetherjs-swatch:hover { + border: 2px solid rgba(0, 0, 0, 0.5); + height: 10px; + width: 10px; + border-radius: 3px; +} +.togetherjs-focus { + position: absolute; + pointer-events: none; + z-index: 9999; + opacity: 0.4; + border: 3px solid; + margin: -3px; +} +.togetherjs-only-mobile { + display: none; +} +@media screen and (max-device-width: 480px) { + { + /*TogetherJS dock*/ + + /*TogetherJS walkthrough*/ + + } + #togetherjs-dock.togetherjs-dock-right { + top: 0px; + width: auto; + height: 40px !important; + right: 0px; + margin: 10px; + bottom: 0px; + } + #togetherjs-dock #togetherjs-dock-anchor { + width: 40px; + height: 40px; + float: right; + user-select: all; + cursor: default; + display: inline; + } + #togetherjs-dock #togetherjs-buttons { + display: inline; + } + #togetherjs-dock .togetherjs-button { + float: right; + border-right: 1px solid rgba(0, 0, 0, 0.2); + border-top: none; + width: 40px; + height: 40px; + background-size: 30px 30px; + } + #togetherjs-dock #togetherjs-profile-arrow { + display: none; + } + #togetherjs-dock #togetherjs-dock-anchor-horizontal img { + width: 24px; + height: 24px; + padding: 8px; + } + .togetherjs-only-mobile { + display: block; + text-align: center; + /* a.togetherjs-share-link { + padding: 6px 111px 6px; + }*/ + + } + .togetherjs-not-mobile { + display: none; + } + .togetherjs .togetherjs-menu-item { + cursor: pointer; + margin: 0px -14px 0px; + padding: 9px; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + } + .togetherjs #togetherjs-menu-feedback-button, + .togetherjs #togetherjs-menu-update-color-button, + .togetherjs #togetherjs-menu-help-button { + display: none; + } + .togetherjs .togetherjs-menu-item img { + display: none; + } + .togetherjs .togetherjs-menu-item:first-child { + display: none; + } + .togetherjs .togetherjs-button .togetherjs-person { + margin: 0 0 0 5px; + } + .togetherjs .togetherjs-person { + background-size: 30px 30px; + height: 26px; + width: 26px; + } + .togetherjs .togetherjs-person-avatar-swatch { + margin-left: 12px; + } + .togetherjs .togetherjs-window { + width: 100%; + margin-left: 0; + height: 82%; + margin-top: 0%; + z-index: 10003 !important; + top: 20%; + left: -2px; + } + .togetherjs .togetherjs-window #togetherjs-chat-messages { + width: 105%; + } + .togetherjs .togetherjs-window .togetherjs-close { + display: none; + } + .togetherjs .togetherjs-window #togetherjs-chat-messages { + height: 62%; + top: -37px; + } + .togetherjs .togetherjs-subtitle { + width: 98%; + margin: 22px 7px; + } + .togetherjs #togetherjs-chat-input-box { + width: 100%; + bottom: 0px; + position: fixed; + } + .togetherjs #togetherjs-chat-input { + width: 95%; + } + .togetherjs .togetherjs-timestamp { + padding: 8px 45px 0px 10px; + } + .togetherjs #togetherjs-rtc-not-supported section.togetherjs-buttons { + display: none; + } + .togetherjs #togetherjs-menu-window section.togetherjs-buttons { + display: none; + } + .togetherjs .togetherjs-modal { + width: 94%; + margin-left: 1%; + height: 94%; + margin-top: 1%; + top: 0; + left: 0; + } + .togetherjs .togetherjs-window > header { + margin: -7px; + padding: 10px; + } + #togetherjs-dock-participants { + display: none; + } + #togetherjs-confirm-end section.togetherjs-buttons { + position: fixed; + bottom: 0; + width: 92%; + } + #togetherjs-edit-name-window section.togetherjs-buttons { + position: fixed; + bottom: 0; + width: 96%; + } + input.togetherjs-self-name { + padding: 10px; + width: 92%; + margin-top: 10px; + } + #togetherjs-avatar-edit section.togetherjs-buttons { + position: fixed; + bottom: 0; + width: 92%; + } + #togetherjs-avatar-edit .togetherjs-person { + margin: 30px auto; + float: none; + } + #togetherjs-avatar-edit #togetherjs-avatar-buttons { + float: none; + margin: 0 auto; + } + #togetherjs-window-pointer-right, + #togetherjs-window-pointer-left { + position: fixed; + width: 10px; + height: 10px; + margin-right: -5px; + margin-top: -5px; + background: #fff; + border-right: 1px solid rgba(0, 0, 0, 0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + z-index: 10002; + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); + } + #togetherjs-window-pointer-right { + -moz-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + } + #togetherjs-window-pointer-left { + -moz-transform: rotate(135deg); + -webkit-transform: rotate(135deg); + } + .togetherjs .togetherjs-modal section { + margin: 0px 7px; + } + #togetherjs-walkthrough-progress { + width: 93%; + text-align: center; + position: static; + } + .togetherjs-modal-wide section.togetherjs-buttons { + width: 93.9%; + text-align: center !important; + position: absolute; + bottom: -17px; + } + .togetherjs-walkthrough-slide p { + margin: 13px auto; + width: 100%; + font-size: 11px; + } + .togetherjs .togetherjs-walkthrough-main-image { + width: auto; + height: auto; + background: rgba(216, 216, 216, 0.1); + border-radius: 4px; + border: 1px solid rgba(151, 151, 151, 0.1); + padding: 10px; + } + .togetherjs .togetherjs-walkthrough-main-image img { + width: 50%; + height: auto; + } + .togetherjs #togetherjs-walkthrough-next { + cursor: pointer; + width: 19px; + height: 36px; + background-repeat: no-repeat; + background-size: 60% 60%; + margin-right: 0px; + margin-top: 28%; + background-image: url('./images/icn-walkthrough-arrow-r.png'); + float: right; + } + .togetherjs #togetherjs-walkthrough-previous { + cursor: pointer; + width: 19px; + height: 36px; + background-repeat: no-repeat; + background-size: 60% 60%; + margin-top: 28%; + background-image: url('./images/icn-walkthrough-arrow-l.png'); + float: left; + margin-left: 0px; + } + .togetherjs .togetherjs-modal .togetherjs-share-link { + width: 80%; + font-size: 14px; + padding: 14px; + border-radius: 4px; + border: 1px solid + #cccccc; + box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.1); + font-family: Monaco; + margin: 7px 0px; + } + .togetherjs-walkthrough-sendlink { + top: 44%; + position: relative; + padding: 15px; + } + .togetherjs section.togetherjs-walkthrough-slide input.togetherjs-self-name { + position: absolute; + top: 50%; + left: 29%; + font-size: 14px; + padding: 6px 6px 6px; + border-radius: 4px 4px 4px 4px; + border: 1px solid + #cccccc; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1) inset; + font-family: openSansRegular; + margin: -20px 11px; + width: 60%; + } + .togetherjs section.togetherjs-walkthrough-slide .togetherjs-walkthrough-main-image .togetherjs-walkthrough-avatar-section { + margin-top: 15px; + } + .togetherjs .togetherjs-avatar-preview { + margin: 0 auto; + float: none; + } + .togetherjs .togetherjs-avatar-upload-input { + margin: 10px auto; + float: none; + } + .togetherjs .togetherjs-avatar-upload-input input { + width: 60%; + } + input.togetherjs-upload-avatar { + line-height: 0px; + width: 174px; + margin-left: 0px; + } + .togetherjs section.togetherjs-walkthrough-slide input.togetherjs-self-name { + float: left; + font-size: 14px; + padding: 6px 6px 6px; + border-radius: 4px 4px 4px 4px; + border: 1px solid + #cccccc; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1) inset; + font-family: openSansRegular; + width: 66%; + position: static; + margin: 10px 10px; + } + .togetherjs section.togetherjs-walkthrough-slide .togetherjs-swatch { + width: 32px; + height: 32px; + background: none repeat scroll 0% 0% + #000000; + position: relative; + float: right; + right: 10px; + border-radius: 4px 4px 4px 4px; + border: 1px solid #cccccc; + top: 10px; + } + .togetherjs .togetherjs-save-settings { + margin-top: 20px; + margin-bottom: 0px; + } +} +@media screen and (max-device-width: 480px) and (min-width: 480px) { + { + /* #togetherjs-dock.togetherjs-dock-right { + width: 27% !important; + }*/ + + } + .togetherjs-mobile-browser input.togetherjs-self-name { + width: 95%; + margin-top: 10px; + } + .togetherjs .togetherjs-window { + width: 100%; + left: -2px !important; + top: 50%; + } + .togetherjs-mobile-browser #togetherjs-edit-name-window section.togetherjs-buttons { + width: 99%; + } + #togetherjs-confirm-end section.togetherjs-buttons { + width: 96.6%; + position: absolute; + bottom: 0; + } + #togetherjs-edit-name-window section.togetherjs-buttons { + width: 99%; + } + input.togetherjs-self-name { + width: 94%; + margin-top: 10px; + } + #togetherjs-avatar-edit section.togetherjs-buttons { + width: 95.3%; + bottom: 0; + background: #F2F2F2; + padding: 10px; + text-align: right; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top: 1px solid #E1E1E1; + position: absolute; + } + .togetherjs-modal { + width: 74% !important; + height: 50% !important; + margin: 20% 12% !important; + } + .togetherjs-mobile-browser .togetherjs .togetherjs-modal { + width: 76% !important; + margin-left: 1%; + height: 94%; + margin-top: 1%; + top: 0; + left: 0; + height: 41%; + margin: 20% 11%; + } + .togetherjs-modal-wide section.togetherjs-buttons { + width: 97.4% !important; + } +} +@media screen and (max-device-width: 480px) and (max-width: 480px) { + .togetherjs .togetherjs-window { + width: 96%; + margin-left: 0; + height: 82%; + margin-top: 0%; + z-index: 10003 !important; + top: 20%; + left: -2px; + } + .togetherjs .togetherjs-window #togetherjs-chat-messages { + width: 105%; + } + .togetherjs .togetherjs-window .togetherjs-close { + display: none; + } + .togetherjs .togetherjs-window #togetherjs-chat-messages { + height: 62%; + top: -37px; + } + #togetherjs-chat-input-box { + width: 94% !important; + bottom: 0px; + position: fixed; + } + .togetherjs-timestamp { + padding: 8px 15px 0px 10px !important; + } + input[type='text'], + input[type='number'], + textarea { + font-size: 16px !important; + } +} +/* We set this class on the element when that last media query won't work + but we detect in Javascript that the client should be treated as mobile */ +.togetherjs-mobile-browser { + /*TogetherJS dock*/ + + /*TogetherJS walkthrough*/ + +} +.togetherjs-mobile-browser #togetherjs-dock.togetherjs-dock-right { + top: 0px; + width: auto; + height: 40px !important; + right: 0px; + margin: 10px; + bottom: 0px; +} +.togetherjs-mobile-browser #togetherjs-dock #togetherjs-dock-anchor { + width: 40px; + height: 40px; + float: right; + user-select: all; + cursor: default; + display: inline; +} +.togetherjs-mobile-browser #togetherjs-dock #togetherjs-buttons { + display: inline; +} +.togetherjs-mobile-browser #togetherjs-dock .togetherjs-button { + float: right; + border-right: 1px solid rgba(0, 0, 0, 0.2); + border-top: none; + width: 40px; + height: 40px; + background-size: 30px 30px; +} +.togetherjs-mobile-browser #togetherjs-dock #togetherjs-profile-arrow { + display: none; +} +.togetherjs-mobile-browser #togetherjs-dock #togetherjs-dock-anchor-horizontal img { + width: 24px; + height: 24px; + padding: 8px; +} +.togetherjs-mobile-browser .togetherjs-only-mobile { + display: block; + text-align: center; + /* a.togetherjs-share-link { + padding: 6px 111px 6px; + }*/ + +} +.togetherjs-mobile-browser .togetherjs-not-mobile { + display: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-menu-item { + cursor: pointer; + margin: 0px -14px 0px; + padding: 9px; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} +.togetherjs-mobile-browser .togetherjs #togetherjs-menu-feedback-button, +.togetherjs-mobile-browser .togetherjs #togetherjs-menu-update-color-button, +.togetherjs-mobile-browser .togetherjs #togetherjs-menu-help-button { + display: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-menu-item img { + display: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-menu-item:first-child { + display: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-button .togetherjs-person { + margin: 0 0 0 5px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-person { + background-size: 30px 30px; + height: 26px; + width: 26px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-person-avatar-swatch { + margin-left: 12px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-window { + width: 100%; + margin-left: 0; + height: 82%; + margin-top: 0%; + z-index: 10003 !important; + top: 20%; + left: -2px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-window #togetherjs-chat-messages { + width: 105%; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-window .togetherjs-close { + display: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-window #togetherjs-chat-messages { + height: 62%; + top: -37px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-subtitle { + width: 98%; + margin: 22px 7px; +} +.togetherjs-mobile-browser .togetherjs #togetherjs-chat-input-box { + width: 100%; + bottom: 0px; + position: fixed; +} +.togetherjs-mobile-browser .togetherjs #togetherjs-chat-input { + width: 95%; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-timestamp { + padding: 8px 45px 0px 10px; +} +.togetherjs-mobile-browser .togetherjs #togetherjs-rtc-not-supported section.togetherjs-buttons { + display: none; +} +.togetherjs-mobile-browser .togetherjs #togetherjs-menu-window section.togetherjs-buttons { + display: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-modal { + width: 94%; + margin-left: 1%; + height: 94%; + margin-top: 1%; + top: 0; + left: 0; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-window > header { + margin: -7px; + padding: 10px; +} +.togetherjs-mobile-browser #togetherjs-dock-participants { + display: none; +} +.togetherjs-mobile-browser #togetherjs-confirm-end section.togetherjs-buttons { + position: fixed; + bottom: 0; + width: 92%; +} +.togetherjs-mobile-browser #togetherjs-edit-name-window section.togetherjs-buttons { + position: fixed; + bottom: 0; + width: 96%; +} +.togetherjs-mobile-browser input.togetherjs-self-name { + padding: 10px; + width: 92%; + margin-top: 10px; +} +.togetherjs-mobile-browser #togetherjs-avatar-edit section.togetherjs-buttons { + position: fixed; + bottom: 0; + width: 92%; +} +.togetherjs-mobile-browser #togetherjs-avatar-edit .togetherjs-person { + margin: 30px auto; + float: none; +} +.togetherjs-mobile-browser #togetherjs-avatar-edit #togetherjs-avatar-buttons { + float: none; + margin: 0 auto; +} +.togetherjs-mobile-browser #togetherjs-window-pointer-right, +.togetherjs-mobile-browser #togetherjs-window-pointer-left { + position: fixed; + width: 10px; + height: 10px; + margin-right: -5px; + margin-top: -5px; + background: #fff; + border-right: 1px solid rgba(0, 0, 0, 0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + z-index: 10002; + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); +} +.togetherjs-mobile-browser #togetherjs-window-pointer-right { + -moz-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); +} +.togetherjs-mobile-browser #togetherjs-window-pointer-left { + -moz-transform: rotate(135deg); + -webkit-transform: rotate(135deg); +} +.togetherjs-mobile-browser .togetherjs .togetherjs-modal section { + margin: 0px 7px; +} +.togetherjs-mobile-browser #togetherjs-walkthrough-progress { + width: 93%; + text-align: center; + position: static; +} +.togetherjs-mobile-browser .togetherjs-modal-wide section.togetherjs-buttons { + width: 93.9%; + text-align: center !important; + position: absolute; + bottom: -17px; +} +.togetherjs-mobile-browser .togetherjs-walkthrough-slide p { + margin: 13px auto; + width: 100%; + font-size: 11px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-walkthrough-main-image { + width: auto; + height: auto; + background: rgba(216, 216, 216, 0.1); + border-radius: 4px; + border: 1px solid rgba(151, 151, 151, 0.1); + padding: 10px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-walkthrough-main-image img { + width: 50%; + height: auto; +} +.togetherjs-mobile-browser .togetherjs #togetherjs-walkthrough-next { + cursor: pointer; + width: 19px; + height: 36px; + background-repeat: no-repeat; + background-size: 60% 60%; + margin-right: 0px; + margin-top: 28%; + background-image: url('./images/icn-walkthrough-arrow-r.png'); + float: right; +} +.togetherjs-mobile-browser .togetherjs #togetherjs-walkthrough-previous { + cursor: pointer; + width: 19px; + height: 36px; + background-repeat: no-repeat; + background-size: 60% 60%; + margin-top: 28%; + background-image: url('./images/icn-walkthrough-arrow-l.png'); + float: left; + margin-left: 0px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-modal .togetherjs-share-link { + width: 80%; + font-size: 14px; + padding: 14px; + border-radius: 4px; + border: 1px solid + #cccccc; + box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.1); + font-family: Monaco; + margin: 7px 0px; +} +.togetherjs-mobile-browser .togetherjs-walkthrough-sendlink { + top: 44%; + position: relative; + padding: 15px; +} +.togetherjs-mobile-browser .togetherjs section.togetherjs-walkthrough-slide input.togetherjs-self-name { + position: absolute; + top: 50%; + left: 29%; + font-size: 14px; + padding: 6px 6px 6px; + border-radius: 4px 4px 4px 4px; + border: 1px solid + #cccccc; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1) inset; + font-family: openSansRegular; + margin: -20px 11px; + width: 60%; +} +.togetherjs-mobile-browser .togetherjs section.togetherjs-walkthrough-slide .togetherjs-walkthrough-main-image .togetherjs-walkthrough-avatar-section { + margin-top: 15px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-avatar-preview { + margin: 0 auto; + float: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-avatar-upload-input { + margin: 10px auto; + float: none; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-avatar-upload-input input { + width: 60%; +} +.togetherjs-mobile-browser input.togetherjs-upload-avatar { + line-height: 0px; + width: 174px; + margin-left: 0px; +} +.togetherjs-mobile-browser .togetherjs section.togetherjs-walkthrough-slide input.togetherjs-self-name { + float: left; + font-size: 14px; + padding: 6px 6px 6px; + border-radius: 4px 4px 4px 4px; + border: 1px solid + #cccccc; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1) inset; + font-family: openSansRegular; + width: 66%; + position: static; + margin: 10px 10px; +} +.togetherjs-mobile-browser .togetherjs section.togetherjs-walkthrough-slide .togetherjs-swatch { + width: 32px; + height: 32px; + background: none repeat scroll 0% 0% + #000000; + position: relative; + float: right; + right: 10px; + border-radius: 4px 4px 4px 4px; + border: 1px solid #cccccc; + top: 10px; +} +.togetherjs-mobile-browser .togetherjs .togetherjs-save-settings { + margin-top: 20px; + margin-bottom: 0px; +} +@media (min-width: 480px) { + .togetherjs-mobile-browser { + /* #togetherjs-dock.togetherjs-dock-right { + width: 27% !important; + }*/ + + } + .togetherjs-mobile-browser .togetherjs-mobile-browser input.togetherjs-self-name { + width: 95%; + margin-top: 10px; + } + .togetherjs-mobile-browser .togetherjs .togetherjs-window { + width: 100%; + left: -2px !important; + top: 50%; + } + .togetherjs-mobile-browser .togetherjs-mobile-browser #togetherjs-edit-name-window section.togetherjs-buttons { + width: 99%; + } + .togetherjs-mobile-browser #togetherjs-confirm-end section.togetherjs-buttons { + width: 96.6%; + position: absolute; + bottom: 0; + } + .togetherjs-mobile-browser #togetherjs-edit-name-window section.togetherjs-buttons { + width: 99%; + } + .togetherjs-mobile-browser input.togetherjs-self-name { + width: 94%; + margin-top: 10px; + } + .togetherjs-mobile-browser #togetherjs-avatar-edit section.togetherjs-buttons { + width: 95.3%; + bottom: 0; + background: #F2F2F2; + padding: 10px; + text-align: right; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top: 1px solid #E1E1E1; + position: absolute; + } + .togetherjs-mobile-browser .togetherjs-modal { + width: 74% !important; + height: 50% !important; + margin: 20% 12% !important; + } + .togetherjs-mobile-browser .togetherjs-mobile-browser .togetherjs .togetherjs-modal { + width: 76% !important; + margin-left: 1%; + height: 94%; + margin-top: 1%; + top: 0; + left: 0; + height: 41%; + margin: 20% 11%; + } + .togetherjs-mobile-browser .togetherjs-modal-wide section.togetherjs-buttons { + width: 97.4% !important; + } +} +@media (max-width: 480px) { + .togetherjs-mobile-browser .togetherjs .togetherjs-window { + width: 96%; + margin-left: 0; + height: 82%; + margin-top: 0%; + z-index: 10003 !important; + top: 20%; + left: -2px; + } + .togetherjs-mobile-browser .togetherjs .togetherjs-window #togetherjs-chat-messages { + width: 105%; + } + .togetherjs-mobile-browser .togetherjs .togetherjs-window .togetherjs-close { + display: none; + } + .togetherjs-mobile-browser .togetherjs .togetherjs-window #togetherjs-chat-messages { + height: 62%; + top: -37px; + } + .togetherjs-mobile-browser #togetherjs-chat-input-box { + width: 94% !important; + bottom: 0px; + position: fixed; + } + .togetherjs-mobile-browser .togetherjs-timestamp { + padding: 8px 15px 0px 10px !important; + } + .togetherjs-mobile-browser input[type='text'], + .togetherjs-mobile-browser input[type='number'], + .togetherjs-mobile-browser textarea { + font-size: 16px !important; + } +} diff --git a/v3/js/togetherjs/togetherjs/togetherjsPackage.js b/v3/js/togetherjs/togetherjs/togetherjsPackage.js new file mode 100644 index 000000000..8f3563587 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/togetherjsPackage.js @@ -0,0 +1,10435 @@ +(function() {/** + * almond 0.2.5 Copyright (c) 2011-2012, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/almond for details + */ +//Going sloppy to avoid 'use strict' string cost, but strict practices should +//be followed. +/*jslint sloppy: true */ +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + var main, req, makeMap, handlers, + defined = {}, + waiting = {}, + config = {}, + defining = {}, + hasOwn = Object.prototype.hasOwnProperty, + aps = [].slice; + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + var nameParts, nameSegment, mapValue, foundMap, + foundI, foundStarMap, starI, i, j, part, + baseParts = baseName && baseName.split("/"), + map = config.map, + starMap = (map && map['*']) || {}; + + //Adjust any relative paths. + if (name && name.charAt(0) === ".") { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + //Convert baseName to array, and lop off the last part, + //so that . matches that "directory" and not name of the baseName's + //module. For instance, baseName of "one/two/three", maps to + //"one/two/three.js", but we want the directory, "one/two" for + //this normalization. + baseParts = baseParts.slice(0, baseParts.length - 1); + + name = baseParts.concat(name.split("/")); + + //start trimDots + for (i = 0; i < name.length; i += 1) { + part = name[i]; + if (part === ".") { + name.splice(i, 1); + i -= 1; + } else if (part === "..") { + if (i === 1 && (name[2] === '..' || name[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join("/"); + } else if (name.indexOf('./') === 0) { + // No baseName, so this is ID is resolved relative + // to baseUrl, pull off the leading dot. + name = name.substring(2); + } + } + + //Apply map config if available. + if ((baseParts || starMap) && map) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join("/"); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = map[baseParts.slice(0, j).join('/')]; + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = mapValue[nameSegment]; + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && starMap[nameSegment]) { + foundStarMap = starMap[nameSegment]; + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (hasProp(waiting, name)) { + var args = waiting[name]; + delete waiting[name]; + defining[name] = true; + main.apply(undef, args); + } + + if (!hasProp(defined, name) && !hasProp(defining, name)) { + throw new Error('No ' + name); + } + return defined[name]; + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + makeMap = function (name, relName) { + var plugin, + parts = splitPrefix(name), + prefix = parts[0]; + + name = parts[1]; + + if (prefix) { + prefix = normalize(prefix, relName); + plugin = callDep(prefix); + } + + //Normalize according + if (prefix) { + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relName)); + } else { + name = normalize(name, relName); + } + } else { + name = normalize(name, relName); + parts = splitPrefix(name); + prefix = parts[0]; + name = parts[1]; + if (prefix) { + plugin = callDep(prefix); + } + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + pr: prefix, + p: plugin + }; + }; + + function makeConfig(name) { + return function () { + return (config && config.config && config.config[name]) || {}; + }; + } + + handlers = { + require: function (name) { + return makeRequire(name); + }, + exports: function (name) { + var e = defined[name]; + if (typeof e !== 'undefined') { + return e; + } else { + return (defined[name] = {}); + } + }, + module: function (name) { + return { + id: name, + uri: '', + exports: defined[name], + config: makeConfig(name) + }; + } + }; + + main = function (name, deps, callback, relName) { + var cjsModule, depName, ret, map, i, + args = [], + usingExports; + + //Use name if no relName + relName = relName || name; + + //Call the callback to define the module, if necessary. + if (typeof callback === 'function') { + + //Pull out the defined dependencies and pass the ordered + //values to the callback. + //Default to [require, exports, module] if no deps + deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; + for (i = 0; i < deps.length; i += 1) { + map = makeMap(deps[i], relName); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = handlers.require(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = handlers.exports(name); + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = handlers.module(name); + } else if (hasProp(defined, depName) || + hasProp(waiting, depName) || + hasProp(defining, depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else { + throw new Error(name + ' missing ' + depName); + } + } + + ret = callback.apply(defined[name], args); + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef && + cjsModule.exports !== defined[name]) { + defined[name] = cjsModule.exports; + } else if (ret !== undef || !usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = require = req = function (deps, callback, relName, forceSync, alt) { + if (typeof deps === "string") { + if (handlers[deps]) { + //callback in this case is really relName + return handlers[deps](callback); + } + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, callback).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + config = deps; + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = relName; + relName = null; + } else { + deps = undef; + } + } + + //Support require(['a']) + callback = callback || function () {}; + + //If relName is a function, it is an errback handler, + //so remove it. + if (typeof relName === 'function') { + relName = forceSync; + forceSync = alt; + } + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + //Using a non-zero value because of concern for what old browsers + //do, and latest browsers "upgrade" to 4 if lower value is used: + //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: + //If want a value immediately, use require('id') instead -- something + //that works in almond on the global level, but not guaranteed and + //unlikely to work in other AMD implementations. + setTimeout(function () { + main(undef, deps, callback, relName); + }, 4); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function (cfg) { + config = cfg; + if (config.deps) { + req(config.deps, config.callback); + } + return req; + }; + + define = function (name, deps, callback) { + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + if (!hasProp(defined, name) && !hasProp(waiting, name)) { + waiting[name] = [name, deps, callback]; + } + }; + + define.amd = { + jQuery: true + }; +}()); + +define("libs/almond", function(){}); + +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function (){ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
    a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
    t
    ",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
    ",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
    ",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

    ",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
    ","
    "]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
    ").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); +jQuery.noConflict(true); +})(); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('jqueryPlugins',["jquery"], function ($) { + // This isn't really a "module" since it just patches jQuery itself + + // FIX ME Animations TO DO + // walkthrough animations go here + // animate participant cursor and box popping in when they enter the session + // animate participant cursor and box popping out when they leave the session + // animate the participant cursor -> rotate down when they're down the page + $.fn.rotateCursorDown = function () { + $('svg').animate({borderSpacing: -150, opacity: 1}, { + step: function(now, fx) { + if (fx.prop == "borderSpacing") { + $(this).css('-webkit-transform', 'rotate('+now+'deg)') + .css('-moz-transform', 'rotate('+now+'deg)') + .css('-ms-transform', 'rotate('+now+'deg)') + .css('-o-transform', 'rotate('+now+'deg)') + .css('transform', 'rotate('+now+'deg)'); + } else { + $(this).css(fx.prop, now); + } + }, + duration: 500 + }, 'linear').promise().then(function () { + this.css('-webkit-transform', ''); + this.css('-moz-transform', ''); + this.css('-ms-transform', ''); + this.css('-o-transform', ''); + this.css('transform', ''); + this.css("opacity", ""); + }); + }; + + // animate the participant cursor -> rotate up when they're on the same frame as the user + $.fn.rotateCursorDown = function () { + $('.togetherjs-cursor svg').animate({borderSpacing: 0, opacity: 1}, { + step: function(now, fx) { + if (fx.prop == "borderSpacing") { + $(this).css('-webkit-transform', 'rotate('+now+'deg)') + .css('-moz-transform', 'rotate('+now+'deg)') + .css('-ms-transform', 'rotate('+now+'deg)') + .css('-o-transform', 'rotate('+now+'deg)') + .css('transform', 'rotate('+now+'deg)'); + } else { + $(this).css(fx.prop, now); + } + }, + duration: 500 + }, 'linear').promise().then(function () { + this.css('-webkit-transform', ''); + this.css('-moz-transform', ''); + this.css('-ms-transform', ''); + this.css('-o-transform', ''); + this.css('transform', ''); + this.css("opacity", ""); + }); + }; + + // Move notification when another notification slides in // + + + /* Pop in window from dock button: */ + $.fn.popinWindow = function () { + + //mobile popout window with no animation + if($.browser.mobile) { + + //starting position + this.css({ + left: "0px", + opacity: 1, + "zIndex": 8888 + }); + + //starting position for arrow + $('#togetherjs-window-pointer-right').css({ + left: "+=74px", + opacity: 1, + "zIndex": 8888 + }); + + //animate arrow out + $('#togetherjs-window-pointer-right').animate({ + opacity: 1, + left: "-=78px" + }, { + duration:60, easing:"linear" + }); + $('#togetherjs-window-pointer-right').queue(); + + //bounce arrow back + $('#togetherjs-window-pointer-right').animate({ + left:'+=4px' + }, { + duration:60, easing:"linear" + }); + + //animate window out + this.animate({ + opacity: 1, + left: "0px" + }, { + duration:60, easing:"linear" + }); + this.queue(); + + //bounce window back + this.animate({ + left:'0px' + }, { + duration:60, easing:"linear" + }); + } + + else { + + //starting position + this.css({ + left: "+=74px", + opacity: 1, + "zIndex": 8888 + }); + + //starting position for arrow + $('#togetherjs-window-pointer-right').css({ + left: "+=74px", + opacity: 1, + "zIndex": 8888 + }); + + //animate arrow out + $('#togetherjs-window-pointer-right').animate({ + opacity: 1, + left: "-=78px" + }, { + duration:60, easing:"linear" + }); + $('#togetherjs-window-pointer-right').queue(); + + //bounce arrow back + $('#togetherjs-window-pointer-right').animate({ + left:'+=4px' + }, { + duration:60, easing:"linear" + }); + + //animate window out + this.animate({ + opacity: 1, + left: "-=78px" + }, { + duration:60, easing:"linear" + }); + this.queue(); + + //bounce window back + this.animate({ + left:'+=4px' + }, { + duration:60, easing:"linear" + }); + + } + + }; + + /* Slide in notification window: */ + $.fn.slideIn = function () { + this.css({ + //top: "240px", + left: "+=74px", + opacity: 0, + "zIndex": 8888 + }); + return this.animate({ + "left": "-=74px", + opacity: 1, + "zIndex": 9999 + }, "fast"); + }; + + /* Used to fade away notification windows + flip the bottom of them out: */ + $.fn.fadeOut = function () { + this.animate({borderSpacing: -90, opacity: 0.5}, { + step: function(now, fx) { + if (fx.prop == "borderSpacing") { + $(this).css('-webkit-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('-moz-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('-ms-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('-o-transform', 'perspective( 600px ) rotateX('+now+'deg)') + .css('transform', 'perspective( 600px ) rotateX('+now+'deg)'); + } else { + $(this).css(fx.prop, now); + } + }, + duration: 500 + }, 'linear').promise().then(function () { + this.css('-webkit-transform', ''); + this.css('-moz-transform', ''); + this.css('-ms-transform', ''); + this.css('-o-transform', ''); + this.css('transform', ''); + this.css("opacity", ""); + }); + return this; + }; + + /* used when user goes down to participant cursor location on screen */ + $.fn.easeTo = function (y) { + return this.animate({ + scrollTop: y + }, { + duration: 400, + easing: "swing" + }); + }; + + // avatar animate in + $.fn.animateDockEntry = function () { + var height = this.height(); + var width = this.width(); + var backgroundSize = height + 4; + var margin = parseInt(this.css("marginLeft"), 10); + + // set starting position CSS for avatar + this.css({ + marginLeft: margin + width/2, + height: 0, + width: 0, + backgroundSize: "0 0" + }); + + var self = this; + + //then animate avatar to the actual dimensions, and reset the values + this.animate({ + marginLeft: margin, + height: height, + width: width, + backgroundSize: backgroundSize + }, { + duration: 600 + }).promise().then(function () { + self.css({ + marginLeft: "", + height: "", + width: "", + backgroundSize: "" + }); + }); + return this; + }; + + // avatar animate out, reverse of above + $.fn.animateDockExit = function () { + + // get the current avatar dimenensions + var height = this.height(); + var width = this.width(); + var backgroundSize = height + 4; + var margin = parseInt(this.css("marginLeft"), 10); + + //then animate avatar to shrink to nothing, and reset the values again + // FIXME this needs to animate from the CENTER + this.animate({ + marginLeft: margin + width/2, + height: 0, + width: 0, + backgroundSize: "0 0", + opacity: 0 + }, 600 ); + + return this; + + }; + + $.fn.animateCursorEntry = function () { + // Make the cursor bubble pop in + }; + + // keyboard typing animation + $.fn.animateKeyboard = function () { + var one = this.find(".togetherjs-typing-ellipse-one"); + var two = this.find(".togetherjs-typing-ellipse-two"); + var three = this.find(".togetherjs-typing-ellipse-three"); + var count = -1; + var run = (function () { + count = (count+1) % 4; + if (count === 0) { + one.css("opacity", 0.5); + two.css("opacity", 0.5); + three.css("opacity", 0.5); + } else if (count == 1) { + one.css("opacity", 1); + } else if (count == 2) { + two.css("opacity", 1); + } else { // count==3 + three.css("opacity", 1); + } + }).bind(this); + run(); + var interval = setInterval(run, 300); + this.data("animateKeyboard", interval); + }; + + $.fn.stopKeyboardAnimation = function () { + clearTimeout(this.data("animateKeyboard")); + this.data("animateKeyboard", null); + }; + + // FIXME: not sure if this is legit, but at least the modern mobile devices we + // care about should have this defined: + if (! $.browser) { + $.browser = {}; + } + $.browser.mobile = window.orientation !== undefined; + if (navigator.userAgent.search(/mobile/i) != -1) { + // FIXME: At least on the Firefox OS simulator I need this + $.browser.mobile = true; + } + + if ($.browser.mobile && window.matchMedia && ! window.matchMedia("screen and (max-screen-width: 480px)").matches) { + // FIXME: for Firefox OS simulator really: + document.body.className += " togetherjs-mobile-browser"; + } + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('util',["jquery", "jqueryPlugins"], function ($) { + var util = {}; + + util.Deferred = $.Deferred; + TogetherJS.$ = $; + + /* A simple class pattern, use like: + + var Foo = util.Class({ + constructor: function (a, b) { + init the class + }, + otherMethod: ... + }); + + You can also give a superclass as the optional first argument. + + Instantiation does not require "new" + + */ + util.Class = function (superClass, prototype) { + var a; + if (prototype === undefined) { + prototype = superClass; + } else { + if (superClass.prototype) { + superClass = superClass.prototype; + } + var newPrototype = Object.create(superClass); + for (a in prototype) { + if (prototype.hasOwnProperty(a)) { + newPrototype[a] = prototype[a]; + } + } + prototype = newPrototype; + } + var ClassObject = function () { + var obj = Object.create(prototype); + obj.constructor.apply(obj, arguments); + obj.constructor = ClassObject; + return obj; + }; + ClassObject.prototype = prototype; + if (prototype.constructor.name) { + ClassObject.className = prototype.constructor.name; + ClassObject.toString = function () { + return '[Class ' + this.className + ']'; + }; + } + if (prototype.classMethods) { + for (a in prototype.classMethods) { + if (prototype.classMethods.hasOwnProperty(a)) { + ClassObject[a] = prototype.classMethods[a]; + } + } + } + return ClassObject; + }; + + /* Extends obj with other, or copies obj if no other is given. */ + util.extend = TogetherJS._extend; + + util.forEachAttr = function (obj, callback, context) { + context = context || obj; + for (var a in obj) { + if (obj.hasOwnProperty(a)) { + callback.call(context, obj[a], a); + } + } + }; + + /* Trim whitespace from a string */ + util.trim = function trim(s) { + return s.replace(/^\s+/, "").replace(/\s+$/, ""); + }; + + /* Convert a string into something safe to use as an HTML class name */ + util.safeClassName = function safeClassName(name) { + return name.replace(/[^a-zA-Z0-9_\-]/g, "_") || "class"; + }; + + util.AssertionError = function (message) { + if (! this instanceof util.AssertionError) { + return new util.AssertionError(message); + } + this.message = message; + this.name = "AssertionError"; + }; + util.AssertionError.prototype = Error.prototype; + + util.assert = function (cond) { + if (! cond) { + var args = ["Assertion error:"].concat(Array.prototype.slice.call(arguments, 1)); + console.error.apply(console, args); + if (console.trace) { + console.trace(); + } + throw new util.AssertionError(args.join(" ")); + } + }; + + /* Generates a random ID */ + util.generateId = function (length) { + length = length || 10; + var letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV0123456789'; + var s = ''; + for (var i=0; i this.backoffDetection) { + this._backoff = 0; + } else { + this._backoff++; + } + var time = Math.min(this._backoff * this.backoffTime, this.maxBackoffTime); + setTimeout((function () { + this._setupConnection(); + }).bind(this), time); + } + }).bind(this); + this.socket.onmessage = (function (event) { + this._incoming(event.data); + }).bind(this); + this.socket.onerror = (function (event) { + console.error('WebSocket error:', event.data); + }).bind(this); + } + +}); + + +/* Sends TO a window or iframe */ +channels.PostMessageChannel = util.Class(AbstractChannel, { + _pingPollPeriod: 100, // milliseconds + _pingPollIncrease: 100, // +100 milliseconds for each failure + _pingMax: 2000, // up to a max of 2000 milliseconds + + constructor: function (win, expectedOrigin) { + this.expectedOrigin = expectedOrigin; + this._pingReceived = false; + this._receiveMessage = this._receiveMessage.bind(this); + if (win) { + this.bindWindow(win, true); + } + this._pingFailures = 0; + this.baseConstructor(); + }, + + toString: function () { + var s = '[PostMessageChannel'; + if (this.window) { + s += ' to window ' + this.window; + } else { + s += ' not bound to a window'; + } + if (this.window && ! this._pingReceived) { + s += ' still establishing'; + } + return s + ']'; + }, + + bindWindow: function (win, noSetup) { + if (this.window) { + this.close(); + // Though we deinitialized everything, we aren't exactly closed: + this.closed = false; + } + if (win && win.contentWindow) { + win = win.contentWindow; + } + this.window = win; + // FIXME: The distinction between this.window and window seems unimportant + // in the case of postMessage + var w = this.window; + // In a Content context we add the listener to the local window + // object, but in the addon context we add the listener to some + // other window, like the one we were given: + if (typeof window != "undefined") { + w = window; + } + w.addEventListener("message", this._receiveMessage, false); + if (! noSetup) { + this._setupConnection(); + } + }, + + _send: function (data) { + this.window.postMessage(data, this.expectedOrigin || "*"); + }, + + _ready: function () { + return this.window && this._pingReceived; + }, + + _setupConnection: function () { + if (this.closed || this._pingReceived || (! this.window)) { + return; + } + this._pingFailures++; + this._send("hello"); + // We'll keep sending ping messages until we get a reply + var time = this._pingPollPeriod + (this._pingPollIncrease * this._pingFailures); + time = time > this._pingPollMax ? this._pingPollMax : time; + this._pingTimeout = setTimeout(this._setupConnection.bind(this), time); + }, + + _receiveMessage: function (event) { + if (event.source !== this.window) { + return; + } + if (this.expectedOrigin && event.origin != this.expectedOrigin) { + console.info("Expected message from", this.expectedOrigin, + "but got message from", event.origin); + return; + } + if (! this.expectedOrigin) { + this.expectedOrigin = event.origin; + } + if (event.data == "hello") { + this._pingReceived = true; + if (this._pingTimeout) { + clearTimeout(this._pingTimeout); + this._pingTimeout = null; + } + this._flush(); + return; + } + this._incoming(event.data); + }, + + close: function () { + this.closed = true; + this._pingReceived = false; + if (this._pingTimeout) { + clearTimeout(this._pingTimeout); + } + window.removeEventListener("message", this._receiveMessage, false); + if (this.onclose) { + this.onclose(); + } + this.emit("close"); + } + +}); + + +/* Handles message FROM an exterior window/parent */ +channels.PostMessageIncomingChannel = util.Class(AbstractChannel, { + + constructor: function (expectedOrigin) { + this.source = null; + this.expectedOrigin = expectedOrigin; + this._receiveMessage = this._receiveMessage.bind(this); + window.addEventListener("message", this._receiveMessage, false); + this.baseConstructor(); + }, + + toString: function () { + var s = '[PostMessageIncomingChannel'; + if (this.source) { + s += ' bound to source ' + s; + } else { + s += ' awaiting source'; + } + return s + ']'; + }, + + _send: function (data) { + this.source.postMessage(data, this.expectedOrigin); + }, + + _ready: function () { + return !!this.source; + }, + + _setupConnection: function () { + }, + + _receiveMessage: function (event) { + if (this.expectedOrigin && this.expectedOrigin != "*" && + event.origin != this.expectedOrigin) { + // FIXME: Maybe not worth mentioning? + console.info("Expected message from", this.expectedOrigin, + "but got message from", event.origin); + return; + } + if (! this.expectedOrigin) { + this.expectedOrigin = event.origin; + } + if (! this.source) { + this.source = event.source; + } + if (event.data == "hello") { + // Just a ping + this.source.postMessage("hello", this.expectedOrigin); + return; + } + this._incoming(event.data); + }, + + close: function () { + this.closed = true; + window.removeEventListener("message", this._receiveMessage, false); + if (this._pingTimeout) { + clearTimeout(this._pingTimeout); + } + if (this.onclose) { + this.onclose(); + } + this.emit("close"); + } + +}); + +channels.Router = util.Class(util.mixinEvents({ + + constructor: function (channel) { + this._channelMessage = this._channelMessage.bind(this); + this._channelClosed = this._channelClosed.bind(this); + this._routes = Object.create(null); + if (channel) { + this.bindChannel(channel); + } + }, + + bindChannel: function (channel) { + if (this.channel) { + this.channel.removeListener("message", this._channelMessage); + this.channel.removeListener("close", this._channelClosed); + } + this.channel = channel; + this.channel.on("message", this._channelMessage.bind(this)); + this.channel.on("close", this._channelClosed.bind(this)); + }, + + _channelMessage: function (msg) { + if (msg.type == "route") { + var id = msg.routeId; + var route = this._routes[id]; + if (! route) { + console.warn("No route with the id", id); + return; + } + if (msg.close) { + this._closeRoute(route.id); + } else { + if (route.onmessage) { + route.onmessage(msg.message); + } + route.emit("message", msg.message); + } + } + }, + + _channelClosed: function () { + for (var id in this._routes) { + this._closeRoute(id); + } + }, + + _closeRoute: function (id) { + var route = this._routes[id]; + if (route.onclose) { + route.onclose(); + } + route.emit("close"); + delete this._routes[id]; + }, + + makeRoute: function (id) { + id = id || util.generateId(); + var route = Route(this, id); + this._routes[id] = route; + return route; + } +})); + +var Route = util.Class(util.mixinEvents({ + constructor: function (router, id) { + this.router = router; + this.id = id; + }, + + send: function (msg) { + this.router.channel.send({ + type: "route", + routeId: this.id, + message: msg + }); + }, + + close: function () { + if (this.router._routes[this.id] !== this) { + // This route instance has been overwritten, so ignore + return; + } + delete this.router._routes[this.id]; + } + +})); + +return channels; + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('storage',["util"], function (util) { + var assert = util.assert; + var Deferred = util.Deferred; + var DEFAULT_SETTINGS = { + name: "", + defaultName: "", + avatar: null, + stickyShare: null, + color: null, + seenIntroDialog: false, + seenWalkthrough: false, + dontShowRtcInfo: false + }; + + var DEBUG_STORAGE = false; + + var Storage = util.Class({ + constructor: function (name, storage, prefix) { + this.name = name; + this.storage = storage; + this.prefix = prefix; + }, + + get: function (key, defaultValue) { + var self = this; + return Deferred(function (def) { + // Strictly this isn't necessary, but eventually I want to move to something more + // async for the storage, and this simulates that much better. + setTimeout(util.resolver(def, function () { + key = self.prefix + key; + var value = self.storage.getItem(key); + if (! value) { + value = defaultValue; + if (DEBUG_STORAGE) { + console.debug("Get storage", key, "defaults to", value); + } + } else { + value = JSON.parse(value); + if (DEBUG_STORAGE) { + console.debug("Get storage", key, "=", value); + } + } + return value; + })); + }); + }, + + set: function (key, value) { + var self = this; + if (value !== undefined) { + value = JSON.stringify(value); + } + return Deferred(function (def) { + key = self.prefix + key; + if (value === undefined) { + self.storage.removeItem(key); + if (DEBUG_STORAGE) { + console.debug("Delete storage", key); + } + } else { + self.storage.setItem(key, value); + if (DEBUG_STORAGE) { + console.debug("Set storage", key, value); + } + } + setTimeout(def.resolve); + }); + }, + + clear: function () { + var self = this; + var promises = []; + return Deferred((function (def) { + this.keys().then(function (keys) { + keys.forEach(function (key) { + // FIXME: technically we're ignoring the promise returned by all + // these sets: + promises.push(self.set(key, undefined)); + }); + util.resolveMany(promises).then(function () { + def.resolve(); + }); + }); + }).bind(this)); + }, + + keys: function (prefix, excludePrefix) { + // Returns a list of keys, potentially with the given prefix + var self = this; + return Deferred(function (def) { + setTimeout(util.resolver(def, function () { + prefix = prefix || ""; + var result = []; + for (var i = 0; i < self.storage.length; i++) { + var key = self.storage.key(i); + if (key.indexOf(self.prefix + prefix) === 0) { + var shortKey = key.substr(self.prefix.length); + if (excludePrefix) { + shortKey = shortKey.substr(prefix.length); + } + result.push(shortKey); + } + } + return result; + })); + }); + }, + + toString: function () { + return '[storage for ' + this.name + ']'; + } + + }); + + var namePrefix = TogetherJS.config.get("storagePrefix"); + TogetherJS.config.close("storagePrefix"); + + var storage = Storage('localStorage', localStorage, namePrefix + "."); + + storage.settings = util.mixinEvents({ + defaults: DEFAULT_SETTINGS, + + get: function (name) { + assert(storage.settings.defaults.hasOwnProperty(name), "Unknown setting:", name); + return storage.get("settings." + name, storage.settings.defaults[name]); + }, + + set: function (name, value) { + assert(storage.settings.defaults.hasOwnProperty(name), "Unknown setting:", name); + return storage.set("settings." + name, value); + } + + }); + + storage.tab = Storage('sessionStorage', sessionStorage, namePrefix + "-session."); + + return storage; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('session',["require", "util", "channels", "jquery", "storage"], function (require, util, channels, $, storage) { + + var DEBUG = true; + + // This is the amount of time in which a hello-back must be received after a hello + // for us to respect a URL change: + var HELLO_BACK_CUTOFF = 1500; + + var session = util.mixinEvents(util.Module("session")); + var assert = util.assert; + + // We will load this module later (there's a circular import): + var peers; + + // This is the hub we connect to: + session.shareId = null; + // This is the ID that identifies this client: + session.clientId = null; + session.router = channels.Router(); + // Indicates if TogetherJS has just started (not continuing from a saved session): + session.firstRun = false; + + // This is the key we use for localStorage: + var localStoragePrefix = "togetherjs."; + // This is the channel to the hub: + var channel = null; + + // Setting, essentially global: + session.AVATAR_SIZE = 90; + + var MAX_SESSION_AGE = 30*24*60*60*1000; // 30 days + + /**************************************** + * URLs + */ + var includeHashInUrl = TogetherJS.config.get("includeHashInUrl"); + TogetherJS.config.close("includeHashInUrl"); + var currentUrl = (location.href + "").replace(/\#.*$/, ""); + if (includeHashInUrl) { + currentUrl = location.href; + } + + session.hubUrl = function (id) { + id = id || session.shareId; + assert(id, "URL cannot be resolved before TogetherJS.shareId has been initialized"); + TogetherJS.config.close("hubBase"); + var hubBase = TogetherJS.config.get("hubBase"); + return hubBase.replace(/\/*$/, "") + "/hub/" + id; + }; + + session.shareUrl = function () { + assert(session.shareId, "Attempted to access shareUrl() before shareId is set"); + var hash = location.hash; + var m = /\?[^#]*/.exec(location.href); + var query = ""; + if (m) { + query = m[0]; + } + hash = hash.replace(/&?togetherjs-[a-zA-Z0-9]+/, ""); + hash = hash || "#"; + return location.protocol + "//" + location.host + location.pathname + query + + hash + "&togetherjs=" + session.shareId; + }; + + session.recordUrl = function () { + assert(session.shareId); + var url = TogetherJS.baseUrl.replace(/\/*$/, "") + "/togetherjs/recorder.html"; + url += "#&togetherjs=" + session.shareId + "&hubBase=" + TogetherJS.config.get("hubBase"); + return url; + }; + + /* location.href without the hash */ + session.currentUrl = function () { + if (includeHashInUrl) { + return location.href; + } else { + return location.href.replace(/#.*/, ""); + } + }; + + /**************************************** + * Message handling/dispatching + */ + + session.hub = util.mixinEvents({}); + + var IGNORE_MESSAGES = TogetherJS.config.get("ignoreMessages"); + if (IGNORE_MESSAGES === true) { + DEBUG = false; + IGNORE_MESSAGES = []; + } + // These are messages sent by clients who aren't "part" of the TogetherJS session: + var MESSAGES_WITHOUT_CLIENTID = ["who", "invite", "init-connection"]; + + // We ignore incoming messages from the channel until this is true: + var readyForMessages = false; + + function openChannel() { + assert(! channel, "Attempt to re-open channel"); + console.info("Connecting to", session.hubUrl(), location.href); + var c = channels.WebSocketChannel(session.hubUrl()); + c.onmessage = function (msg) { + if (! readyForMessages) { + if (DEBUG) { + console.info("In (but ignored for being early):", msg); + } + return; + } + if (DEBUG && IGNORE_MESSAGES.indexOf(msg.type) == -1) { + console.info("In:", msg); + } + if (! peers) { + // We're getting messages before everything is fully initialized + console.warn("Message received before all modules loaded (ignoring):", msg); + return; + } + if ((! msg.clientId) && MESSAGES_WITHOUT_CLIENTID.indexOf(msg.type) == -1) { + console.warn("Got message without clientId, where clientId is required", msg); + return; + } + if (msg.clientId) { + msg.peer = peers.getPeer(msg.clientId, msg); + } + if (msg.type == "hello" || msg.type == "hello-back" || msg.type == "peer-update") { + // We do this here to make sure this is run before any other + // hello handlers: + msg.peer.updateFromHello(msg); + } + if (msg.peer) { + msg.sameUrl = msg.peer.url == currentUrl; + if (!msg.peer.isSelf) { + msg.peer.updateMessageDate(msg); + } + } + session.hub.emit(msg.type, msg); + TogetherJS._onmessage(msg); + }; + channel = c; + session.router.bindChannel(channel); + } + + session.send = function (msg) { + if (DEBUG && IGNORE_MESSAGES.indexOf(msg.type) == -1) { + console.info("Send:", msg); + } + msg.clientId = session.clientId; + channel.send(msg); + }; + + session.appSend = function (msg) { + var type = msg.type; + if (type.search(/^togetherjs\./) === 0) { + type = type.substr("togetherjs.".length); + } else if (type.search(/^app\./) === -1) { + type = "app." + type; + } + msg.type = type; + session.send(msg); + }; + + /**************************************** + * Standard message responses + */ + + /* Always say hello back, and keep track of peers: */ + session.hub.on("hello hello-back", function (msg) { + if (msg.type == "hello") { + sendHello(true); + } + if (session.isClient && (! msg.isClient) && + session.firstRun && session.timeHelloSent && + Date.now() - session.timeHelloSent < HELLO_BACK_CUTOFF) { + processFirstHello(msg); + } + }); + + session.hub.on("who", function (msg) { + sendHello(true); + }); + + function processFirstHello(msg) { + if (! msg.sameUrl) { + var url = msg.url; + if (msg.urlHash) { + url += msg.urlHash; + } + require("ui").showUrlChangeMessage(msg.peer, url); + location.href = url; + } + } + + session.timeHelloSent = null; + + function sendHello(helloBack) { + var msg = session.makeHelloMessage(helloBack); + if (! helloBack) { + session.timeHelloSent = Date.now(); + peers.Self.url = msg.url; + } + session.send(msg); + } + + session.makeHelloMessage = function (helloBack) { + var msg = { + name: peers.Self.name || peers.Self.defaultName, + avatar: peers.Self.avatar, + color: peers.Self.color, + url: session.currentUrl(), + urlHash: location.hash, + // FIXME: titles update, we should track those changes: + title: document.title, + rtcSupported: session.RTCSupported, + isClient: session.isClient + }; + if (helloBack) { + msg.type = "hello-back"; + } else { + msg.type = "hello"; + msg.clientVersion = TogetherJS.version; + } + if (! TogetherJS.startup.continued) { + msg.starting = true; + } + // This is a chance for other modules to effect the hello message: + session.emit("prepare-hello", msg); + return msg; + }; + /**************************************** + * Lifecycle (start and end) + */ + + // These are Javascript files that implement features, and so must + // be injected at runtime because they aren't pulled in naturally + // via define(). + // ui must be the first item: + var features = ["peers", "ui", "chat", "webrtc", "cursor", "startup", "videos", "forms", "visibilityApi", "youtubeVideos"]; + + function getRoomName(prefix, maxSize) { + var findRoom = TogetherJS.config.get("hubBase").replace(/\/*$/, "") + "/findroom"; + return $.ajax({ + url: findRoom, + dataType: "json", + data: {prefix: prefix, max: maxSize} + }).then(function (resp) { + return resp.name; + }); + } + + function initIdentityId() { + return util.Deferred(function (def) { + if (session.identityId) { + def.resolve(); + return; + } + storage.get("identityId").then(function (identityId) { + if (! identityId) { + identityId = util.generateId(); + storage.set("identityId", identityId); + } + session.identityId = identityId; + // We don't actually have to wait for the set to succede, so + // long as session.identityId is set + def.resolve(); + }); + }); + } + + initIdentityId.done = initIdentityId(); + + function initShareId() { + return util.Deferred(function (def) { + var hash = location.hash; + var shareId = session.shareId; + var isClient = true; + var set = true; + var sessionId; + session.firstRun = ! TogetherJS.startup.continued; + if (! shareId) { + if (TogetherJS.startup._joinShareId) { + // Like, below, this *also* means we got the shareId from the hash + // (in togetherjs.js): + shareId = TogetherJS.startup._joinShareId; + } + } + if (! shareId) { + // FIXME: I'm not sure if this will ever happen, because togetherjs.js should + // handle it + var m = /&?togetherjs=([^&]*)/.exec(hash); + if (m) { + isClient = ! m[1]; + shareId = m[2]; + var newHash = hash.substr(0, m.index) + hash.substr(m.index + m[0].length); + location.hash = newHash; + } + } + return storage.tab.get("status").then(function (saved) { + var findRoom = TogetherJS.config.get("findRoom"); + TogetherJS.config.close("findRoom"); + if (findRoom && saved && findRoom != saved.shareId) { + console.info("Ignoring findRoom in lieu of continued session"); + } else if (findRoom && TogetherJS.startup._joinShareId) { + console.info("Ignoring findRoom in lieu of explicit invite to session"); + } + if (findRoom && typeof findRoom == "string" && (! saved) && (! TogetherJS.startup._joinShareId)) { + isClient = true; + shareId = findRoom; + sessionId = util.generateId(); + } else if (findRoom && (! saved) && (! TogetherJS.startup._joinShareId)) { + assert(findRoom.prefix && typeof findRoom.prefix == "string", "Bad findRoom.prefix", findRoom); + assert(findRoom.max && typeof findRoom.max == "number" && findRoom.max > 0, + "Bad findRoom.max", findRoom); + sessionId = util.generateId(); + if (findRoom.prefix.search(/[^a-zA-Z0-9]/) != -1) { + console.warn("Bad value for findRoom.prefix:", JSON.stringify(findRoom.prefix)); + } + getRoomName(findRoom.prefix, findRoom.max).then(function (shareId) { + // FIXME: duplicates code below: + session.clientId = session.identityId + "." + sessionId; + storage.tab.set("status", {reason: "joined", shareId: shareId, running: true, date: Date.now(), sessionId: sessionId}); + session.isClient = true; + session.shareId = shareId; + session.emit("shareId"); + def.resolve(session.shareId); + }); + return; + } else if (TogetherJS.startup._launch) { + if (saved) { + isClient = saved.reason == "joined"; + if (! shareId) { + shareId = saved.shareId; + } + sessionId = saved.sessionId; + } else { + isClient = TogetherJS.startup.reason == "joined"; + assert(! sessionId); + sessionId = util.generateId(); + } + if (! shareId) { + shareId = util.generateId(); + } + } else if (saved) { + isClient = saved.reason == "joined"; + TogetherJS.startup.reason = saved.reason; + TogetherJS.startup.continued = true; + shareId = saved.shareId; + sessionId = saved.sessionId; + // The only case when we don't need to set the storage status again is when + // we're already set to be running + set = ! saved.running; + } else { + throw new util.AssertionError("No saved status, and no startup._launch request; why did TogetherJS start?"); + } + assert(session.identityId); + session.clientId = session.identityId + "." + sessionId; + if (set) { + storage.tab.set("status", {reason: TogetherJS.startup.reason, shareId: shareId, running: true, date: Date.now(), sessionId: sessionId}); + } + session.isClient = isClient; + session.shareId = shareId; + session.emit("shareId"); + def.resolve(session.shareId); + }); + }); + } + + function initStartTarget() { + var id; + if (TogetherJS.startup.button) { + id = TogetherJS.startup.button.id; + if (id) { + storage.set("startTarget", id); + } + return; + } + storage.get("startTarget").then(function (id) { + var el = document.getElementById(id); + if (el) { + TogetherJS.startup.button = el; + } + }); + } + session.start = function () { + initStartTarget(); + initIdentityId().then(function () { + initShareId().then(function () { + readyForMessages = false; + openChannel(); + require(["ui"], function (ui) { + TogetherJS.running = true; + ui.prepareUI(); + require(features, function () { + $(function () { + peers = require("peers"); + var startup = require("startup"); + session.emit("start"); + session.once("ui-ready", function () { + readyForMessages = true; + startup.start(); + }); + ui.activateUI(); + TogetherJS.config.close("enableAnalytics"); + if (TogetherJS.config.get("enableAnalytics")) { + require(["analytics"], function (analytics) { + analytics.activate(); + }); + } + peers._SelfLoaded.then(function () { + sendHello(false); + }); + TogetherJS.emit("ready"); + }); + }); + }); + }); + }); + }; + + session.close = function (reason) { + TogetherJS.running = false; + var msg = {type: "bye"}; + if (reason) { + msg.reason = reason; + } + session.send(msg); + session.emit("close"); + var name = window.name; + storage.tab.get("status").then(function (saved) { + if (! saved) { + console.warn("No session information saved in", "status." + name); + } else { + saved.running = false; + saved.date = Date.now(); + storage.tab.set("status", saved); + } + channel.close(); + channel = null; + session.shareId = null; + session.emit("shareId"); + TogetherJS.emit("close"); + TogetherJS._teardown(); + }); + }; + + session.on("start", function () { + $(window).on("resize", resizeEvent); + if (includeHashInUrl) { + $(window).on("hashchange", hashchangeEvent); + } + }); + + session.on("close", function () { + $(window).off("resize", resizeEvent); + if (includeHashInUrl) { + $(window).off("hashchange", hashchangeEvent); + } + }); + + function hashchangeEvent() { + // needed because when message arives from peer this variable will be checked to + // decide weather to show actions or not + sendHello(false); + } + + function resizeEvent() { + session.emit("resize"); + } + + if (TogetherJS.startup._launch) { + setTimeout(session.start); + } + + util.testExpose({ + getChannel: function () { + return channel; + } + }); + + return session; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// FIXME: maybe it would be better to dynamically assemble the first +// argument to define() here to include the localized module: +define('templates',["util", "require"], function (util, require) { + var assert = util.assert; + + function clean(t) { + // Removes <% /* ... */ %> comments: + t = t.replace(/[<][%]\s*\/\*[\S\s\r\n]*\*\/\s*[%][>]/, ""); + t = util.trim(t); + t = t.replace(/http:\/\/localhost:8080/g, TogetherJS.baseUrl); + t = t.replace(/TOOL_NAME/g, 'TogetherJS'); + t = t.replace(/SITE_NAME/g, '[site name]'); + t = t.replace(/TOOL_SITE_LINK/g, 'TogetherJS'); + return t; + } + + var lang = TogetherJS.getConfig("lang") || "en-US"; + var moduleName = "templates-" + lang; + var templatesLang; + require([moduleName], function (mod) { + templatesLang = mod; + }); + + return function (resourceName) { + // Sometimes require([moduleName]) doesn't return even after the + // module has been loaded, but this sync version of require() will + // pick up the module in that case: + if (! templatesLang) { + try { + templatesLang = require(moduleName); + } catch (e) { + console.warn("Error requiring module:", e); + } + } + assert(templatesLang, "Templates not yet loaded"); + return clean(templatesLang[resourceName]); + }; + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('peers',["util", "session", "storage", "require", "templates"], function (util, session, storage, require, templates) { + var peers = util.Module("peers"); + var assert = util.assert; + var CHECK_ACTIVITY_INTERVAL = 10*1000; // Every 10 seconds see if someone has gone idle + var IDLE_TIME = 3*60*1000; // Idle time is 3 minutes + var TAB_IDLE_TIME = 2*60*1000; // When you tab away, after two minutes you'll say you are idle + var BYE_TIME = 10*60*1000; // After 10 minutes of inactivity the person is considered to be "gone" + + var ui; + require(["ui"], function (uiModule) { + ui = uiModule; + }); + + var DEFAULT_NICKNAMES = templates("names").split(/,\s*/g); + var Peer = util.Class({ + + isSelf: false, + + constructor: function (id, attrs) { + attrs = attrs || {}; + assert(id); + assert(! Peer.peers[id]); + this.id = id; + this.identityId = attrs.identityId || null; + this.status = attrs.status || "live"; + this.idle = attrs.status || "active"; + this.name = attrs.name || null; + this.avatar = attrs.avatar || null; + this.color = attrs.color || "#00FF00"; + this.view = ui.PeerView(this); + this.lastMessageDate = 0; + this.following = attrs.following || false; + Peer.peers[id] = this; + var joined = attrs.joined || false; + if (attrs.fromHelloMessage) { + this.updateFromHello(attrs.fromHelloMessage); + if (attrs.fromHelloMessage.type == "hello") { + joined = true; + } + } + peers.emit("new-peer", this); + if (joined) { + this.view.notifyJoined(); + } + this.view.update(); + }, + + repr: function () { + return "Peer(" + JSON.stringify(this.id) + ")"; + }, + + serialize: function () { + return { + id: this.id, + status: this.status, + idle: this.idle, + url: this.url, + hash: this.hash, + title: this.title, + identityId: this.identityId, + rtcSupported: this.rtcSupported, + name: this.name, + avatar: this.avatar, + color: this.color, + following: this.following + }; + }, + + destroy: function () { + this.view.destroy(); + delete Peer.peers[this.id]; + }, + + updateMessageDate: function (msg) { + if (this.idle == "inactive") { + this.update({idle: "active"}); + } + if (this.status == "bye") { + this.unbye(); + } + this.lastMessageDate = Date.now(); + }, + + updateFromHello: function (msg) { + var urlUpdated = false; + var activeRTC = false; + var identityUpdated = false; + if (msg.url && msg.url != this.url) { + this.url = msg.url; + this.hash = null; + this.title = null; + urlUpdated = true; + } + if (msg.hash != this.hash) { + this.hash = msg.urlHash; + urlUpdated = true; + } + if (msg.title != this.title) { + this.title = msg.title; + urlUpdated = true; + } + if (msg.rtcSupported !== undefined) { + this.rtcSupported = msg.rtcSupported; + } + if (msg.identityId !== undefined) { + this.identityId = msg.identityId; + } + if (msg.name && msg.name != this.name) { + this.name = msg.name; + identityUpdated = true; + } + if (msg.avatar && msg.avatar != this.avatar) { + util.assertValidUrl(msg.avatar); + this.avatar = msg.avatar; + identityUpdated = true; + } + if (msg.color && msg.color != this.color) { + this.color = msg.color; + identityUpdated = true; + } + if (msg.isClient !== undefined) { + this.isCreator = ! msg.isClient; + } + if (this.status != "live") { + this.status = "live"; + peers.emit("status-updated", this); + } + if (this.idle != "active") { + this.idle = "active"; + peers.emit("idle-updated", this); + } + if (msg.rtcSupported) { + peers.emit("rtc-supported", this); + } + if (urlUpdated) { + peers.emit("url-updated", this); + } + if (identityUpdated) { + peers.emit("identity-updated", this); + } + // FIXME: I can't decide if this is the only time we need to emit + // this message (and not .update() or other methods) + if (this.following) { + session.emit("follow-peer", this); + } + }, + + update: function (attrs) { + // FIXME: should probably test that only a couple attributes are settable + // particularly status and idle + if (attrs.idle) { + this.idle = attrs.idle; + } + if (attrs.status) { + this.status = attrs.status; + } + this.view.update(); + }, + + className: function (prefix) { + prefix = prefix || ""; + return prefix + util.safeClassName(this.id); + }, + + bye: function () { + if (this.status != "bye") { + this.status = "bye"; + peers.emit("status-updated", this); + } + this.view.update(); + }, + + unbye: function () { + if (this.status == "bye") { + this.status = "live"; + peers.emit("status-updated", this); + } + this.view.update(); + }, + + nudge: function () { + session.send({ + type: "url-change-nudge", + url: location.href, + to: this.id + }); + }, + + follow: function () { + if (this.following) { + return; + } + peers.getAllPeers().forEach(function (p) { + if (p.following) { + p.unfollow(); + } + }); + this.following = true; + // We have to make sure we remember this, even if we change URLs: + storeSerialization(); + this.view.update(); + session.emit("follow-peer", this); + }, + + unfollow: function () { + this.following = false; + storeSerialization(); + this.view.update(); + } + + }); + + // FIXME: I can't decide where this should actually go, seems weird + // that it is emitted and handled in the same module + session.on("follow-peer", function (peer) { + if (peer.url != session.currentUrl()) { + var url = peer.url; + if (peer.urlHash) { + url += peer.urlHash; + } + location.href = url; + } + }); + + Peer.peers = {}; + + Peer.deserialize = function (obj) { + obj.fromStorage = true; + var peer = Peer(obj.id, obj); + }; + + peers.Self = undefined; + + session.on("start", function () { + if (peers.Self) { + return; + } + /* Same interface as Peer, represents oneself (local user): */ + peers.Self = util.mixinEvents({ + isSelf: true, + id: session.clientId, + identityId: session.identityId, + status: "live", + idle: "active", + name: null, + avatar: null, + color: null, + defaultName: null, + loaded: false, + isCreator: ! session.isClient, + + update: function (attrs) { + var updatePeers = false; + var updateIdle = false; + var updateMsg = {type: "peer-update"}; + if (typeof attrs.name == "string" && attrs.name != this.name) { + this.name = attrs.name; + updateMsg.name = this.name; + if (! attrs.fromLoad) { + storage.settings.set("name", this.name); + updatePeers = true; + } + } + if (attrs.avatar && attrs.avatar != this.avatar) { + util.assertValidUrl(attrs.avatar); + this.avatar = attrs.avatar; + updateMsg.avatar = this.avatar; + if (! attrs.fromLoad) { + storage.settings.set("avatar", this.avatar); + updatePeers = true; + } + } + if (attrs.color && attrs.color != this.color) { + this.color = attrs.color; + updateMsg.color = this.color; + if (! attrs.fromLoad) { + storage.settings.set("color", this.color); + updatePeers = true; + } + } + if (attrs.defaultName && attrs.defaultName != this.defaultName) { + this.defaultName = attrs.defaultName; + if (! attrs.fromLoad) { + storage.settings.set("defaultName", this.defaultName); + updatePeers = true; + } + } + if (attrs.status && attrs.status != this.status) { + this.status = attrs.status; + peers.emit("status-updated", this); + } + if (attrs.idle && attrs.idle != this.idle) { + this.idle = attrs.idle; + updateIdle = true; + peers.emit("idle-updated", this); + } + this.view.update(); + if (updatePeers && ! attrs.fromLoad) { + session.emit("self-updated"); + session.send(updateMsg); + } + if (updateIdle && ! attrs.fromLoad) { + session.send({ + type: "idle-status", + idle: this.idle + }); + } + }, + + className: function (prefix) { + prefix = prefix || ""; + return prefix + "self"; + }, + + _loadFromSettings: function () { + return util.resolveMany( + storage.settings.get("name"), + storage.settings.get("avatar"), + storage.settings.get("defaultName"), + storage.settings.get("color")).then((function (name, avatar, defaultName, color) { + if (! defaultName) { + defaultName = util.pickRandom(DEFAULT_NICKNAMES); + + storage.settings.set("defaultName", defaultName); + } + if (! color) { + color = Math.floor(Math.random() * 0xffffff).toString(16); + while (color.length < 6) { + color = "0" + color; + } + color = "#" + color; + storage.settings.set("color", color); + } + if (! avatar) { + avatar = TogetherJS.baseUrl + "/togetherjs/images/default-avatar.png"; + } + this.update({ + name: name, + avatar: avatar, + defaultName: defaultName, + color: color, + fromLoad: true + }); + peers._SelfLoaded.resolve(); + }).bind(this)); // FIXME: ignoring error + }, + + _loadFromApp: function () { + // FIXME: I wonder if these should be optionally functions? + // We could test typeof==function to distinguish between a getter and a concrete value + var getUserName = TogetherJS.config.get("getUserName"); + var getUserColor = TogetherJS.config.get("getUserColor"); + var getUserAvatar = TogetherJS.config.get("getUserAvatar"); + var name, color, avatar; + if (getUserName) { + if (typeof getUserName == "string") { + name = getUserName; + } else { + name = getUserName(); + } + if (name && typeof name != "string") { + // FIXME: test for HTML safe? Not that we require it, but + // <>'s are probably a sign something is wrong. + console.warn("Error in getUserName(): should return a string (got", name, ")"); + name = null; + } + } + if (getUserColor) { + if (typeof getUserColor == "string") { + color = getUserColor; + } else { + color = getUserColor(); + } + if (color && typeof color != "string") { + // FIXME: would be nice to test for color-ness here. + console.warn("Error in getUserColor(): should return a string (got", color, ")"); + color = null; + } + } + if (getUserAvatar) { + if (typeof getUserAvatar == "string") { + avatar = getUserAvatar; + } else { + avatar = getUserAvatar(); + } + if (avatar && typeof avatar != "string") { + console.warn("Error in getUserAvatar(): should return a string (got", avatar, ")"); + avatar = null; + } + } + if (name || color || avatar) { + this.update({ + name: name, + color: color, + avatar: avatar + }); + } + } + }); + + peers.Self.view = ui.PeerView(peers.Self); + storage.tab.get("peerCache").then(deserialize); + peers.Self._loadFromSettings().then(function() { + peers.Self._loadFromApp(); + peers.Self.view.update(); + session.emit("self-updated"); + }); + }); + + session.on("refresh-user-data", function () { + if (peers.Self) { + peers.Self._loadFromApp(); + } + }); + + TogetherJS.config.track( + "getUserName", + TogetherJS.config.track( + "getUserColor", + TogetherJS.config.track( + "getUserAvatar", + function () { + if (peers.Self) { + peers.Self._loadFromApp(); + } + } + ) + ) + ); + + peers._SelfLoaded = util.Deferred(); + + function serialize() { + var peers = []; + util.forEachAttr(Peer.peers, function (peer) { + peers.push(peer.serialize()); + }); + return { + peers: peers + }; + } + + function deserialize(obj) { + if (! obj) { + return; + } + obj.peers.forEach(function (peer) { + Peer.deserialize(peer); + }); + } + + peers.getPeer = function getPeer(id, message) { + assert(id); + var peer = Peer.peers[id]; + if (id === session.clientId) { + return peers.Self; + } + if (message && ! peer) { + peer = Peer(id, {fromHelloMessage: message}); + return peer; + } + assert(peer, "No peer with id:", id); + if (message && + (message.type == "hello" || message.type == "hello-back" || + message.type == "peer-update")) { + peer.updateFromHello(message); + peer.view.update(); + } + return Peer.peers[id]; + }; + + peers.getAllPeers = function (liveOnly) { + var result = []; + util.forEachAttr(Peer.peers, function (peer) { + if (liveOnly && peer.status != "live") { + return; + } + result.push(peer); + }); + return result; + }; + + function checkActivity() { + var ps = peers.getAllPeers(); + var now = Date.now(); + ps.forEach(function (p) { + if (p.idle == "active" && now - p.lastMessageDate > IDLE_TIME) { + p.update({idle: "inactive"}); + } + if (p.status != "bye" && now - p.lastMessageDate > BYE_TIME) { + p.bye(); + } + }); + } + + session.hub.on("bye", function (msg) { + var peer = peers.getPeer(msg.clientId); + peer.bye(); + }); + + var checkActivityTask = null; + + session.on("start", function () { + if (checkActivityTask) { + console.warn("Old peers checkActivityTask left over?"); + clearTimeout(checkActivityTask); + } + checkActivityTask = setInterval(checkActivity, CHECK_ACTIVITY_INTERVAL); + }); + + session.on("close", function () { + util.forEachAttr(Peer.peers, function (peer) { + peer.destroy(); + }); + storage.tab.set("peerCache", undefined); + clearTimeout(checkActivityTask); + checkActivityTask = null; + }); + + var tabIdleTimeout = null; + + session.on("visibility-change", function (hidden) { + if (hidden) { + if (tabIdleTimeout) { + clearTimeout(tabIdleTimeout); + } + tabIdleTimeout = setTimeout(function () { + peers.Self.update({idle: "inactive"}); + }, TAB_IDLE_TIME); + } else { + if (tabIdleTimeout) { + clearTimeout(tabIdleTimeout); + } + if (peers.Self.idle == "inactive") { + peers.Self.update({idle: "active"}); + } + } + }); + + session.hub.on("idle-status", function (msg) { + msg.peer.update({idle: msg.idle}); + }); + + // Pings are a straight alive check, and contain no more information: + session.hub.on("ping", function () { + session.send({type: "ping-back"}); + }); + + window.addEventListener("pagehide", function () { + // FIXME: not certain if this should be tab local or not: + storeSerialization(); + }, false); + + function storeSerialization() { + storage.tab.set("peerCache", serialize()); + } + + util.mixinEvents(peers); + + util.testExpose({ + setIdleTime: function (time) { + IDLE_TIME = time; + CHECK_ACTIVITY_INTERVAL = time / 2; + if (TogetherJS.running) { + clearTimeout(checkActivityTask); + checkActivityTask = setInterval(checkActivity, CHECK_ACTIVITY_INTERVAL); + } + } + }); + + util.testExpose({ + setByeTime: function (time) { + BYE_TIME = time; + CHECK_ACTIVITY_INTERVAL = Math.min(CHECK_ACTIVITY_INTERVAL, time / 2); + if (TogetherJS.running) { + clearTimeout(checkActivityTask); + checkActivityTask = setInterval(checkActivity, CHECK_ACTIVITY_INTERVAL); + } + } + }); + + return peers; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +define('windowing',["jquery", "util", "peers", "session"], function ($, util, peers, session) { + var assert = util.assert; + var windowing = util.Module("windowing"); + var $window = $(window); + // This is also in togetherjs.less, under .togetherjs-animated + var ANIMATION_DURATION = 1000; + + /* Displays one window. A window must already exist. This hides other windows, and + positions the window according to its data-bound-to attributes */ + windowing.show = function (element, options) { + element = $(element); + options = options || {}; + options.bind = options.bind || element.attr("data-bind-to"); + var notification = element.hasClass("togetherjs-notification"); + var modal = element.hasClass("togetherjs-modal"); + if (options.bind) { + options.bind = $(options.bind); + } + windowing.hide(); + element.stop(); + element.show(); + // In addition to being hidden, the window can be faded out, which we want to undo: + element.css({opacity: "1"}); + if (options.bind) { + assert(! modal, "Binding does not currently work with modals"); + bind(element, options.bind); + } + if (notification) { + element.slideIn(); + } else if (! modal) { + element.popinWindow(); + } + if (modal) { + getModalBackground().show(); + modalEscape.bind(); + } + onClose = options.onClose || null; + session.emit("display-window", element.attr("id"), element); + }; + + var onClose = null; + + /* Moves a window to be attached to data-bind-to, e.g., the button + that opened the window. Or you can provide an element that it should bind to. */ + function bind(win, bound) { + if ($.browser.mobile) { + return; + } + win = $(win); + assert(bound.length, "Cannot find binding:", bound.selector, "from:", win.selector); + // FIXME: hardcoding + var ifacePos = "right"; + //var ifacePos = panelPosition(); + var boundPos = bound.offset(); + boundPos.height = bound.height(); + boundPos.width = bound.width(); + var windowHeight = $window.height(); + boundPos.top -= $window.scrollTop(); + boundPos.left -= $window.scrollLeft(); + // FIXME: I appear to have to add the padding to the width to get a "true" + // width. But it's still not entirely consistent. + var height = win.height() + 5; + var width = win.width() + 20; + var left, top; + if (ifacePos == "right") { + left = boundPos.left - 11 - width; + top = boundPos.top + (boundPos.height / 2) - (height / 2); + } else if (ifacePos == "left") { + left = boundPos.left + boundPos.width + 15; + top = boundPos.top + (boundPos.height / 2) - (height / 2); + } else if (ifacePos == "bottom") { + left = (boundPos.left + boundPos.width / 2) - (width / 2); + top = boundPos.top - 10 - height; + } + top = Math.min(windowHeight - 10 - height, Math.max(10, top)); + win.css({ + top: top + "px", + left: left + "px" + }); + if (win.hasClass("togetherjs-window")) { + $("#togetherjs-window-pointer-right, #togetherjs-window-pointer-left").hide(); + var pointer = $("#togetherjs-window-pointer-" + ifacePos); + pointer.show(); + if (ifacePos == "right") { + pointer.css({ + top: boundPos.top + Math.floor(boundPos.height / 2) + "px", + left: left + win.width() + 9 + "px" + }); + } else if (ifacePos == "left") { + pointer.css({ + top: boundPos.top + Math.floor(boundPos.height / 2) + "px", + left: (left - 5) + "px" + }); + } else { + console.warn("don't know how to deal with position:", ifacePos); + } + } + win.data("boundTo", bound.selector || "#" + bound.attr("id")); + bound.addClass("togetherjs-active"); + } + + session.on("resize", function () { + var win = $(".togetherjs-modal:visible, .togetherjs-window:visible"); + if (! win.length) { + return; + } + var boundTo = win.data("boundTo"); + if (! boundTo) { + return; + } + boundTo = $(boundTo); + bind(win, boundTo); + }); + + windowing.hide = function (els) { + // FIXME: also hide modals? + els = els || ".togetherjs-window, .togetherjs-modal, .togetherjs-notification"; + els = $(els); + els = els.filter(":visible"); + els.filter(":not(.togetherjs-notification)").hide(); + getModalBackground().hide(); + var windows = []; + els.each(function (index, element) { + element = $(element); + windows.push(element); + var bound = element.data("boundTo"); + if (! bound) { + return; + } + bound = $(bound); + bound.addClass("togetherjs-animated").addClass("togetherjs-color-pulse"); + setTimeout(function () { + bound.removeClass("togetherjs-color-pulse").removeClass("togetherjs-animated"); + }, ANIMATION_DURATION+10); + element.data("boundTo", null); + bound.removeClass("togetherjs-active"); + if (element.hasClass("togetherjs-notification")) { + element.fadeOut().promise().then(function () { + this.hide(); + }); + } + }); + $("#togetherjs-window-pointer-right, #togetherjs-window-pointer-left").hide(); + if (onClose) { + onClose(); + onClose = null; + } + if (windows.length) { + session.emit("hide-window", windows); + } + }; + + windowing.showNotification = function (element, options) { + element = $(element); + options = options || {}; + assert(false); + }; + + windowing.toggle = function (el) { + el = $(el); + if (el.is(":visible")) { + windowing.hide(el); + } else { + windowing.show(el); + } + }; + + function bindEvents(el) { + el.find(".togetherjs-close, .togetherjs-dismiss").click(function (event) { + var w = $(event.target).closest(".togetherjs-window, .togetherjs-modal, .togetherjs-notification"); + windowing.hide(w); + event.stopPropagation(); + return false; + }); + } + + function getModalBackground() { + if (getModalBackground.element) { + return getModalBackground.element; + } + var background = $("#togetherjs-modal-background"); + assert(background.length); + getModalBackground.element = background; + background.click(function () { + windowing.hide(); + }); + return background; + } + + var modalEscape = { + bind: function () { + $(document).keydown(modalEscape.onKeydown); + }, + unbind: function () { + $(document).unbind("keydown", modalEscape.onKeydown); + }, + onKeydown: function (event) { + if (event.which == 27) { + windowing.hide(); + } + } + }; + + session.on("close", function () { + modalEscape.unbind(); + }); + + session.on("new-element", function (el) { + bindEvents(el); + }); + + return windowing; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +define('templating',["jquery", "util", "peers", "windowing", "session"], function ($, util, peers, windowing, session) { + var assert = util.assert; + var templating = util.Module("templating"); + + templating.clone = function (templateId) { + templateId = "#togetherjs-template-" + templateId; + var template = $(templateId); + assert(template.length, "No template found with id:", templateId); + template = template.clone(); + template.attr("id", null); + // FIXME: if called directly, doesn't emit new-element event: + return template; + }; + + templating.sub = function (templateId, variables) { + var template = templating.clone(templateId); + variables = variables || {}; + util.forEachAttr(variables, function (value, attr) { + // FIXME: do the substitution... somehow? + var subs = template.find(".togetherjs-sub-" + attr).removeClass("togetherjs-sub-" + attr); + if (subs.length) { + if (typeof value == "string") { + subs.text(value); + } else if (value instanceof $) { + subs.append(value); + } else { + assert(false, "Unknown variable value type:", attr, "=", value); + } + } + var ifs = template.find(".togetherjs-if-" + attr).removeClass("togetherjs-sub-" + attr); + if (! value) { + ifs.hide(); + } + ifs = template.find(".togetherjs-ifnot-" + attr).removeClass("togetherjs-ifnot-" + attr); + if (value) { + ifs.hide(); + } + var attrName = "data-togetherjs-subattr-" + attr; + var attrs = template.find("[" + attrName + "]"); + attrs.each(function (index, element) { + assert(typeof value == "string"); + element = $(element); + var subAttribute = element.attr(attrName); + element.attr(attrName, null); + element.attr(subAttribute, value); + }); + }); + if (variables.peer) { + variables.peer.view.setElement(template); + } + if (variables.date) { + var date = variables.date; + if (typeof date == "number") { + date = new Date(date); + } + var ampm = "AM"; + var hour = date.getHours(); + if (hour > 12) { + hour -= 12; + ampm = "PM"; + } + var minute = date.getMinutes(); + var t = hour + ":"; + if (minute < 10) { + t += "0"; + } + t += minute; + template.find(".togetherjs-time").text(t); + template.find(".togetherjs-ampm").text(ampm); + } + + // FIXME: silly this is on session: + session.emit("new-element", template); + return template; + }; + + return templating; +}); + +define('linkify',[], function () { + // FIXME: this could be moved to a different module, it's pretty stand-alone + /* Finds any links in the text of an element (or its children) and turns them + into anchors (with target=_blank) */ + function linkify(el) { + if (el.jquery) { + el = el[0]; + } + el.normalize(); + function linkifyNode(node) { + var _len = node.childNodes.length; + for (var i=0; i<_len; i++) { + if (node.childNodes[i].nodeType == document.ELEMENT_NODE) { + linkifyNode(node.childNodes[i]); + } + } + var texts = []; + for (i=0; i<_len; i++) { + if (node.childNodes[i].nodeType == document.TEXT_NODE) { + texts.push(node.childNodes[i]); + } + } + texts.forEach(function (item) { + if (item.nodeType == document.ELEMENT_NODE) { + linkifyNode(item); + } else if (item.nodeType == document.TEXT_NODE) { + while (true) { + var text = item.nodeValue; + var regex = /\bhttps?:\/\/[a-z0-9\.\-_](:\d+)?[^ \n\t<>()\[\]]*/i; + var match = regex.exec(text); + if (! match) { + break; + } + var leadingNode = document.createTextNode(text.substr(0, match.index)); + node.replaceChild(leadingNode, item); + var anchor = document.createElement("a"); + anchor.setAttribute("target", "_blank"); + anchor.href = match[0]; + anchor.appendChild(document.createTextNode(match[0])); + node.insertBefore(anchor, leadingNode.nextSibling); + var trailing = document.createTextNode(text.substr(match.index + match[0].length)); + node.insertBefore(trailing, anchor.nextSibling); + item = trailing; + } + } + }); + } + linkifyNode(el); + return el; + } + + return linkify; +}); + +// TinyColor v0.9.13 +// https://github.com/bgrins/TinyColor +// 2012-11-28, Brian Grinstead, MIT License + +(function(root) { + +var trimLeft = /^[\s,#]+/, + trimRight = /\s+$/, + tinyCounter = 0, + math = Math, + mathRound = math.round, + mathMin = math.min, + mathMax = math.max, + mathRandom = math.random; + +function tinycolor (color, opts) { + + color = (color) ? color : ''; + + // If input is already a tinycolor, return itself + if (typeof color == "object" && color.hasOwnProperty("_tc_id")) { + return color; + } + + var rgb = inputToRGB(color); + var r = rgb.r, + g = rgb.g, + b = rgb.b, + a = rgb.a, + roundA = mathRound(100*a) / 100, + format = rgb.format; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (r < 1) { r = mathRound(r); } + if (g < 1) { g = mathRound(g); } + if (b < 1) { b = mathRound(b); } + + return { + ok: rgb.ok, + format: format, + _tc_id: tinyCounter++, + alpha: a, + toHsv: function() { + var hsv = rgbToHsv(r, g, b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(r, g, b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(r, g, b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a }; + }, + toHslString: function() { + var hsl = rgbToHsl(r, g, b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")"; + }, + toHex: function() { + return rgbToHex(r, g, b); + }, + toHexString: function() { + return '#' + rgbToHex(r, g, b); + }, + toRgb: function() { + return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a }; + }, + toRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" : + "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a }; + }, + toPercentageRgbString: function() { + return (a == 1) ? + "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")"; + }, + toName: function() { + return hexNames[rgbToHex(r, g, b)] || false; + }, + toFilter: function() { + var hex = rgbToHex(r, g, b); + var secondHex = hex; + var alphaHex = Math.round(parseFloat(a) * 255).toString(16); + var secondAlphaHex = alphaHex; + var gradientType = opts && opts.gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex = s.toHex(); + secondAlphaHex = Math.round(parseFloat(s.alpha) * 255).toString(16); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr=#" + pad2(alphaHex) + hex + ",endColorstr=#" + pad2(secondAlphaHex) + secondHex + ")"; + }, + toString: function(format) { + format = format || this.format; + var formattedString = false; + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex") { + formattedString = this.toHexString(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + } + }; +} + +// If input is an object, force 1 into "1.0" to handle ratios properly +// String input requires "1.0" as input, so 1 will be treated as 1 +tinycolor.fromRatio = function(color) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + newColor[i] = convertToPercentage(color[i]); + } + color = newColor; + } + + return tinycolor(color); +}; + +// Given a string or object, convert that input to RGB +// Possible string inputs: +// +// "red" +// "#f00" or "f00" +// "#ff0000" or "ff0000" +// "rgb 255 0 0" or "rgb (255, 0, 0)" +// "rgb 1.0 0 0" or "rgb (1, 0, 0)" +// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" +// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" +// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" +// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" +// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" +// +function inputToRGB(color) { + + var rgb = { r: 255, g: 255, b: 255 }; + var a = 1; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) { + color.s = convertToPercentage(color.s); + color.v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, color.s, color.v); + ok = true; + format = "hsv"; + } + else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) { + color.s = convertToPercentage(color.s); + color.l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, color.s, color.l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = parseFloat(a); + + // Handle invalid alpha characters by setting to 1 + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; +} + + + +// Conversion Functions +// -------------------- + +// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: +// + +// `rgbToRgb` +// Handle bounds / percentage checking to conform to CSS color spec +// +// *Assumes:* r, g, b in [0, 255] or [0, 1] +// *Returns:* { r, g, b } in [0, 255] +function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; +} + +// `rgbToHsl` +// Converts an RGB color value to HSL. +// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] +// *Returns:* { h, s, l } in [0,1] +function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; +} + +// `hslToRgb` +// Converts an HSL color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] +function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// `rgbToHsv` +// Converts an RGB color value to HSV +// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] +// *Returns:* { h, s, v } in [0,1] +function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; +} + +// `hsvToRgb` +// Converts an HSV color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// `rgbToHex` +// Converts an RGB color to hex +// Assumes r, g, and b are contained in the set [0, 255] +// Returns a 3 or 6 character hex +function rgbToHex(r, g, b) { + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); +} + +// `equals` +// Can be called with any tinycolor input +tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); +}; +tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); +}; + + +// Modification Functions +// ---------------------- +// Thanks to less.js for some of the basics here +// + + +tinycolor.desaturate = function (color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.s -= ((amount || 10) / 100); + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +}; +tinycolor.saturate = function (color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.s += ((amount || 10) / 100); + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +}; +tinycolor.greyscale = function(color) { + return tinycolor.desaturate(color, 100); +}; +tinycolor.lighten = function(color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.l += ((amount || 10) / 100); + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +}; +tinycolor.darken = function (color, amount) { + var hsl = tinycolor(color).toHsl(); + hsl.l -= ((amount || 10) / 100); + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +}; +tinycolor.complement = function(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); +}; + + +// Combination Functions +// --------------------- +// Thanks to jQuery xColor for some of the ideas behind these +// + +tinycolor.triad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; +}; +tinycolor.tetrad = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; +}; +tinycolor.splitcomplement = function(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; +}; +tinycolor.analogous = function(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; +}; +tinycolor.monochromatic = function(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; +}; +// Readability based on W3C recommendations: http://www.w3.org/TR/AERT#color-contrast +// Returns object with two properties: +// .brightness: the difference in brightness between the two colors +// .color: the difference in color/hue between the two colors +// An "acceptable" color is considered to have a brightness difference of 125 and a +// color difference of 500 +tinycolor.readability = function(color1, color2) { + var a = tinycolor(color1).toRgb(), b = tinycolor(color2).toRgb(); + var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000; + var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000; + var colorDiff = ( + Math.max(a.r, b.r) - Math.min(a.r, b.r) + + Math.max(a.g, b.g) - Math.min(a.g, b.g) + + Math.max(a.b, b.b) - Math.min(a.b, b.b)); + return { + brightness: Math.abs(brightnessA - brightnessB), + color: colorDiff + }; +}; +// True if using color1 over color2 (or vice versa) is "readable" +// Based on: http://www.w3.org/TR/AERT#color-contrast +// Example: +// tinycolor.readable("#000", "#111") => false +tinycolor.readable = function(color1, color2) { + var readability = tinycolor.readability(color1, color2); + return readability.brightness > 125 && readability.color > 500; +}; +// Given a base color and a list of possible foreground or background +// colors for that base, returns the most readable color. +// Example: +// tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000" +tinycolor.mostReadable = function(baseColor, colorList) { + var bestColor; + var bestScore = 0; + var bestIsReadable = false; + for (var i=0; i < colorList.length; i++) { + var readability = tinycolor.readability(baseColor, colorList[i]); + var readable = readability.brightness > 125 && readability.color > 500; + // We normalize both around the "acceptable" breaking point, + // but rank brightness constrast higher than hue. Why? I'm + // not sure, seems reasonable. + var score = 3 * (readability.brightness / 125) + (readability.color / 500); + if ((readable && ! bestIsReadable) || + (readable && bestIsReadable && score > bestScore) || + ((! readable) && (! bestIsReadable) && score > bestScore)) { + bestIsReadable = readable; + bestScore = score; + bestColor = colorList[i]; + } + } + return bestColor; +}; + + +// Big List of Colors +// --------- +// +var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" +}; + +// Make it easy to access colors via `hexNames[hex]` +var hexNames = tinycolor.hexNames = flip(names); + + +// Utilities +// --------- + +// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` +function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; +} + +// Take input from [0, n] and return it as [0, 1] +function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); +} + +// Force a number between 0 and 1 +function clamp01(val) { + return mathMin(1, mathMax(0, val)); +} + +// Parse an integer into hex +function parseHex(val) { + return parseInt(val, 16); +} + +// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 +// +function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; +} + +// Check to see if string passed in is a percentage +function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; +} + +// Force a hex value to have 2 characters +function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; +} + +// Replace a decimal with it's percentage value +function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; +} + +var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; +})(); + +// `stringInputToObject` +// Permissive string parsing. Take in a number of formats, and output an object +// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` +function stringInputToObject(color) { + + color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0 }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseHex(match[1]), + g: parseHex(match[2]), + b: parseHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseHex(match[1] + '' + match[1]), + g: parseHex(match[2] + '' + match[2]), + b: parseHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; +} + +// Node: Export function +if (typeof module !== "undefined" && module.exports) { + module.exports = tinycolor; +} +// AMD/requirejs: Define the module +else if (typeof define !== "undefined") { + define('tinycolor',[],function () {return tinycolor;}); +} +// Browser: Expose to window +else { + root.tinycolor = tinycolor; +} + +})(this); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('elementFinder',["util", "jquery"], function (util, $) { + var elementFinder = util.Module("elementFinder"); + var assert = util.assert; + + elementFinder.ignoreElement = function ignoreElement(el) { + if (el instanceof $) { + el = el[0]; + } + while (el) { + if ($(el).hasClass("togetherjs")) { + return true; + } + el = el.parentNode; + } + return false; + }; + + elementFinder.elementLocation = function elementLocation(el) { + assert(el !== null, "Got null element"); + if (el instanceof $) { + // a jQuery element + el = el[0]; + } + if (el[0] && el.attr && el[0].nodeType == 1) { + // Or a jQuery element not made by us + el = el[0]; + } + if (el.id) { + return "#" + el.id; + } + if (el.tagName == "BODY") { + return "body"; + } + if (el.tagName == "HEAD") { + return "head"; + } + if (el === document) { + return "document"; + } + var parent = el.parentNode; + if ((! parent) || parent == el) { + console.warn("elementLocation(", el, ") has null parent"); + throw new Error("No locatable parent found"); + } + var parentLocation = elementLocation(parent); + var children = parent.childNodes; + var _len = children.length; + var index = 0; + for (var i=0; i<_len; i++) { + if (children[i] == el) { + break; + } + if (children[i].nodeType == document.ELEMENT_NODE) { + if (children[i].className.indexOf("togetherjs") != -1) { + // Don't count our UI + continue; + } + // Don't count text or comments + index++; + } + } + return parentLocation + ":nth-child(" + (index+1) + ")"; + }; + + elementFinder.CannotFind = util.Class({ + constructor: function CannotFind(location, reason, context) { + this.prefix = ""; + this.location = location; + this.reason = reason; + this.context = context; + }, + toString: function () { + var loc; + try { + loc = elementFinder.elementLocation(this.context); + } catch (e) { + loc = this.context; + } + return ( + "[CannotFind " + this.prefix + + "(" + this.location + "): " + + this.reason + " in " + + loc + "]"); + } + }); + + elementFinder.findElement = function findElement(loc, container) { + // FIXME: should this all just be done with document.querySelector()? + // But no! We can't ignore togetherjs elements with querySelector. + // But maybe! We *could* make togetherjs elements less obtrusive? + container = container || document; + var el, rest; + if (loc === "body") { + return document.body; + } else if (loc === "head") { + return document.head; + } else if (loc === "document") { + return document; + } else if (loc.indexOf("body") === 0) { + el = document.body; + try { + return findElement(loc.substr(("body").length), el); + } catch (e) { + if (e instanceof elementFinder.CannotFind) { + e.prefix = "body" + e.prefix; + } + throw e; + } + } else if (loc.indexOf("head") === 0) { + el = document.head; + try { + return findElement(loc.substr(("head").length), el); + } catch (e) { + if (e instanceof elementFinder.CannotFind) { + e.prefix = "head" + e.prefix; + } + throw e; + } + } else if (loc.indexOf("#") === 0) { + var id; + loc = loc.substr(1); + if (loc.indexOf(":") === -1) { + id = loc; + rest = ""; + } else { + id = loc.substr(0, loc.indexOf(":")); + rest = loc.substr(loc.indexOf(":")); + } + el = document.getElementById(id); + if (! el) { + throw elementFinder.CannotFind("#" + id, "No element by that id", container); + } + if (rest) { + try { + return findElement(rest, el); + } catch (e) { + if (e instanceof elementFinder.CannotFind) { + e.prefix = "#" + id + e.prefix; + } + throw e; + } + } else { + return el; + } + } else if (loc.indexOf(":nth-child(") === 0) { + loc = loc.substr((":nth-child(").length); + if (loc.indexOf(")") == -1) { + throw "Invalid location, missing ): " + loc; + } + var num = loc.substr(0, loc.indexOf(")")); + num = parseInt(num, 10); + var count = num; + loc = loc.substr(loc.indexOf(")") + 1); + var children = container.childNodes; + el = null; + for (var i=0; i height) { + return false; + } + last = el; + }); + if ((! children.length) || (! last)) { + // There are no children, or only inapplicable children + return { + location: elementFinder.elementLocation(start[0]), + offset: height - start.offset().top, + absoluteTop: height, + documentHeight: $(document).height() + }; + } + return search(last, height); + } + return search($(document.body), height); + }; + + elementFinder.pixelForPosition = function (position) { + /* Inverse of elementFinder.elementByPixel */ + if (position.location == "body") { + return position.offset; + } + var el; + try { + el = elementFinder.findElement(position.location); + } catch (e) { + if (e instanceof elementFinder.CannotFind && position.absoluteTop) { + // We don't trust absoluteTop to be quite right locally, so we adjust + // for the total document height differences: + var percent = position.absoluteTop / position.documentHeight; + return $(document).height() * percent; + } + throw e; + } + var top = $(el).offset().top; + // FIXME: maybe here we should test for sanity, like if an element is + // hidden. We can use position.absoluteTop to get a sense of where the + // element roughly should be. If the sanity check failed we'd use + // absoluteTop + return top + position.offset; + }; + + return elementFinder; + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* Loading this module will cause, when TogetherJS is active, the + session object to emit visibility-change with a `hidden` argument + whenever the visibility changes, on browsers where we can detect + it. + */ + +define('visibilityApi',["util", "session"], function (util, session) { + var visibilityApi = util.Module("visibilityApi"); + var hidden; + var visibilityChange; + if (document.hidden !== undefined) { // Opera 12.10 and Firefox 18 and later support + hidden = "hidden"; + visibilityChange = "visibilitychange"; + } else if (document.mozHidden !== undefined) { + hidden = "mozHidden"; + visibilityChange = "mozvisibilitychange"; + } else if (document.msHidden !== undefined) { + hidden = "msHidden"; + visibilityChange = "msvisibilitychange"; + } else if (document.webkitHidden !== undefined) { + hidden = "webkitHidden"; + visibilityChange = "webkitvisibilitychange"; + } + + session.on("start", function () { + document.addEventListener(visibilityChange, change, false); + }); + + session.on("close", function () { + document.removeEventListener(visibilityChange, change, false); + }); + + function change() { + session.emit("visibility-change", document[hidden]); + } + + visibilityApi.hidden = function () { + return document[hidden]; + }; + + return visibilityApi; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('ui',["require", "jquery", "util", "session", "templates", "templating", "linkify", "peers", "windowing", "tinycolor", "elementFinder", "visibilityApi"], function (require, $, util, session, templates, templating, linkify, peers, windowing, tinycolor, elementFinder, visibilityApi) { + var ui = util.Module('ui'); + var assert = util.assert; + var AssertionError = util.AssertionError; + var chat; + var $window = $(window); + // This is also in togetherjs.less, as @button-height: + var BUTTON_HEIGHT = 60 + 1; // 60 is button height, 1 is border + // chat TextArea + var TEXTAREA_LINE_HEIGHT = 20; // in pixels + var TEXTAREA_MAX_LINES = 5; + // This is also in togetherjs.less, under .togetherjs-animated + var ANIMATION_DURATION = 1000; + // Time the new user window sticks around until it fades away: + var NEW_USER_FADE_TIMEOUT = 5000; + // This is set when an animation will keep the UI from being ready + // (until this time): + var finishedAt = null; + // Time in milliseconds for the dock to animate out: + var DOCK_ANIMATION_TIME = 300; + // If two chat messages come from the same person in this time + // (milliseconds) then they are collapsed into one message: + var COLLAPSE_MESSAGE_LIMIT = 5000; + + var COLORS = [ + "#8A2BE2", "#7FFF00", "#DC143C", "#00FFFF", "#8FBC8F", "#FF8C00", "#FF00FF", + "#FFD700", "#F08080", "#90EE90", "#FF6347"]; + + // This would be a circular import, but we just need the chat module sometime + // after everything is loaded, and this is sure to complete by that time: + require(["chat"], function (c) { + chat = c; + }); + + /* Displays some toggleable element; toggleable elements have a + data-toggles attribute that indicates what other elements should + be hidden when this element is shown. */ + ui.displayToggle = function (el) { + el = $(el); + assert(el.length, "No element", arguments[0]); + var other = $(el.attr("data-toggles")); + assert(other.length, "Cannot toggle", el[0], "selector", other.selector); + other.hide(); + el.show(); + }; + + function panelPosition() { + var iface = $("#togetherjs-dock"); + if (iface.hasClass("togetherjs-dock-right")) { + return "right"; + } else if (iface.hasClass("togetherjs-dock-left")) { + return "left"; + } else if (iface.hasClass("togetherjs-dock-bottom")) { + return "bottom"; + } else { + throw new AssertionError("#togetherjs-dock doesn't have positioning class"); + } + } + + ui.container = null; + + // This is used for some signalling when ui.prepareUI and/or + // ui.activateUI is called before the DOM is fully loaded: + var deferringPrepareUI = null; + + function deferForContainer(func) { + /* Defers any calls to func() until after ui.container is set + Function cannot have a return value (as sometimes the call will + become async). Use like: + + method: deferForContainer(function (args) {...}) + */ + return function () { + if (ui.container) { + func.apply(this, arguments); + } + var self = this; + var args = Array.prototype.slice.call(arguments); + session.once("ui-ready", function () { + func.apply(self, args); + }); + }; + } + + // This is called before activateUI; it doesn't bind anything, but does display + // the dock + // FIXME: because this module has lots of requirements we can't do + // this before those requirements are loaded. Maybe worth splitting + // this out? OTOH, in production we should have all the files + // combined so there's not much problem loading those modules. + ui.prepareUI = function () { + if (! (document.readyState == "complete" || document.readyState == "interactive")) { + // Too soon! Wait a sec... + deferringPrepareUI = "deferring"; + document.addEventListener("DOMContentLoaded", function () { + var d = deferringPrepareUI; + deferringPrepareUI = null; + ui.prepareUI(); + // This happens when ui.activateUI is called before the document has been + // loaded: + if (d == "activate") { + ui.activateUI(); + } + }); + return; + } + var container = ui.container = $(templates("interface")); + assert(container.length); + $("body").append(container); + fixupAvatars(container); + if (session.firstRun && TogetherJS.startTarget) { + // Time at which the UI will be fully ready: + // (We have to do this because the offset won't be quite right + // until the animation finishes - attempts to calculate the + // offset without taking into account CSS transforms have so far + // failed.) + var timeoutSeconds = DOCK_ANIMATION_TIME / 1000; + finishedAt = Date.now() + DOCK_ANIMATION_TIME + 50; + setTimeout(function () { + finishedAt = Date.now() + DOCK_ANIMATION_TIME + 40; + var iface = container.find("#togetherjs-dock"); + var start = iface.offset(); + var pos = $(TogetherJS.startTarget).offset(); + pos.top = Math.floor(pos.top - start.top); + pos.left = Math.floor(pos.left - start.left); + var translate = "translate(" + pos.left + "px, " + pos.top + "px)"; + iface.css({ + MozTransform: translate, + WebkitTransform: translate, + transform: translate, + opacity: "0.0" + }); + setTimeout(function () { + // We keep recalculating because the setTimeout times aren't always so accurate: + finishedAt = Date.now() + DOCK_ANIMATION_TIME + 20; + var transition = "transform " + timeoutSeconds + "s ease-out, "; + transition += "opacity " + timeoutSeconds + "s ease-out"; + iface.css({ + opacity: "1.0", + MozTransition: "-moz-" + transition, + MozTransform: "translate(0, 0)", + WebkitTransition: "-webkit-" + transition, + WebkitTransform: "translate(0, 0)", + transition: transition, + transform: "translate(0, 0)" + }); + setTimeout(function () { + finishedAt = null; + iface.attr("style", ""); + }, 510); + }, 5); + }, 5); + } + if (TogetherJS.startTarget) { + var el = $(TogetherJS.startTarget); + var text = el.text().toLowerCase().replace(/\s+/g, " "); + text = text.replace(/^\s*/, "").replace(/\s*$/, ""); + if (text == "start togetherjs") { + el.attr("data-end-togetherjs-html", "End TogetherJS"); + } + if (el.attr("data-end-togetherjs-html")) { + el.attr("data-start-togetherjs-html", el.html()); + el.html(el.attr("data-end-togetherjs-html")); + } + el.addClass("togetherjs-started"); + } + ui.container.find(".togetherjs-window > header, .togetherjs-modal > header").each(function () { + $(this).append($('')); + }); + + TogetherJS.config.track("disableWebRTC", function (hide, previous) { + if (hide && ! previous) { + ui.container.find("#togetherjs-audio-button").hide(); + adjustDockSize(-1); + } else if ((! hide) && previous) { + ui.container.find("#togetherjs-audio-button").show(); + adjustDockSize(1); + } + }); + + // pgbovine -- disable the user profile and "Invite a friend" link dialogs + ui.container.find("#togetherjs-profile-button").hide(); + ui.container.find("#togetherjs-share-button").hide(); + adjustDockSize(-2); + + }; + + // After prepareUI, this actually makes the interface live. We have + // to do this later because we call prepareUI when many components + // aren't initialized, so we don't even want the user to be able to + // interact with the interface. But activateUI is called once + // everything is loaded and ready for interaction. + ui.activateUI = function () { + if (deferringPrepareUI) { + console.warn("ui.activateUI called before document is ready; waiting..."); + deferringPrepareUI = "activate"; + return; + } + if (! ui.container) { + ui.prepareUI(); + } + var container = ui.container; + + //create the overlay + if($.browser.mobile) { + // $("body").append( "\x3cdiv class='overlay' style='position: absolute; top: 0; left: 0; background-color: rgba(0,0,0,0); width: 120%; height: 100%; z-index: 1000; margin: -10px'>\x3c/div>" ); + } + + // The share link: + ui.prepareShareLink(container); + container.find("input.togetherjs-share-link").on("keydown", function (event) { + if (event.which == 27) { + windowing.hide("#togetherjs-share"); + return false; + } + return undefined; + }); + session.on("shareId", updateShareLink); + + // The chat input element: + var input = container.find("#togetherjs-chat-input"); + input.bind("keydown", function (event) { + if (event.which == 13 && !event.shiftKey) { // Enter without Shift pressed + submitChat(); + return false; + } + if (event.which == 27) { // Escape + windowing.hide("#togetherjs-chat"); + return false; + } + }); + + function submitChat() { + var val = input.val(); + if ($.trim(val)) { + input.val(""); + // triggering the event manually to avoid the addition of newline character to the textarea: + input.trigger("input").trigger("propertychange"); + chat.submit(val); + } + } + // auto-resize textarea: + input.on("input propertychange", function () { + var $this = $(this); + var actualHeight = $this.height(); + // reset the height of textarea to remove trailing empty space (used for shrinking): + $this.height(TEXTAREA_LINE_HEIGHT); + this.scrollTop = 0; + // scroll to bottom: + this.scrollTop = 9999; + var newHeight = this.scrollTop + $this.height(); + var maxHeight = TEXTAREA_MAX_LINES * TEXTAREA_LINE_HEIGHT; + if (newHeight > maxHeight) { + newHeight = maxHeight; + this.style.overflowY = "scroll"; + } else { + this.style.overflowY = "hidden"; + } + this.style.height = newHeight + "px"; + var diff = newHeight - actualHeight; + $("#togetherjs-chat-input-box").height($("#togetherjs-chat-input-box").height() + diff); + $("#togetherjs-chat-messages").height($("#togetherjs-chat-messages").height() - diff); + return false; + }); + + util.testExpose({submitChat: submitChat}); + + // Moving the window: + // FIXME: this should probably be stickier, and not just move the window around + // so abruptly + var anchor = container.find("#togetherjs-dock-anchor"); + assert(anchor.length); + // FIXME: This is in place to temporarily disable dock dragging: + anchor = container.find("#togetherjs-dock-anchor-disabled"); + anchor.mousedown(function (event) { + var iface = $("#togetherjs-dock"); + // FIXME: switch to .offset() and pageX/Y + var startPos = panelPosition(); + function selectoff() { + return false; + } + function mousemove(event2) { + var fromRight = $window.width() + window.pageXOffset - event2.pageX; + var fromLeft = event2.pageX - window.pageXOffset; + var fromBottom = $window.height() + window.pageYOffset - event2.pageY; + // FIXME: this is to temporarily disable the bottom view: + fromBottom = 10000; + + var pos; + if (fromLeft < fromRight && fromLeft < fromBottom) { + pos = "left"; + } else if (fromRight < fromLeft && fromRight < fromBottom) { + pos = "right"; + } else { + pos = "bottom"; + } + iface.removeClass("togetherjs-dock-left"); + iface.removeClass("togetherjs-dock-right"); + iface.removeClass("togetherjs-dock-bottom"); + iface.addClass("togetherjs-dock-" + pos); + if (startPos && pos != startPos) { + windowing.hide(); + startPos = null; + } + } + $(document).bind("mousemove", mousemove); + // If you don't turn selection off it will still select text, and show a + // text selection cursor: + $(document).bind("selectstart", selectoff); + // FIXME: it seems like sometimes we lose the mouseup event, and it's as though + // the mouse is stuck down: + $(document).one("mouseup", function () { + $(document).unbind("mousemove", mousemove); + $(document).unbind("selectstart", selectoff); + }); + return false; + }); + + function openDock() { + $('.togetherjs-window').animate({ + opacity: 1 + }); + $('#togetherjs-dock-participants').animate({ + opacity: 1 + }); + $('#togetherjs-dock #togetherjs-buttons').animate({ + opacity: 1 + }); + + //for iphone + if($(window).width() < 480) { + $('.togetherjs-dock-right').animate({ + width: "204px" + }, { + duration:60, easing:"linear" + }); + } + + //for ipad + else { + $('.togetherjs-dock-right').animate({ + width: "27%" + }, { + duration:60, easing:"linear" + }); + } + + + // add bg overlay + // $("body").append( "\x3cdiv class='overlay' style='position: absolute; top: 0; left: -2px; background-color: rgba(0,0,0,0.5); width: 200%; height: 400%; z-index: 1000; margin: 0px;'>\x3c/div>" ); + + //disable vertical scrolling + // $("body").css({ + // "position": "fixed", + // top: 0, + // left: 0 + // }); + + //replace the anchor icon + var src = "/togetherjs/images/togetherjs-logo-close.png"; + $("#togetherjs-dock-anchor #togetherjs-dock-anchor-horizontal img").attr("src", src); + } + + function closeDock() { + //enable vertical scrolling + $("body").css({ + "position": "", + top: "", + left: "" + }); + + //replace the anchor icon + var src = "/togetherjs/images/togetherjs-logo-open.png"; + $("#togetherjs-dock-anchor #togetherjs-dock-anchor-horizontal img").attr("src", src); + + $('.togetherjs-window').animate({ + opacity: 0 + }); + $('#togetherjs-dock-participants').animate({ + opacity: 0 + }); + $('#togetherjs-dock #togetherjs-buttons').animate({ + opacity: 0 + }); + $('.togetherjs-dock-right').animate({ + width: "40px" + }, { + duration:60, easing:"linear" + }); + + // remove bg overlay + //$(".overlay").remove(); + } + + // Setting the anchor button + dock mobile actions + if($.browser.mobile) { + + // toggle the audio button + $("#togetherjs-audio-button").click(function () { + windowing.toggle("#togetherjs-rtc-not-supported"); + }); + + // toggle the profile button + $("#togetherjs-profile-button").click(function () { + windowing.toggle("#togetherjs-menu-window"); + }); + + // $("body").append( "\x3cdiv class='overlay' style='position: absolute; top: 0; left: -2px; background-color: rgba(0,0,0,0.5); width: 200%; height: 400%; z-index: 1000; margin: 0px'>\x3c/div>" ); + + //disable vertical scrolling + // $("body").css({ + // "position": "fixed", + // top: 0, + // left: 0 + // }); + + //replace the anchor icon + var src = "/togetherjs/images/togetherjs-logo-close.png"; + $("#togetherjs-dock-anchor #togetherjs-dock-anchor-horizontal img").attr("src", src); + + $("#togetherjs-dock-anchor").toggle(function() { + closeDock(); + },function(){ + openDock(); + }); + } + + $("#togetherjs-share-button").click(function () { + windowing.toggle("#togetherjs-share"); + }); + + $("#togetherjs-profile-button").click(function (event) { + if ($.browser.mobile) { + windowing.show("#togetherjs-menu-window"); + return false; + } + toggleMenu(); + event.stopPropagation(); + return false; + }); + + $("#togetherjs-menu-feedback, #togetherjs-menu-feedback-button").click(function(){ + windowing.hide(); + hideMenu(); + windowing.show("#togetherjs-feedback-form"); + }); + + $("#togetherjs-menu-help, #togetherjs-menu-help-button").click(function () { + windowing.hide(); + hideMenu(); + require(["walkthrough"], function (walkthrough) { + windowing.hide(); + walkthrough.start(false); + }); + }); + + $("#togetherjs-menu-update-name").click(function () { + var input = $("#togetherjs-menu .togetherjs-self-name"); + input.css({ + width: $("#togetherjs-menu").width() - 32 + "px" + }); + ui.displayToggle("#togetherjs-menu .togetherjs-self-name"); + $("#togetherjs-menu .togetherjs-self-name").focus(); + }); + + $("#togetherjs-menu-update-name-button").click(function () { + windowing.show("#togetherjs-edit-name-window"); + $("#togetherjs-edit-name-window input").focus(); + }); + + $("#togetherjs-menu .togetherjs-self-name").bind("keyup change", function (event) { + console.log("alrighty", event); + if (event.which == 13) { + ui.displayToggle("#togetherjs-self-name-display"); + return; + } + var val = $("#togetherjs-menu .togetherjs-self-name").val(); + console.log("values!!", val); + if (val) { + peers.Self.update({name: val}); + } + }); + + $("#togetherjs-menu-update-avatar, #togetherjs-menu-update-avatar-button").click(function () { + hideMenu(); + windowing.show("#togetherjs-avatar-edit"); + }); + + $("#togetherjs-menu-end, #togetherjs-menu-end-button").click(function () { + hideMenu(); + windowing.show("#togetherjs-confirm-end"); + }); + + $("#togetherjs-end-session").click(function () { + session.close(); + //$(".overlay").remove(); + + }); + + $("#togetherjs-menu-update-color").click(function () { + var picker = $("#togetherjs-pick-color"); + if (picker.is(":visible")) { + picker.hide(); + return; + } + picker.show(); + bindPicker(); + picker.find(".togetherjs-swatch-active").removeClass("togetherjs-swatch-active"); + picker.find(".togetherjs-swatch[data-color=\"" + peers.Self.color + "\"]").addClass("togetherjs-swatch-active"); + }); + + $("#togetherjs-pick-color").click(".togetherjs-swatch", function (event) { + var swatch = $(event.target); + var color = swatch.attr("data-color"); + peers.Self.update({ + color: color + }); + event.stopPropagation(); + return false; + }); + + $("#togetherjs-pick-color").click(function (event) { + $("#togetherjs-pick-color").hide(); + event.stopPropagation(); + return false; + }); + + COLORS.forEach(function (color) { + var el = templating.sub("swatch"); + el.attr("data-color", color); + var darkened = tinycolor.darken(color); + el.css({ + backgroundColor: color, + borderColor: darkened + }); + $("#togetherjs-pick-color").append(el); + }); + + $("#togetherjs-chat-button").click(function () { + windowing.toggle("#togetherjs-chat"); + }); + + session.on("display-window", function (id, element) { + if (id == "togetherjs-chat") { + if (! $.browser.mobile) { + $("#togetherjs-chat-input").focus(); + } + } else if (id == "togetherjs-share") { + var link = element.find("input.togetherjs-share-link"); + if (link.is(":visible")) { + link.focus().select(); + } + } + }); + + container.find("#togetherjs-chat-notifier").click(function (event) { + if ($(event.target).is("a") || container.is(".togetherjs-close")) { + return; + } + windowing.show("#togetherjs-chat"); + }); + + // FIXME: Don't think this makes sense + $(".togetherjs header.togetherjs-title").each(function (index, item) { + var button = $(''); + button.click(function (event) { + var window = button.closest(".togetherjs-window"); + windowing.hide(window); + }); + $(item).append(button); + }); + + $("#togetherjs-avatar-done").click(function () { + ui.displayToggle("#togetherjs-no-avatar-edit"); + }); + + $("#togetherjs-self-color").css({backgroundColor: peers.Self.color}); + + var avatar = peers.Self.avatar; + if (avatar) { + $("#togetherjs-self-avatar").attr("src", avatar); + } + + var starterButton = $("#togetherjs-starter button"); + starterButton.click(function () { + windowing.show("#togetherjs-about"); + }).addClass("togetherjs-running"); + if (starterButton.text() == "Start TogetherJS") { + starterButton.attr("data-start-text", starterButton.text()); + starterButton.text("End TogetherJS Session"); + } + + ui.activateAvatarEdit(container, { + onSave: function () { + windowing.hide("#togetherjs-avatar-edit"); + } + }); + + TogetherJS.config.track("inviteFromRoom", function (inviter, previous) { + if (inviter) { + container.find("#togetherjs-invite").show(); + } else { + container.find("#togetherjs-invite").hide(); + } + }); + + container.find("#togetherjs-menu-refresh-invite").click(refreshInvite); + container.find("#togetherjs-menu-invite-anyone").click(function () { + invite(null); + }); + + // The following lines should be at the end of this function + // (new code goes above) + session.emit("new-element", ui.container); + + if (finishedAt && finishedAt > Date.now()) { + setTimeout(function () { + finishedAt = null; + session.emit("ui-ready", ui); + }, finishedAt - Date.now()); + } else { + session.emit("ui-ready", ui); + } + + }; // End ui.activateUI() + + ui.activateAvatarEdit = function (container, options) { + options = options || {}; + var pendingImage = null; + + container.find(".togetherjs-avatar-save").prop("disabled", true); + + container.find(".togetherjs-avatar-save").click(function () { + if (pendingImage) { + peers.Self.update({avatar: pendingImage}); + container.find(".togetherjs-avatar-save").prop("disabled", true); + if (options.onSave) { + options.onSave(); + } + } + }); + + container.find(".togetherjs-upload-avatar").on("change", function () { + util.readFileImage(this).then(function (url) { + sizeDownImage(url).then(function (smallUrl) { + pendingImage = smallUrl; + container.find(".togetherjs-avatar-preview").css({ + backgroundImage: 'url(' + pendingImage + ')' + }); + container.find(".togetherjs-avatar-save").prop("disabled", false); + if (options.onPending) { + options.onPending(); + } + }); + }); + }); + + }; + + function sizeDownImage(imageUrl) { + return util.Deferred(function (def) { + var $canvas = $(""); + $canvas[0].height = session.AVATAR_SIZE; + $canvas[0].width = session.AVATAR_SIZE; + var context = $canvas[0].getContext("2d"); + var img = new Image(); + img.src = imageUrl; + // Sometimes the DOM updates immediately to call + // naturalWidth/etc, and sometimes it doesn't; using setTimeout + // gives it a chance to catch up + setTimeout(function () { + var width = img.naturalWidth || img.width; + var height = img.naturalHeight || img.height; + width = width * (session.AVATAR_SIZE / height); + height = session.AVATAR_SIZE; + context.drawImage(img, 0, 0, width, height); + def.resolve($canvas[0].toDataURL("image/png")); + }); + }); + } + + function fixupAvatars(container) { + /* All
    elements need an element inside, + so we add that element here */ + container.find(".togetherjs-person").each(function () { + var $this = $(this); + var inner = $this.find(".togetherjs-person-avatar-swatch"); + if (! inner.length) { + $this.append('
    '); + } + }); + } + + ui.prepareShareLink = function (container) { + container.find("input.togetherjs-share-link").click(function () { + $(this).select(); + }).change(function () { + updateShareLink(); + }); + container.find("a.togetherjs-share-link").click(function () { + // FIXME: this is currently opening up Bluetooth, not sharing a link + if (false && window.MozActivity) { + var activity = new MozActivity({ + name: "share", + data: { + type: "url", + url: $(this).attr("href") + } + }); + } + // FIXME: should show some help if you actually try to follow the link + // like this, instead of simply suppressing it + return false; + }); + updateShareLink(); + }; + + // Menu + + function showMenu(event) { + var el = $("#togetherjs-menu"); + assert(el.length); + el.show(); + bindMenu(); + $(document).bind("click", maybeHideMenu); + } + + function bindMenu() { + var el = $("#togetherjs-menu:visible"); + if (el.length) { + var bound = $("#togetherjs-profile-button"); + var boundOffset = bound.offset(); + el.css({ + top: boundOffset.top + bound.height() - $window.scrollTop() + "px", + left: (boundOffset.left + bound.width() - 10 - el.width() - $window.scrollLeft()) + "px" + }); + } + } + + function bindPicker() { + var picker = $("#togetherjs-pick-color:visible"); + if (picker.length) { + var menu = $("#togetherjs-menu-update-color"); + var menuOffset = menu.offset(); + picker.css({ + top: menuOffset.top + menu.height(), + left: menuOffset.left + }); + } + } + + session.on("resize", function () { + bindMenu(); + bindPicker(); + }); + + function toggleMenu() { + if ($("#togetherjs-menu").is(":visible")) { + hideMenu(); + } else { + showMenu(); + } + } + + function hideMenu() { + var el = $("#togetherjs-menu"); + el.hide(); + $(document).unbind("click", maybeHideMenu); + ui.displayToggle("#togetherjs-self-name-display"); + $("#togetherjs-pick-color").hide(); + } + + function maybeHideMenu(event) { + var t = event.target; + while (t) { + if (t.id == "togetherjs-menu") { + // Click inside the menu, ignore this + return; + } + t = t.parentNode; + } + hideMenu(); + } + + function adjustDockSize(buttons) { + /* Add or remove spots from the dock; positive number to + add button(s), negative number to remove button(s) + */ + assert(typeof buttons == "number"); + assert(buttons && Math.floor(buttons) == buttons); + var iface = $("#togetherjs-dock"); + var newHeight = iface.height() + (BUTTON_HEIGHT * buttons); + // pgbovine - set the lower limit to 1 instead of 3 ... + assert(newHeight >= BUTTON_HEIGHT * 1, "Height went too low (", newHeight, + "), should never be less than 2 buttons high (", BUTTON_HEIGHT * 1, ")"); + //assert(newHeight >= BUTTON_HEIGHT * 3, "Height went too low (", newHeight, + // "), should never be less than 3 buttons high (", BUTTON_HEIGHT * 3, ")"); + iface.css({ + height: newHeight + "px" + }); + } + + // Misc + + function updateShareLink() { + var input = $("input.togetherjs-share-link"); + var link = $("a.togetherjs-share-link"); + var display = $("#togetherjs-session-id"); + if (! session.shareId) { + input.val(""); + link.attr("href", "#"); + display.text("(none)"); + } else { + input.val(session.shareUrl()); + link.attr("href", session.shareUrl()); + display.text(session.shareId); + } + } + + session.on("close", function () { + + if($.browser.mobile) { + // remove bg overlay + //$(".overlay").remove(); + + //after hitting End, reset window draggin + $("body").css({ + "position": "", + top: "", + left: "" + }); + + } + + if (ui.container) { + ui.container.remove(); + ui.container = null; + } + // Clear out any other spurious elements: + $(".togetherjs").remove(); + var starterButton = $("#togetherjs-starter button"); + starterButton.removeClass("togetherjs-running"); + if (starterButton.attr("data-start-text")) { + starterButton.text(starterButton.attr("data-start-text")); + starterButton.attr("data-start-text", ""); + } + if (TogetherJS.startTarget) { + var el = $(TogetherJS.startTarget); + if (el.attr("data-start-togetherjs-html")) { + el.html(el.attr("data-start-togetherjs-html")); + } + el.removeClass("togetherjs-started"); + } + }); + + ui.chat = { + text: function (attrs) { + assert(typeof attrs.text == "string"); + assert(attrs.peer); + assert(attrs.messageId); + var date = attrs.date || Date.now(); + var lastEl = ui.container.find("#togetherjs-chat .togetherjs-chat-message"); + if (lastEl.length) { + lastEl = $(lastEl[lastEl.length-1]); + } + var lastDate = null; + if (lastEl) { + lastDate = parseInt(lastEl.attr("data-date"), 10); + } + if (lastEl && lastEl.attr("data-person") == attrs.peer.id && + lastDate && date < lastDate + COLLAPSE_MESSAGE_LIMIT) { + lastEl.attr("data-date", date); + var content = lastEl.find(".togetherjs-chat-content"); + assert(content.length); + attrs.text = content.text() + "\n" + attrs.text; + attrs.messageId = lastEl.attr("data-message-id"); + lastEl.remove(); + } + var el = templating.sub("chat-message", { + peer: attrs.peer, + content: attrs.text, + date: date + }); + linkify(el.find(".togetherjs-chat-content")); + el.attr("data-person", attrs.peer.id) + .attr("data-date", date) + .attr("data-message-id", attrs.messageId); + ui.chat.add(el, attrs.messageId, attrs.notify); + }, + + joinedSession: function (attrs) { + assert(attrs.peer); + var date = attrs.date || Date.now(); + var el = templating.sub("chat-joined", { + peer: attrs.peer, + date: date + }); + // FIXME: should bind the notification to the dock location + ui.chat.add(el, attrs.peer.className("join-message-"), 4000); + }, + + leftSession: function (attrs) { + assert(attrs.peer); + var date = attrs.date || Date.now(); + var el = templating.sub("chat-left", { + peer: attrs.peer, + date: date, + declinedJoin: attrs.declinedJoin + }); + // FIXME: should bind the notification to the dock location + ui.chat.add(el, attrs.peer.className("join-message-"), 4000); + }, + + system: function (attrs) { + assert(! attrs.peer); + assert(typeof attrs.text == "string"); + var date = attrs.date || Date.now(); + var el = templating.sub("chat-system", { + content: attrs.text, + date: date + }); + ui.chat.add(el, undefined, true); + }, + + clear: deferForContainer(function () { + var container = ui.container.find("#togetherjs-chat-messages"); + container.empty(); + }), + + urlChange: function (attrs) { + assert(attrs.peer); + assert(typeof attrs.url == "string"); + assert(typeof attrs.sameUrl == "boolean"); + var messageId = attrs.peer.className("url-change-"); + // FIXME: duplicating functionality in .add(): + var realId = "togetherjs-chat-" + messageId; + var date = attrs.date || Date.now(); + var title; + // FIXME: strip off common domain from msg.url? E.g., if I'm on + // http://example.com/foobar, and someone goes to http://example.com/baz then + // show only /baz + // FIXME: truncate long titles + if (attrs.title) { + title = attrs.title + " (" + attrs.url + ")"; + } else { + title = attrs.url; + } + var el = templating.sub("url-change", { + peer: attrs.peer, + date: date, + href: attrs.url, + title: title, + sameUrl: attrs.sameUrl + }); + el.find(".togetherjs-nudge").click(function () { + attrs.peer.nudge(); + return false; + }); + el.find(".togetherjs-follow").click(function () { + var url = attrs.peer.url; + if (attrs.peer.urlHash) { + url += attrs.peer.urlHash; + } + location.href = url; + }); + var notify = ! attrs.sameUrl; + if (attrs.sameUrl && ! $("#" + realId).length) { + // Don't bother showing a same-url notification, if no previous notification + // had been shown + return; + } + ui.chat.add(el, messageId, notify); + }, + + invite: function (attrs) { + assert(attrs.peer); + assert(typeof attrs.url == "string"); + var messageId = attrs.peer.className("invite-"); + var date = attrs.date || Date.now(); + var hrefTitle = attrs.url.replace(/\#?&togetherjs=.*/, "").replace(/^\w+:\/\//, ""); + var el = templating.sub("invite", { + peer: attrs.peer, + date: date, + href: attrs.url, + hrefTitle: hrefTitle, + forEveryone: attrs.forEveryone + }); + if (attrs.forEveryone) { + el.find("a").click(function () { + // FIXME: hacky way to do this: + chat.submit("Followed link to " + attrs.url); + }); + } + ui.chat.add(el, messageId, true); + }, + + hideTimeout: null, + + add: deferForContainer(function (el, id, notify) { + if (id) { + el.attr("id", "togetherjs-chat-" + util.safeClassName(id)); + } + var container = ui.container.find("#togetherjs-chat-messages"); + assert(container.length); + var popup = ui.container.find("#togetherjs-chat-notifier"); + container.append(el); + ui.chat.scroll(); + var doNotify = !! notify; + var section = popup.find("#togetherjs-chat-notifier-message"); + if (notify && visibilityApi.hidden()) { + ui.container.find("#togetherjs-notification")[0].play(); + } + if (id && section.data("message-id") == id) { + doNotify = true; + } + if (container.is(":visible")) { + doNotify = false; + } + if (doNotify) { + section.empty(); + section.append(el.clone(true, true)); + if (section.data("message-id") != id) { + section.data("message-id", id || ""); + windowing.show(popup); + } else if (! popup.is(":visible")) { + windowing.show(popup); + } + if (typeof notify == "number") { + // This is the amount of time we're supposed to notify + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = null; + } + this.hideTimeout = setTimeout((function () { + windowing.hide(popup); + this.hideTimeout = null; + }).bind(this), notify); + } + } + }), + + scroll: deferForContainer(function () { + var container = ui.container.find("#togetherjs-chat-messages")[0]; + container.scrollTop = container.scrollHeight; + }) + + }; + + session.on("display-window", function (id, win) { + if (id == "togetherjs-chat") { + ui.chat.scroll(); + windowing.hide("#togetherjs-chat-notifier"); + } + }); + + /* This class is bound to peers.Peer instances as peer.view. + The .update() method is regularly called by peer objects when info changes. */ + ui.PeerView = util.Class({ + + constructor: function (peer) { + assert(peer.isSelf !== undefined, "PeerView instantiated with non-Peer object"); + this.peer = peer; + this.dockClick = this.dockClick.bind(this); + }, + + /* Takes an element and sets any person-related attributes on the element + Different from updates, which use the class names we set here: */ + setElement: function (el) { + var count = 0; + var classes = ["togetherjs-person", "togetherjs-person-status", + "togetherjs-person-name", "togetherjs-person-name-abbrev", + "togetherjs-person-bgcolor", "togetherjs-person-swatch", + "togetherjs-person-status", "togetherjs-person-role", + "togetherjs-person-url", "togetherjs-person-url-title", + "togetherjs-person-bordercolor"]; + classes.forEach(function (cls) { + var els = el.find("." + cls); + els.addClass(this.peer.className(cls + "-")); + count += els.length; + }, this); + if (! count) { + console.warn("setElement(", el, ") doesn't contain any person items"); + } + this.updateDisplay(el); + }, + + updateDisplay: deferForContainer(function (container) { + container = container || ui.container; + var abbrev = this.peer.name; + if (this.peer.isSelf) { + abbrev = "me"; + } + container.find("." + this.peer.className("togetherjs-person-name-")).text(this.peer.name || ""); + container.find("." + this.peer.className("togetherjs-person-name-abbrev-")).text(abbrev); + var avatarEl = container.find("." + this.peer.className("togetherjs-person-")); + if (this.peer.avatar) { + util.assertValidUrl(this.peer.avatar); + avatarEl.css({ + backgroundImage: "url(" + this.peer.avatar + ")" + }); + } + if (this.peer.idle == "inactive") { + avatarEl.addClass("togetherjs-person-inactive"); + } else { + avatarEl.removeClass("togetherjs-person-inactive"); + } + avatarEl.attr("title", this.peer.name); + if (this.peer.color) { + avatarEl.css({ + borderColor: this.peer.color + }); + avatarEl.find(".togetherjs-person-avatar-swatch").css({ + borderTopColor: this.peer.color, + borderRightColor: this.peer.color + }); + } + if (this.peer.color) { + var colors = container.find("." + this.peer.className("togetherjs-person-bgcolor-")); + colors.css({ + backgroundColor: this.peer.color + }); + colors = container.find("." + this.peer.className("togetherjs-person-bordercolor-")); + colors.css({ + borderColor: this.peer.color + }); + } + container.find("." + this.peer.className("togetherjs-person-role-")) + .text(this.peer.isCreator ? "Creator" : "Participant"); + var urlName = this.peer.title || ""; + if (this.peer.title) { + urlName += " ("; + } + urlName += util.truncateCommonDomain(this.peer.url, location.href); + if (this.peer.title) { + urlName += ")"; + } + container.find("." + this.peer.className("togetherjs-person-url-title-")) + .text(urlName); + var url = this.peer.url; + if (this.peer.urlHash) { + url += this.peer.urlHash; + } + container.find("." + this.peer.className("togetherjs-person-url-")) + .attr("href", url); + // FIXME: should have richer status: + container.find("." + this.peer.className("togetherjs-person-status-")) + .text(this.peer.idle == "active" ? "Active" : "Inactive"); + if (this.peer.isSelf) { + // FIXME: these could also have consistent/reliable class names: + var selfName = $(".togetherjs-self-name"); + selfName.each((function (index, el) { + el = $(el); + if (el.val() != this.peer.name) { + el.val(this.peer.name); + } + }).bind(this)); + $("#togetherjs-menu-avatar").attr("src", this.peer.avatar); + if (! this.peer.name) { + $("#togetherjs-menu .togetherjs-person-name-self").text(this.peer.defaultName); + } + } + if (this.peer.url != session.currentUrl()) { + container.find("." + this.peer.className("togetherjs-person-")) + .addClass("togetherjs-person-other-url"); + } else { + container.find("." + this.peer.className("togetherjs-person-")) + .removeClass("togetherjs-person-other-url"); + } + if (this.peer.following) { + if (this.followCheckbox) { + this.followCheckbox.prop("checked", true); + } + } else { + if (this.followCheckbox) { + this.followCheckbox.prop("checked", false); + } + } + // FIXME: add some style based on following? + updateChatParticipantList(); + this.updateFollow(); + }), + + update: function () { + if (! this.peer.isSelf) { + if (this.peer.status == "live") { + this.dock(); + } else { + this.undock(); + } + } + this.updateDisplay(); + this.updateUrlDisplay(); + }, + + updateUrlDisplay: function (force) { + var url = this.peer.url; + if ((! url) || (url == this._lastUpdateUrlDisplay && ! force)) { + return; + } + this._lastUpdateUrlDisplay = url; + var sameUrl = url == session.currentUrl(); + ui.chat.urlChange({ + peer: this.peer, + url: this.peer.url, + title: this.peer.title, + sameUrl: sameUrl + }); + }, + + urlNudge: function () { + // FIXME: do something more distinct here + this.updateUrlDisplay(true); + }, + + notifyJoined: function () { + ui.chat.joinedSession({ + peer: this.peer + }); + }, + + // when there are too many participants in the dock, consolidate the participants to one avatar, and on mouseOver, the dock expands down to reveal the rest of the participants + // if there are X users in the session + // then hide the users in the dock + // and shrink the size of the dock + // and if you rollover the dock, it expands and reveals the rest of the participants in the dock + + //if users hit X then show the participant button with the consol + + dock: deferForContainer(function () { + + var numberOfUsers = peers.getAllPeers().length; + + // collapse the Dock if too many users + function CollapsedDock() { + // decrease/reset dock height + $("#togetherjs-dock").css("height", 260); + //replace participant button + $("#togetherjs-dock-participants").replaceWith(""); + // new full participant window created on toggle + $("#togetherjs-participantlist-button").click(function () { + windowing.toggle("#togetherjs-participantlist"); + }); + } + + // FIXME: turned off for now + if( numberOfUsers >= 5 && false) { + CollapsedDock(); + } else { + // reset + + } + + + if (this.dockElement) { + return; + } + this.dockElement = templating.sub("dock-person", { + peer: this.peer + }); + this.dockElement.attr("id", this.peer.className("togetherjs-dock-element-")); + ui.container.find("#togetherjs-dock-participants").append(this.dockElement); + this.dockElement.find(".togetherjs-person").animateDockEntry(); + adjustDockSize(1); + this.detailElement = templating.sub("participant-window", { + peer: this.peer + }); + var followId = this.peer.className("togetherjs-person-status-follow-"); + this.detailElement.find('[for="togetherjs-person-status-follow"]').attr("for", followId); + this.detailElement.find('#togetherjs-person-status-follow').attr("id", followId); + this.detailElement.find(".togetherjs-follow").click(function () { + location.href = $(this).attr("href"); + }); + this.detailElement.find(".togetherjs-nudge").click((function () { + this.peer.nudge(); + }).bind(this)); + this.followCheckbox = this.detailElement.find("#" + followId); + this.followCheckbox.change(function () { + if (! this.checked) { + this.peer.unfollow(); + } + // Following doesn't happen until the window is closed + // FIXME: should we tell the user this? + }); + this.maybeHideDetailWindow = this.maybeHideDetailWindow.bind(this); + session.on("hide-window", this.maybeHideDetailWindow); + ui.container.append(this.detailElement); + this.dockElement.click((function () { + if (this.detailElement.is(":visible")) { + windowing.hide(this.detailElement); + } else { + windowing.show(this.detailElement, {bind: this.dockElement}); + this.scrollTo(); + this.cursor().element.animate({ + opacity:0.3 + }).animate({ + opacity:1 + }).animate({ + opacity:0.3 + }).animate({ + opacity:1 + }); + } + }).bind(this)); + this.updateFollow(); + }), + + undock: function () { + if (! this.dockElement) { + return; + } + this.dockElement.animateDockExit().promise().then((function () { + this.dockElement.remove(); + this.dockElement = null; + this.detailElement.remove(); + this.detailElement = null; + adjustDockSize(-1); + }).bind(this)); + }, + + scrollTo: function () { + if (this.peer.url != session.currentUrl()) { + return; + } + var pos = this.peer.scrollPosition; + if (! pos) { + console.warn("Peer has no scroll position:", this.peer); + return; + } + pos = elementFinder.pixelForPosition(pos); + $("html, body").easeTo(pos); + }, + + updateFollow: function () { + if (! this.peer.url) { + return; + } + if (! this.detailElement) { + return; + } + var same = this.detailElement.find(".togetherjs-same-url"); + var different = this.detailElement.find(".togetherjs-different-url"); + if (this.peer.url == session.currentUrl()) { + same.show(); + different.hide(); + } else { + same.hide(); + different.show(); + } + }, + + maybeHideDetailWindow: function (windows) { + if (this.detailElement && windows[0] && windows[0][0] === this.detailElement[0]) { + if (this.followCheckbox[0].checked) { + this.peer.follow(); + } else { + this.peer.unfollow(); + } + } + }, + + dockClick: function () { + // FIXME: scroll to person + }, + + cursor: function () { + return require("cursor").getClient(this.peer.id); + }, + + destroy: function () { + // FIXME: should I get rid of the dockElement? + session.off("hide-window", this.maybeHideDetailWindow); + } + }); + + function updateChatParticipantList() { + var live = peers.getAllPeers(true); + if (live.length) { + ui.displayToggle("#togetherjs-chat-participants"); + $("#togetherjs-chat-participant-list").text( + live.map(function (p) {return p.name;}).join(", ")); + } else { + ui.displayToggle("#togetherjs-chat-no-participants"); + } + } + + function inviteHubUrl() { + var base = TogetherJS.config.get("inviteFromRoom"); + assert(base); + return util.makeUrlAbsolute(base, session.hubUrl()); + } + + var inRefresh = false; + + function refreshInvite() { + if (inRefresh) { + return; + } + inRefresh = true; + require(["who"], function (who) { + var def = who.getList(inviteHubUrl()); + function addUser(user, before) { + var item = templating.sub("invite-user-item", {peer: user}); + item.attr("data-clientid", user.id); + if (before) { + item.insertBefore(before); + } else { + $("#togetherjs-invite-users").append(item); + } + item.click(function() { + invite(user.clientId); + }); + } + function refresh(users, finished) { + var sorted = []; + for (var id in users) { + if (users.hasOwnProperty(id)) { + sorted.push(users[id]); + } + } + sorted.sort(function (a, b) { + return a.name < b.name ? -1 : 1; + }); + var pos = 0; + ui.container.find("#togetherjs-invite-users .togetherjs-menu-item").each(function () { + var $this = $(this); + if (finished && ! users[$this.attr("data-clientid")]) { + $this.remove(); + return; + } + if (pos >= sorted.length) { + return; + } + while (pos < sorted.length && $this.attr("data-clientid") !== sorted[pos].id) { + addUser(sorted[pos], $this); + pos++; + } + while (pos < sorted.length && $this.attr("data-clientid") == sorted[pos].id) { + pos++; + } + }); + for (var i=pos; i= this.logs.length) { + this.unload(); + return; + } + if (this.pos !== 0) { + // First we need to play the hello + var toReplay = []; + var foundHello = false; + for (var i=this.pos-1; i>=0; i--) { + var item = this.logs[i]; + if (ALWAYS_REPLAY[item.type]) { + toReplay.push(item); + } + if (item.type == "hello" || item.type == "hello-back") { + this.playItem(item); + foundHello = true; + break; + } + } + if (! foundHello) { + console.warn("No hello message found before position", this.pos); + } + toReplay.reverse(); + for (i=0; i= this.logs.length) { + this.unload(); + return; + } + var item = this.logs[this.pos]; + this.playItem(item); + this.pos++; + if (this.pos >= this.logs.length) { + this.unload(); + return; + } + var next = this.logs[this.pos]; + var pause = next.date - item.date; + this.playTimer = setTimeout(this.playOne.bind(this), pause); + if (this.fromStorage) { + this.savePos(); + } + }, + + playItem: function (item) { + if (item.type == "hello") { + // We may need to pause here + if (item.url != (location.href+"").replace(/\#.*/, "")) { + this.pause(); + } + } + try { + session._getChannel().onmessage(item); + } catch (e) { + console.warn("Could not play back message:", item, "error:", e); + } + }, + + save: function () { + this.fromStorage = true; + storage.set("playback.logs", this.logs); + this.savePos(); + }, + + savePos: function () { + storage.set("playback.pos", this.pos); + }, + + unload: function () { + if (this.fromStorage) { + storage.set("playback.logs", undefined); + storage.set("playback.pos", undefined); + } + // FIXME: should do a bye message here + } + + }); + + playback.getRunningLogs = function () { + return storage.get("playback.logs").then(function (value) { + if (! value) { + return null; + } + var logs = Logs(value, true); + return storage.get("playback.pos").then(function (pos) { + pos = pos || 0; + logs.pos = pos; + return logs; + }); + }); + }; + + return playback; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +/*jshint evil:true */ +define('chat',["require", "jquery", "util", "session", "ui", "templates", "playback", "storage", "peers", "windowing"], function (require, $, util, session, ui, templates, playback, storage, peers, windowing) { + var chat = util.Module("chat"); + var assert = util.assert; + var Walkabout; + + session.hub.on("chat", function (msg) { + ui.chat.text({ + text: msg.text, + peer: msg.peer, + // FIXME: a little unsure of trusting this (maybe I should prefix it?) + messageId: msg.messageId, + notify: true + }); + saveChatMessage({ + text: msg.text, + date: Date.now(), + peerId: msg.peer.id, + messageId: msg.messageId + }); + }); + + // FIXME: this doesn't really belong in this module: + session.hub.on("bye", function (msg) { + ui.chat.leftSession({ + peer: msg.peer, + declinedJoin: msg.reason == "declined-join" + }); + }); + + chat.submit = function (message) { + var parts = message.split(/ /); + if (parts[0].charAt(0) == "/") { + var name = parts[0].substr(1).toLowerCase(); + var method = commands["command_" + name]; + if (method) { + method.apply(null, parts.slice(1)); + return; + } + } + var messageId = session.clientId + "-" + Date.now(); + session.send({ + type: "chat", + text: message, + messageId: messageId + }); + ui.chat.text({ + text: message, + peer: peers.Self, + messageId: messageId, + notify: false + }); + saveChatMessage({ + text: message, + date: Date.now(), + peerId: peers.Self.id, + messageId: messageId + }); + }; + + var commands = { + command_help: function () { + var msg = util.trim(templates("help")); + ui.chat.system({ + text: msg + }); + }, + + command_test: function (args) { + if (! Walkabout) { + require(["walkabout"], (function (WalkaboutModule) { + Walkabout = WalkaboutModule; + this.command_test(args); + }).bind(this)); + return; + } + args = util.trim(args || "").split(/\s+/g); + if (args[0] === "" || ! args.length) { + if (this._testCancel) { + args = ["cancel"]; + } else { + args = ["start"]; + } + } + if (args[0] == "cancel") { + ui.chat.system({ + text: "Aborting test" + }); + this._testCancel(); + this._testCancel = null; + return; + } + if (args[0] == "start") { + var times = parseInt(args[1], 10); + if (isNaN(times) || ! times) { + times = 100; + } + ui.chat.system({ + text: "Testing with walkabout.js" + }); + var tmpl = $(templates("walkabout")); + var container = ui.container.find(".togetherjs-test-container"); + container.empty(); + container.append(tmpl); + container.show(); + var statusContainer = container.find(".togetherjs-status"); + statusContainer.text("starting..."); + this._testCancel = Walkabout.runManyActions({ + ondone: function () { + statusContainer.text("done"); + statusContainer.one("click", function () { + container.hide(); + }); + this._testCancel = null; + }, + onstatus: function (status) { + var note = "actions: " + status.actions.length + " running: " + + (status.times - status.remaining) + " / " + status.times; + statusContainer.text(note); + } + }); + return; + } + if (args[0] == "show") { + if (this._testShow.length) { + this._testShow.forEach(function (item) { + if (item) { + item.remove(); + } + }, this); + this._testShow = []; + } else { + var actions = Walkabout.findActions(); + actions.forEach(function (action) { + this._testShow.push(action.show()); + }, this); + } + return; + } + if (args[0] == "describe") { + Walkabout.findActions().forEach(function (action) { + ui.chat.system({ + text: action.description() + }); + }, this); + return; + } + ui.chat.system({ + text: "Did not understand: " + args.join(" ") + }); + }, + + _testCancel: null, + _testShow: [], + + command_clear: function () { + ui.chat.clear(); + }, + + command_exec: function () { + var expr = Array.prototype.slice.call(arguments).join(" "); + var result; + // We use this to force global eval (not in this scope): + var e = eval; + try { + result = e(expr); + } catch (error) { + ui.chat.system({ + text: "Error: " + error + }); + } + if (result !== undefined) { + ui.chat.system({ + text: "" + result + }); + } + }, + + command_record: function () { + ui.chat.system({ + text: "When you see the robot appear, the recording will have started" + }); + window.open( + session.recordUrl(), "_blank", + "left,width=" + ($(window).width() / 2)); + }, + + playing: null, + + command_playback: function (url) { + if (this.playing) { + this.playing.cancel(); + this.playing.unload(); + this.playing = null; + ui.chat.system({ + text: "playback cancelled" + }); + return; + } + if (! url) { + ui.chat.system({ + text: "Nothing is playing" + }); + return; + } + var logLoader = playback.getLogs(url); + logLoader.then( + (function (logs) { + if (! logs) { + ui.chat.system({ + text: "No logs found." + }); + return; + } + logs.save(); + this.playing = logs; + logs.play(); + }).bind(this), + function (error) { + ui.chat.system({ + text: "Error fetching " + url + ":\n" + JSON.stringify(error, null, " ") + }); + }); + windowing.hide("#togetherjs-chat"); + }, + + command_savelogs: function (name) { + session.send({ + type: "get-logs", + forClient: session.clientId, + saveAs: name + }); + function save(msg) { + if (msg.request.forClient == session.clientId && msg.request.saveAs == name) { + storage.set("recording." + name, msg.logs).then(function () { + session.hub.off("logs", save); + ui.chat.system({ + text: "Saved as local:" + name + }); + }); + } + } + session.hub.on("logs", save); + }, + + command_baseurl: function (url) { + if (! url) { + storage.get("baseUrlOverride").then(function (b) { + if (b) { + ui.chat.system({ + text: "Set to: " + b.baseUrl + }); + } else { + ui.chat.system({ + text: "No baseUrl override set" + }); + } + }); + return; + } + url = url.replace(/\/*$/, ""); + ui.chat.system({ + text: "If this goes wrong, do this in the console to reset:\n localStorage.setItem('togetherjs.baseUrlOverride', null)" + }); + storage.set("baseUrlOverride", { + baseUrl: url, + expiresAt: Date.now() + (1000 * 60 * 60 * 24) + }).then(function () { + ui.chat.system({ + text: "baseUrl overridden (to " + url + "), will last for one day." + }); + }); + }, + + command_config: function (variable, value) { + if (! (variable || value)) { + storage.get("configOverride").then(function (c) { + if (c) { + util.forEachAttr(c, function (value, attr) { + if (attr == "expiresAt") { + return; + } + ui.chat.system({ + text: " " + attr + " = " + JSON.stringify(value) + }); + }); + ui.chat.system({ + text: "Config expires at " + (new Date(c.expiresAt)) + }); + } else { + ui.chat.system({ + text: "No config override" + }); + } + }); + return; + } + if (variable == "clear") { + storage.set("configOverride", undefined); + ui.chat.system({ + text: "Clearing all overridden configuration" + }); + return; + } + console.log("config", [variable, value]); + if (! (variable && value)) { + ui.chat.system({ + text: "Error: must provide /config VAR VALUE" + }); + return; + } + try { + value = JSON.parse(value); + } catch (e) { + ui.chat.system({ + text: "Error: value (" + value + ") could not be parsed: " + e + }); + return; + } + if (! TogetherJS._defaultConfiguration.hasOwnProperty(variable)) { + ui.chat.system({ + text: "Warning: variable " + variable + " is unknown" + }); + } + storage.get("configOverride").then(function (c) { + c = c || {}; + c[variable] = value; + c.expiresAt = Date.now() + (1000 * 60 * 60 * 24); + storage.set("configOverride", c).then(function () { + ui.chat.system({ + text: "Variable " + variable + " = " + JSON.stringify(value) + "\nValue will be set for one day." + }); + }); + }); + } + + }; + + // this section deal with saving/restoring chat history as long as session is alive + var chatStorageKey = "chatlog"; + var maxLogMessages = 100; + + function saveChatMessage(obj) { + assert(obj.peerId); + assert(obj.messageId); + assert(obj.date); + assert(typeof obj.text == "string"); + + loadChatLog().then(function (log) { + for (var i = log.length - 1; i >= 0; i--) { + if (log[i].messageId === obj.messageId) { + return; + } + } + log.push(obj); + if (log.length > maxLogMessages) { + log.splice(0, log.length - maxLogMessages); + } + storage.tab.set(chatStorageKey, log); + }); + } + + function loadChatLog() { + return storage.tab.get(chatStorageKey, []); + } + + session.once("ui-ready", function () { + loadChatLog().then(function (log) { + if (! log) { + return; + } + for (var i = 0; i < log.length; i++) { + // peers should already be loaded from sessionStorage by the peers module + // maybe i should use a try catch block here + var currentPeer = peers.getPeer(log[i].peerId); + ui.chat.text({ + text: log[i].text, + date: log[i].date, + peer: currentPeer, + messageId: log[i].messageId + }); + } + }); + }); + //delete chat log + session.on("close", function(){ + storage.tab.set(chatStorageKey, undefined); + }); + + return chat; + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +define('console',["util"], function (util) { + + var console = window.console || {log: function () {}}; + + var Console = util.Class({ + constructor: function () { + this.messages = []; + this.level = this.levels.log; + }, + + messageLimit: 100, + + levels: { + debug: 1, + // FIXME: I'm considering *not* wrapping console.log, and strictly keeping + // it as a debugging tool; also line numbers would be preserved + log: 2, + info: 3, + notify: 4, + warn: 5, + error: 6, + fatal: 7 + }, + + // Gets set below: + maxLevel: 0, + + consoleLevels: [ + [], + console.debug || [], + console.log || [], + console.info || [], + console.notify || [], + console.warn || [], + console.error || [], + console.fatal || [] + ], + + levelNames: {}, + + setLevel: function (l) { + var number; + if (typeof l == "string") { + number = this.levels[l]; + if (number === undefined) { + throw new Error("Tried to set Console level to unknown level string: " + l); + } + l = number; + } + if (typeof l == "function") { + number = this.consoleLevels.indexOf(l); + if (number == -1) { + throw new Error("Tried to set Console level based on unknown console function: " + l); + } + l = number; + } + if (typeof l == "number") { + if (l < 0) { + throw new Error("Console level must be 0 or larger: " + l); + } else if (l > this.maxLevel) { + throw new Error("Console level must be " + this.maxLevel + " or smaller: " + l); + } + } + this.level = l; + }, + + write: function (level) { + try { + this.messages.push([ + Date.now(), + level, + this._stringify(Array.prototype.slice.call(arguments, 1)) + ]); + } catch (e) { + console.warn("Error stringifying argument:", e); + } + if (level != "suppress" && this.level <= level) { + var method = console[this.levelNames[level]]; + if (! method) { + method = console.log; + } + method.apply(console, Array.prototype.slice.call(arguments, 1)); + } + }, + + suppressedWrite: function () { + this.write.apply(this, ["suppress"].concat(Array.prototype.slice.call(arguments))); + }, + + trace: function (level) { + level = level || 'log'; + if (console.trace) { + level = "suppressedWrite"; + } + try { + throw new Error(); + } catch (e) { + // FIXME: trim this frame + var stack = e.stack; + stack = stack.replace(/^[^\n]*\n/, ""); + this[level](stack); + } + if (console.trace) { + console.trace(); + } + }, + + _browserInfo: function () { + // FIXME: add TogetherJS version and + return [ + "TogetherJS base URL: " + TogetherJS.baseUrl, + "User Agent: " + navigator.userAgent, + "Page loaded: " + this._formatDate(TogetherJS.pageLoaded), + "Age: " + this._formatMinutes(Date.now() - TogetherJS.pageLoaded) + " minutes", + // FIXME: make this right: + //"Window: height: " + window.screen.height + " width: " + window.screen.width + "URL: " + location.href, + "------+------+----------------------------------------------" + ]; + }, + + _stringify: function (args) { + var s = ""; + for (var i=0; i 10) { + // Over 10 minutes, just ignore the seconds + return m; + } + var seconds = Math.floor(remaining / 1000) + ""; + m += ":"; + seconds = lpad(seconds, 2, "0"); + m += seconds; + if (m == "0:00") { + m += ((remaining / 1000).toFixed(3) + "").substr(1); + } + return m; + }, + + _formatLevel: function (l) { + if (l === "suppress") { + return ""; + } + return this.levelNames[l]; + }, + + toString: function () { + try { + var lines = this._browserInfo(); + this.messages.forEach(function (m) { + lines.push(lpad(this._formatTime(m[0]), 6) + " " + rpad(this._formatLevel(m[1]), 6) + " " + lpadLines(m[2], 14)); + }, this); + return lines.join("\n"); + } catch (e) { + // toString errors can otherwise be swallowed: + console.warn("Error running console.toString():", e); + throw e; + } + }, + + submit: function (options) { + // FIXME: friendpaste is broken for this + // (and other pastebin sites aren't really Browser-accessible) + return util.Deferred(function (def) { + options = options || {}; + var site = options.site || TogetherJS.config.get("pasteSite") || "https://www.friendpaste.com/"; + var req = new XMLHttpRequest(); + req.open("POST", site); + req.setRequestHeader("Content-Type", "application/json"); + req.send(JSON.stringify({ + "title": options.title || "TogetherJS log file", + "snippet": this.toString(), + "language": "text" + })); + req.onreadystatechange = function () { + if (req.readyState === 4) { + var data = JSON.parse(req.responseText); + } + }; + }); + } + + }); + + function rpad(s, len, pad) { + s = s + ""; + pad = pad || " "; + while (s.length < len) { + s += pad; + } + return s; + } + + function lpad(s, len, pad) { + s = s + ""; + pad = pad || " "; + while (s.length < len) { + s = pad + s; + } + return s; + } + + function lpadLines(s, len, pad) { + var i; + s = s + ""; + if (s.indexOf("\n") == -1) { + return s; + } + pad = pad || " "; + var fullPad = ""; + for (i=0; i wTop + height - CURSOR_HEIGHT) { + top = height - CURSOR_HEIGHT - 5; + this.setClass("togetherjs-scrolled-below"); + } else { + this.setClass("togetherjs-scrolled-normal"); + } + this.element.css({ + top: top, + left: left + }); + }, + + refresh: function () { + if (this.lastTop !== null) { + this.setPosition(this.lastTop, this.lastLeft); + } + }, + + setKeydown: function () { + if (this.keydownTimeout) { + clearTimeout(this.keydownTimeout); + } else { + this.element.find(".togetherjs-cursor-typing").show().animateKeyboard(); + } + this.keydownTimeout = setTimeout(this.clearKeydown, this.KEYDOWN_WAIT_TIME); + }, + + clearKeydown: function () { + this.keydownTimeout = null; + this.element.find(".togetherjs-cursor-typing").hide().stopKeyboardAnimation(); + }, + + _destroy: function () { + this.element.remove(); + this.element = null; + } + }); + + Cursor._cursors = {}; + + cursor.getClient = Cursor.getClient = function (clientId) { + var c = Cursor._cursors[clientId]; + if (! c) { + c = Cursor._cursors[clientId] = Cursor(clientId); + } + return c; + }; + + Cursor.forEach = function (callback, context) { + context = context || null; + for (var a in Cursor._cursors) { + if (Cursor._cursors.hasOwnProperty(a)) { + callback.call(context, Cursor._cursors[a], a); + } + } + }; + + Cursor.destroy = function (clientId) { + Cursor._cursors[clientId]._destroy(); + delete Cursor._cursors[clientId]; + }; + + peers.on("new-peer identity-updated status-updated", function (peer) { + var c = Cursor.getClient(peer.id); + c.updatePeer(peer); + }); + + var lastTime = 0; + var MIN_TIME = 100; + var lastPosX = -1; + var lastPosY = -1; + var lastMessage = null; + function mousemove(event) { + var now = Date.now(); + if (now - lastTime < MIN_TIME) { + return; + } + lastTime = now; + var pageX = event.pageX; + var pageY = event.pageY; + if (Math.abs(lastPosX - pageX) < 3 && Math.abs(lastPosY - pageY) < 3) { + // Not a substantial enough change + return; + } + lastPosX = pageX; + lastPosY = pageY; + var target = event.target; + var parent = $(target).closest(".togetherjs-window, .togetherjs-popup, #togetherjs-dock"); + if (parent.length) { + target = parent[0]; + } else if (elementFinder.ignoreElement(target)) { + target = null; + } + if ((! target) || target == document.documentElement || target == document.body) { + lastMessage = { + type: "cursor-update", + top: pageY, + left: pageX + }; + session.send(lastMessage); + return; + } + target = $(target); + var offset = target.offset(); + if (! offset) { + // FIXME: this really is walkabout.js's problem to fire events on the + // document instead of a specific element + console.warn("Could not get offset of element:", target[0]); + return; + } + var offsetX = pageX - offset.left; + var offsetY = pageY - offset.top; + lastMessage = { + type: "cursor-update", + element: elementFinder.elementLocation(target), + offsetX: Math.floor(offsetX), + offsetY: Math.floor(offsetY) + }; + session.send(lastMessage); + } + + function makeCursor(color) { + var canvas = $(""); + canvas.attr("height", CURSOR_HEIGHT); + canvas.attr("width", CURSOR_WIDTH); + var context = canvas[0].getContext('2d'); + context.fillStyle = color; + context.moveTo(0, 0); + context.beginPath(); + context.lineTo(0, CURSOR_HEIGHT/1.2); + context.lineTo(Math.sin(CURSOR_ANGLE/2) * CURSOR_HEIGHT / 1.5, + Math.cos(CURSOR_ANGLE/2) * CURSOR_HEIGHT / 1.5); + context.lineTo(Math.sin(CURSOR_ANGLE) * CURSOR_HEIGHT / 1.2, + Math.cos(CURSOR_ANGLE) * CURSOR_HEIGHT / 1.2); + context.lineTo(0, 0); + context.shadowColor = 'rgba(0,0,0,0.3)'; + context.shadowBlur = 2; + context.shadowOffsetX = 1; + context.shadowOffsetY = 2; + context.strokeStyle = "#ffffff"; + context.stroke(); + context.fill(); + return canvas[0].toDataURL("image/png"); + } + + var scrollTimeout = null; + var scrollTimeoutSet = 0; + var SCROLL_DELAY_TIMEOUT = 75; + var SCROLL_DELAY_LIMIT = 300; + + function scroll() { + var now = Date.now(); + if (scrollTimeout) { + if (now - scrollTimeoutSet < SCROLL_DELAY_LIMIT) { + clearTimeout(scrollTimeout); + } else { + // Just let it progress anyway + return; + } + } + scrollTimeout = setTimeout(_scrollRefresh, SCROLL_DELAY_TIMEOUT); + if (! scrollTimeoutSet) { + scrollTimeoutSet = now; + } + } + + var lastScrollMessage = null; + function _scrollRefresh() { + scrollTimeout = null; + scrollTimeoutSet = 0; + Cursor.forEach(function (c) { + c.refresh(); + }); + lastScrollMessage = { + type: "scroll-update", + position: elementFinder.elementByPixel($(window).scrollTop()) + }; + session.send(lastScrollMessage); + } + + // FIXME: do the same thing for cursor position? And give up on the + // ad hoc update-on-hello? + session.on("prepare-hello", function (helloMessage) { + if (lastScrollMessage) { + helloMessage.scrollPosition = lastScrollMessage.position; + } + }); + + session.hub.on("scroll-update", function (msg) { + msg.peer.scrollPosition = msg.position; + if (msg.peer.following) { + msg.peer.view.scrollTo(); + } + }); + + // In case there are multiple peers, we track that we've accepted one of their + // hello-based scroll updates, just so we don't bounce around (we don't intelligently + // choose which one to use, just the first that comes in) + var acceptedScrollUpdate = false; + session.hub.on("hello-back hello", function (msg) { + if (msg.type == "hello") { + // Once a hello comes in, a bunch of hello-backs not intended for us will also + // come in, and we should ignore them + acceptedScrollUpdate = true; + } + if (! msg.scrollPosition) { + return; + } + msg.peer.scrollPosition = msg.scrollPosition; + if ((! acceptedScrollUpdate) && + msg.sameUrl && + Date.now() - session.timeHelloSent < SCROLL_UPDATE_CUTOFF) { + acceptedScrollUpdate = true; + msg.peer.view.scrollTo(); + } + }); + + session.on("ui-ready", function () { + $(document).mousemove(mousemove); + document.addEventListener("click", documentClick, true); + document.addEventListener("keydown", documentKeydown, true); + $(window).scroll(scroll); + scroll(); + }); + + session.on("close", function () { + Cursor.forEach(function (c, clientId) { + Cursor.destroy(clientId); + }); + $(document).unbind("mousemove", mousemove); + document.removeEventListener("click", documentClick, true); + document.removeEventListener("keydown", documentKeydown, true); + $(window).unbind("scroll", scroll); + }); + + session.hub.on("hello", function (msg) { + // Immediately get our cursor onto this new person's screen: + if (lastMessage) { + session.send(lastMessage); + } + if (lastScrollMessage) { + session.send(lastScrollMessage); + } + }); + + function documentClick(event) { + if (event.togetherjsInternal) { + // This is an artificial internal event + return; + } + // FIXME: this might just be my imagination, but somehow I just + // really don't want to do anything at this stage of the event + // handling (since I'm catching every click), and I'll just do + // something real soon: + setTimeout(function () { + if (! TogetherJS.running) { + // This can end up running right after TogetherJS has been closed, often + // because TogetherJS was closed with a click... + return; + } + var element = event.target; + if (element == document.documentElement) { + // For some reason clicking on gives the element here + element = document.body; + } + if (elementFinder.ignoreElement(element)) { + return; + } + //Prevent click events on video objects to avoid conflicts with + //togetherjs's own video events + if (element.nodeName.toLowerCase() === 'video'){ + return; + } + + var dontShowClicks = TogetherJS.config.get("dontShowClicks"); + var cloneClicks = TogetherJS.config.get("cloneClicks"); + // If you dont want to clone the click for this element + // and you dont want to show the click for this element or you dont want to show any clicks + // then return to avoid sending a useless click + if ((! util.matchElement(element, cloneClicks)) && util.matchElement(element, dontShowClicks)) { + return; + } + var location = elementFinder.elementLocation(element); + var offset = $(element).offset(); + var offsetX = event.pageX - offset.left; + var offsetY = event.pageY - offset.top; + session.send({ + type: "cursor-click", + element: location, + offsetX: offsetX, + offsetY: offsetY + }); + if (util.matchElement(element, dontShowClicks)) { + return; + } + displayClick({top: event.pageY, left: event.pageX}, peers.Self.color); + }); + } + + var CLICK_TRANSITION_TIME = 3000; + + session.hub.on("cursor-click", function (pos) { + // When the click is calculated isn't always the same as how the + // last cursor update was calculated, so we force the cursor to + // the last location during a click: + if (! pos.sameUrl) { + // FIXME: if we *could have* done a local click, but we follow along + // later, we'll be in different states if that click was important. + // Mostly click cloning just won't work. + return; + } + Cursor.getClient(pos.clientId).updatePosition(pos); + var target = $(elementFinder.findElement(pos.element)); + var offset = target.offset(); + var top = offset.top + pos.offsetY; + var left = offset.left + pos.offsetX; + var cloneClicks = TogetherJS.config.get("cloneClicks"); + if (util.matchElement(target, cloneClicks)) { + eventMaker.performClick(target); + } + var dontShowClicks = TogetherJS.config.get("dontShowClicks"); + if (util.matchElement(target, dontShowClicks)) { + return; + } + displayClick({top: top, left: left}, pos.peer.color); + }); + + function displayClick(pos, color) { + // FIXME: should we hide the local click if no one else is going to see it? + // That means tracking who might be able to see our screen. + var element = templating.clone("click"); + $(document.body).append(element); + element.css({ + top: pos.top, + left: pos.left, + borderColor: color + }); + setTimeout(function () { + element.addClass("togetherjs-clicking"); + }, 100); + setTimeout(function () { + element.remove(); + }, CLICK_TRANSITION_TIME); + } + + var lastKeydown = 0; + var MIN_KEYDOWN_TIME = 500; + + function documentKeydown(event) { + setTimeout(function () { + var now = Date.now(); + if (now - lastKeydown < MIN_KEYDOWN_TIME) { + return; + } + lastKeydown = now; + // FIXME: is event.target interesting here? That is, *what* the + // user is typing into, not just that the user is typing? Also + // I'm assuming we don't care if the user it typing into a + // togetherjs-related field, since chat activity is as interesting + // as any other activity. + session.send({type: "keydown"}); + }); + } + + session.hub.on("keydown", function (msg) { + // FIXME: when the cursor is hidden there's nothing to show with setKeydown(). + var cursor = Cursor.getClient(msg.clientId); + cursor.setKeydown(); + }); + + util.testExpose({Cursor: Cursor}); + + return cursor; + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('ot',["util"], function (util) { + + var ot = util.Module("ot"); + var assert = util.assert; + + var StringSet = util.Class({ + /* Set that only supports string items */ + constructor: function () { + this._items = {}; + this._count = 0; + }, + contains: function (k) { + assert(typeof k == "string"); + return this._items.hasOwnProperty(k); + }, + add: function (k) { + assert(typeof k == "string"); + if (this.contains(k)) { + return; + } + this._items[k] = null; + this._count++; + }, + remove: function (k) { + assert(typeof k == "string"); + if (! this.contains(k)) { + return; + } + delete this._items[k]; + this._count++; + }, + isEmpty: function () { + return ! this._count; + } + }); + + var Queue = util.Class({ + + constructor: function (size) { + this._q = []; + this._size = size; + this._deleted = 0; + }, + + _trim: function () { + if (this._size) { + if (this._q.length > this._size) { + this._q.splice(0, this._q.length - this._size); + this._deleted += this._q.length - this._size; + } + } + }, + + push: function (item) { + this._q.push(item); + this._trim(); + }, + + last: function () { + return this._q[this._q.length-1]; + }, + + walkBack: function (callback, context) { + var result = true; + for (var i=this._q.length-1; i >= 0; i--) { + var item = this._q[i]; + result = callback.call(context, item, i + this._deleted); + if (result === false) { + return result; + } else if (! result) { + result = true; + } + } + return result; + }, + + walkForward: function (index, callback, context) { + var result = true; + for (var i=index; i this.version || + (otherChange.version == this.version && otherChange.clientId > this.clientId); + }, + + knowsAboutAll: function (versions) { + for (var clientId in versions) { + if (! versions.hasOwnProperty(clientId)) { + continue; + } + if (! versions[clientId]) { + continue; + } + if ((! this.known[clientId]) || this.known[clientId] < versions[clientId]) { + return false; + } + } + return true; + }, + + knowsAboutChange: function (change) { + return change.clientId == this.clientId || + (this.known[change.clientId] && this.known[change.clientId] >= change.version); + }, + + knowsAboutVersion: function (version, clientId) { + if ((! version) || clientId == this.clientId) { + return true; + } + return this.known[clientId] && this.known[clientId] >= version; + }, + + maybeMissingChanges: function (mostRecentVersion, clientId) { + if (! mostRecentVersion) { + // No actual changes for clientId exist + return false; + } + if (! this.known[clientId]) { + // We don't even know about clientId, so we are definitely missing something + return true; + } + if (this.known[clientId] >= mostRecentVersion) { + // We know about all versions through mostRecentVersion + return false; + } + if ((clientId > this.clientId && this.known[clientId] >= this.version-1) || + (clientId < this.clientId && this.known[clientId] == this.version)) { + // We know about all versions from clientId that could exist before this + // version + return false; + } + // We may or may not be missing something + return true; + } + }); + + /* SimpleHistory synchronizes peers by relying on the server to serialize + * the order of all updates. Each client maintains a queue of patches + * which have not yet been 'committed' (by being echoed back from the + * server). The client is responsible for transposing its own queue + * if 'earlier' patches are heard from the server. + * + * Let's say that A's edit "1" and B's edit "2" occur and get put in + * their respective SimpleHistory queues. The server happens to + * handle 1 first, then 2, so those are the order that all peers + * (both A and B) see the messages. + * + * A sees 1, and has 1 on its queue, so everything's fine. It + * updates the 'committed' text to match its current text and drops + * the patch from its queue. It then sees 2, but the basis number + * for 2 no longer matches the committed basis, so it throws it + * away. + * + * B sees 1, and has 2 on its queue. It does the OT transpose thing, + * updating the committed text to include 1 and the 'current' text + * to include 1+2. It updates its queue with the newly transposed + * version of 2 (call it 2prime) and updates 2prime's basis + * number. It them resends 2prime to the server. It then receives 2 + * (the original) but the basis number no longer matches the + * committed basis, so it throws it away. + * + * Now the server sees 2prime and rebroadcasts it to both A and B. + * + * A is seeing it for the first time, and the basis number matches, + * so it applies it to the current and committed text. + * + * B sees that 2prime matches what's on the start of its queue, + * shifts it off, and updates the committed text to match the + * current text. + * + * Note that no one tries to keep an entire history of changes, + * which is the main difference with ot.History. Everyone applies + * the same patches in the same order. + */ + ot.SimpleHistory = util.Class({ + + constructor: function(clientId, initState, initBasis) { + this.clientId = clientId; + this.committed = initState; + this.current = initState; + this.basis = initBasis; + this.queue = []; + this.deltaId = 1; + this.selection = null; + }, + + // Use a fake change to represent the selection. + // (This is the only bit that hard codes ot.TextReplace as the delta + // representation; override this in a subclass (or don't set the + // selection) if you are using a different delta representation. + setSelection: function(selection) { + if (selection) { + this.selection = ot.TextReplace(selection[0], + selection[1] - selection[0], '@'); + } else { + this.selection = null; + } + }, + + // Decode the fake change to reconstruct the updated selection. + getSelection: function() { + if (! this.selection) { + return null; + } + return [this.selection.start, this.selection.start + this.selection.del]; + }, + + // Add this delta to this client's queue. + add: function(delta) { + var change = { + id: this.clientId + '.' + (this.deltaId++), + delta: delta + }; + if (! this.queue.length) { + change.basis = this.basis; + } + this.queue.push(change); + this.current = delta.apply(this.current); + return !!change.basis; + }, + + // Apply a delta received from the server. + // Return true iff the current text changed as a result. + commit: function(change) { + + // ignore it if the basis doesn't match (this patch doesn't apply) + // if so, this delta is out of order; we expect the original client + // to retransmit an updated delta. + if (change.basis !== this.basis) { + return false; // 'current' text did not change + } + + // is this the first thing on the queue? + if (this.queue.length && this.queue[0].id === change.id) { + assert(change.basis === this.queue[0].basis); + // good, apply this to commit state & remove it from queue + this.committed = this.queue.shift().delta.apply(this.committed); + this.basis++; + if (this.queue.length) { + this.queue[0].basis = this.basis; + } + return false; // 'current' text did not change + } + + // Transpose all bits on the queue to put this patch first. + var inserted = change.delta; + this.queue = this.queue.map(function(qchange) { + var tt = qchange.delta.transpose(inserted); + inserted = tt[1]; + return { + id: qchange.id, + delta: tt[0] + }; + }); + if (this.selection) { + // update the selection! + this.selection = this.selection.transpose(inserted)[0]; + } + this.committed = change.delta.apply(this.committed); + this.basis++; + if (this.queue.length) { + this.queue[0].basis = this.basis; + } + // Update current by replaying queued changes starting from 'committed' + this.current = this.committed; + this.queue.forEach(function(qchange) { + this.current = qchange.delta.apply(this.current); + }.bind(this)); + return true; // The 'current' text changed. + }, + + // Return the next change to transmit to the server, or null if there + // isn't one. + getNextToSend: function() { + var qchange = this.queue[0]; + if (! qchange) { + /* nothing to send */ + return null; + } + if (qchange.sent) { + /* already sent */ + return null; + } + assert(qchange.basis); + qchange.sent = true; + return qchange; + } + }); + + ot.History = util.Class({ + + constructor: function (clientId, initState) { + this._history = Queue(); + this._history.push({ + clientId: "init", state: initState + }); + this.clientId = clientId; + this.known = {}; + this.mostRecentLocalChange = null; + }, + + add: function (change) { + // Simplest cast, it is our change: + if (change.clientId == this.clientId) { + this._history.push(change); + this.mostRecentLocalChange = change.version; + return change.delta; + } + assert((! this.known[change.clientId]) || this.known[change.clientId] < change.version, + "Got a change", change, "that appears older (or same as) a known change", this.known[change.clientId]); + // Second simplest case, we get a change that we can add to our + // history without modification: + var last = this._history.last(); + if ((last.clientId == "init" || last.isBefore(change)) && + change.knowsAboutAll(this.known) && + change.knowsAboutVersion(this.mostRecentLocalChange, this.clientId)) { + this._history.push(change); + this.known[change.clientId] = change.version; + return change.delta; + } + // We must do work! + + this.logHistory("//"); + + // First we check if we need to modify this change because we + // know about changes that it should know about (changes that + // preceed it that are in our local history). + var clientsToCheck = StringSet(); + for (var clientId in this.known) { + if (! this.known.hasOwnProperty(clientId)) { + continue; + } + if (change.maybeMissingChanges(this.known[clientId], clientId)) { + clientsToCheck.add(clientId); + } + } + if (change.maybeMissingChanges(this.mostRecentLocalChange, this.clientId)) { + clientsToCheck.add(this.clientId); + } + if (! clientsToCheck.isEmpty()) { + var indexToCheckFrom = null; + this._history.walkBack(function (c, index) { + indexToCheckFrom = index; + if (c.clientId == "init") { + return false; + } + if (clientsToCheck.contains(c.clientId) && + ! change.maybeMissingChanges(c.version, c.clientId)) { + clientsToCheck.remove(c.clientId); + if (clientsToCheck.isEmpty()) { + return false; + } + } + return true; + }, this); + this._history.walkForward(indexToCheckFrom, function (c, index) { + if (c.clientId == "init") { + return true; + } + if (change.isBefore(c)) { + return false; + } + if (! change.knowsAboutChange(c)) { + var presentDelta = this.promoteDelta(c.delta, index, change); + if (! presentDelta.equals(c.delta)) { + //console.log("->rebase delta rewrite", presentDelta+""); + } + this.logChange("->rebase", change, function () { + var result = change.delta.transpose(presentDelta); + change.delta = result[0]; + change.known[c.clientId] = c.version; + }, "with:", c); + } + return true; + }, this); + } + + // Next we insert the change into its proper location + var indexToInsert = null; + this._history.walkBack(function (c, index) { + if (c.clientId == "init" || c.isBefore(change)) { + indexToInsert = index+1; + return false; + } + return true; + }, this); + assert(indexToInsert); + this._history.insert(indexToInsert, change); + + // Now we fix up any forward changes + var fixupDelta = change.delta; + this._history.walkForward(indexToInsert+1, function (c, index) { + if (! c.knowsAboutChange(change)) { + var origChange = c.clone(); + this.logChange("^^fix", c, function () { + var fixupResult = c.delta.transpose(fixupDelta); + console.log(" ^^real"); + var result = c.delta.transpose(fixupDelta); + c.delta = result[0]; + c.known[change.clientId] = change.version; + fixupDelta = fixupResult[1]; + }, "clone:", change.delta+""); + console.log("(trans)", fixupDelta+""); + assert(c.knowsAboutChange(change)); + } + }, this); + + // Finally we return the transformed delta that represents + // changes that should be made to the state: + + this.logHistory("!!"); + return fixupDelta; + }, + + promoteDelta: function (delta, deltaIndex, untilChange) { + this._history.walkForward(deltaIndex+1, function (c, index) { + if (untilChange.isBefore(c)) { + return false; + } + // FIXME: not sure if this clientId check here is right. Maybe + // if untilChange.knowsAbout(c)? + if (untilChange.knowsAboutChange(c)) { + var result = c.delta.transpose(delta); + delta = result[1]; + } + return true; + }); + return delta; + }, + + logHistory: function (prefix) { + prefix = prefix || ""; + var postfix = Array.prototype.slice.call(arguments, 1); + console.log.apply(console, [prefix + "history", this.clientId, ":"].concat(postfix)); + console.log(prefix + " state:", JSON.stringify(this.getStateSafe())); + var hstate; + this._history.walkForward(0, function (c, index) { + if (! index) { + assert(c.clientId == "init"); + console.log(prefix + " init:", JSON.stringify(c.state)); + hstate = c.state; + } else { + try { + hstate = c.delta.apply(hstate); + } catch (e) { + hstate = "Error: " + e; + } + console.log(prefix + " ", index, c+"", JSON.stringify(hstate)); + } + }); + }, + + logChange: function (prefix, change, callback) { + prefix = prefix || "before"; + var postfix = Array.prototype.slice.call(arguments, 3); + console.log.apply( + console, + [prefix, this.clientId, ":", change+""].concat(postfix).concat([JSON.stringify(this.getStateSafe(true))])); + try { + callback(); + } finally { + console.log(prefix + " after:", change+"", JSON.stringify(this.getStateSafe())); + } + }, + + addDelta: function (delta) { + var version = this._createVersion(); + var change = Change(version, this.clientId, delta, util.extend(this.knownVersions)); + this.add(change); + return change; + }, + + _createVersion: function () { + var max = 1; + for (var id in this.knownVersions) { + max = Math.max(max, this.knownVersions[id]); + } + max = Math.max(max, this.mostRecentLocalChange); + return max+1; + }, + + fault: function (change) { + throw new Error('Fault'); + }, + + getState: function () { + var state; + this._history.walkForward(0, function (c) { + if (c.clientId == "init") { + // Initialization, has the state + state = c.state; + } else { + state = c.delta.apply(state); + } + }, this); + return state; + }, + + getStateSafe: function () { + try { + return this.getState(); + } catch (e) { + return 'Error: ' + e; + } + } + + }); + + ot.TextReplace = util.Class({ + + constructor: function (start, del, text) { + assert(typeof start == "number" && typeof del == "number" && typeof text == "string", start, del, text); + assert(start >=0 && del >= 0, start, del); + this.start = start; + this.del = del; + this.text = text; + }, + + toString: function () { + if (this.empty()) { + return '[no-op]'; + } + if (! this.del) { + return '[insert ' + JSON.stringify(this.text) + ' @' + this.start + ']'; + } else if (! this.text) { + return '[delete ' + this.del + ' chars @' + this.start + ']'; + } else { + return '[replace ' + this.del + ' chars with ' + JSON.stringify(this.text) + ' @' + this.start + ']'; + } + }, + + equals: function (other) { + return other.constructor === this.constructor && + other.del === this.del && + other.start === this.start && + other.text === this.text; + }, + + clone: function (start, del, text) { + if (start === undefined) { + start = this.start; + } + if (del === undefined) { + del = this.del; + } + if (text === undefined) { + text = this.text; + } + return ot.TextReplace(start, del, text); + }, + + empty: function () { + return (! this.del) && (! this.text); + }, + + apply: function (text) { + if (this.empty()) { + return text; + } + if (this.start > text.length) { + console.trace(); + throw new util.AssertionError("Start after end of text (" + JSON.stringify(text) + "/" + text.length + "): " + this); + } + if (this.start + this.del > text.length) { + throw new util.AssertionError("Start+del after end of text (" + JSON.stringify(text) + "/" + text.length + "): " + this); + } + return text.substr(0, this.start) + this.text + text.substr(this.start+this.del); + }, + + transpose: function (delta) { + /* Transform this delta as though the other delta had come before it. + Returns a [new_version_of_this, transformed_delta], where transformed_delta + satisfies: + + result1 = new_version_of_this.apply(delta.apply(text)); + result2 = transformed_delta.apply(this.apply(text)); + assert(result1 == result2); + + Does not modify this object. + */ + var overlap; + assert(delta instanceof ot.TextReplace, "Transposing with non-TextReplace:", delta); + if (this.empty()) { + //console.log(" =this is empty"); + return [this.clone(), delta.clone()]; + } + if (delta.empty()) { + //console.log(" =other is empty"); + return [this.clone(), delta.clone()]; + } + if (delta.before(this)) { + //console.log(" =this after other"); + return [this.clone(this.start + delta.text.length - delta.del), + delta.clone()]; + } else if (this.before(delta)) { + //console.log(" =this before other"); + return [this.clone(), delta.clone(delta.start + this.text.length - this.del)]; + } else if (delta.sameRange(this)) { + //console.log(" =same range"); + return [this.clone(this.start+delta.text.length, 0), + delta.clone(undefined, 0)]; + } else if (delta.contains(this)) { + //console.log(" =other contains this"); + return [this.clone(delta.start+delta.text.length, 0, this.text), + delta.clone(undefined, delta.del - this.del + this.text.length, delta.text + this.text)]; + } else if (this.contains(delta)) { + //console.log(" =this contains other"); + return [this.clone(undefined, this.del - delta.del + delta.text.length, delta.text + this.text), + delta.clone(this.start, 0, delta.text)]; + } else if (this.overlapsStart(delta)) { + //console.log(" =this overlaps start of other"); + overlap = this.start + this.del - delta.start; + return [this.clone(undefined, this.del - overlap), + delta.clone(this.start + this.text.length, delta.del - overlap)]; + } else { + //console.log(" =this overlaps end of other"); + assert(delta.overlapsStart(this), delta+"", "does not overlap start of", this+"", delta.before(this)); + overlap = delta.start + delta.del - this.start; + return [this.clone(delta.start + delta.text.length, this.del - overlap), + delta.clone(undefined, delta.del - overlap)]; + } + throw 'Should not happen'; + }, + + before: function (other) { + return this.start + this.del <= other.start; + }, + + contains: function (other) { + return other.start >= this.start && other.start + other.del < this.start + this.del; + }, + + sameRange: function (other) { + return other.start == this.start && other.del == this.del; + }, + + overlapsStart: function (other) { + return this.start < other.start && this.start + this.del > other.start; + }, + + classMethods: { + + /* Make a new ot.TextReplace that converts oldValue to newValue. */ + fromChange: function(oldValue, newValue) { + assert(typeof oldValue == "string"); + assert(typeof newValue == "string"); + var commonStart = 0; + while (commonStart < newValue.length && + newValue.charAt(commonStart) == oldValue.charAt(commonStart)) { + commonStart++; + } + var commonEnd = 0; + while (commonEnd < (newValue.length - commonStart) && + commonEnd < (oldValue.length - commonStart) && + newValue.charAt(newValue.length - commonEnd - 1) == + oldValue.charAt(oldValue.length - commonEnd - 1)) { + commonEnd++; + } + var removed = oldValue.substr(commonStart, oldValue.length - commonStart - commonEnd); + var inserted = newValue.substr(commonStart, newValue.length - commonStart - commonEnd); + if (! (removed.length || inserted)) { + return null; + } + return this(commonStart, removed.length, inserted); + }, + + random: function (source, generator) { + var text, start, len; + var ops = ["ins", "del", "repl"]; + if (! source.length) { + ops = ["ins"]; + } + switch (generator.pick(ops)) { + case "ins": + if (! generator.number(2)) { + text = generator.string(1); + } else { + text = generator.string(generator.number(3)+1); + } + if (! generator.number(4)) { + start = 0; + } else if (! generator.number(3)) { + start = source.length-1; + } else { + start = generator.number(source.length); + } + return this(start, 0, text); + + case "del": + if (! generator.number(20)) { + return this(0, source.length, ""); + } + start = generator.number(source.length-1); + if (! generator.number(2)) { + len = 1; + } else { + len = generator.number(5)+1; + } + len = Math.min(len, source.length - start); + return this(start, len, ""); + + case "repl": + start = generator.number(source.length-1); + len = generator.number(5); + len = Math.min(len, source.length - start); + text = generator.string(generator.number(2)+1); + return this(start, len, text); + } + throw 'Unreachable'; + } + } + }); + + return ot; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('forms',["jquery", "util", "session", "elementFinder", "eventMaker", "templating", "ot"], function ($, util, session, elementFinder, eventMaker, templating, ot) { + var forms = util.Module("forms"); + var assert = util.assert; + + // This is how much larger the focus element is than the element it surrounds + // (this is padding on each side) + var FOCUS_BUFFER = 5; + + var inRemoteUpdate = false; + + function suppressSync(element) { + var ignoreForms = TogetherJS.config.get("ignoreForms"); + if (ignoreForms === true) { + return true; + } + else { + return $(element).is(ignoreForms.join(",")); + } + } + + function maybeChange(event) { + // Called when we get an event that may or may not indicate a real change + // (like keyup in a textarea) + var tag = event.target.tagName; + if (tag == "TEXTAREA" || tag == "INPUT") { + change(event); + } + } + + function change(event) { + sendData({ + element: event.target, + value: getValue(event.target) + }); + } + + function sendData(attrs) { + var el = $(attrs.element); + assert(el); + var tracker = attrs.tracker; + var value = attrs.value; + if (inRemoteUpdate) { + return; + } + if (elementFinder.ignoreElement(el) || + (elementTracked(el) && !tracker) || + suppressSync(el)) { + return; + } + var location = elementFinder.elementLocation(el); + var msg = { + type: "form-update", + element: location + }; + if (isText(el) || tracker) { + var history = el.data("togetherjsHistory"); + if (history) { + if (history.current == value) { + return; + } + var delta = ot.TextReplace.fromChange(history.current, value); + assert(delta); + history.add(delta); + maybeSendUpdate(msg.element, history, tracker); + return; + } else { + msg.value = value; + msg.basis = 1; + el.data("togetherjsHistory", ot.SimpleHistory(session.clientId, value, 1)); + } + } else { + msg.value = value; + } + session.send(msg); + } + + function isCheckable(el) { + el = $(el); + var type = (el.prop("type") || "text").toLowerCase(); + if (el.prop("tagName") == "INPUT" && ["radio", "checkbox"].indexOf(type) != -1) { + return true; + } + return false; + } + + var editTrackers = {}; + var liveTrackers = []; + + TogetherJS.addTracker = function (TrackerClass, skipSetInit) { + assert(typeof TrackerClass === "function", "You must pass in a class"); + assert(typeof TrackerClass.prototype.trackerName === "string", + "Needs a .prototype.trackerName string"); + // Test for required instance methods. + "destroy update init makeInit tracked".split(/ /).forEach(function(m) { + assert(typeof TrackerClass.prototype[m] === "function", + "Missing required tracker method: "+m); + }); + // Test for required class methods. + "scan tracked".split(/ /).forEach(function(m) { + assert(typeof TrackerClass[m] === "function", + "Missing required tracker class method: "+m); + }); + editTrackers[TrackerClass.prototype.trackerName] = TrackerClass; + if (!skipSetInit) { + setInit(); + } + }; + + var AceEditor = util.Class({ + + trackerName: "AceEditor", + + constructor: function (el) { + this.element = $(el)[0]; + assert($(this.element).hasClass("ace_editor")); + this._change = this._change.bind(this); + this._editor().document.on("change", this._change); + }, + + tracked: function (el) { + return this.element === $(el)[0]; + }, + + destroy: function (el) { + this._editor().document.removeListener("change", this._change); + }, + + update: function (msg) { + this._editor().document.setValue(msg.value); + }, + + init: function (update, msg) { + this.update(update); + }, + + makeInit: function () { + return { + element: this.element, + tracker: this.trackerName, + value: this._editor().document.getValue() + }; + }, + + _editor: function () { + return this.element.env; + }, + + _change: function (e) { + // FIXME: I should have an internal .send() function that automatically + // asserts !inRemoteUpdate, among other things + if (inRemoteUpdate) { + return; + } + sendData({ + tracker: this.trackerName, + element: this.element, + value: this.getContent() + }); + }, + + getContent: function() { + return this._editor().document.getValue(); + } + }); + + AceEditor.scan = function () { + return $(".ace_editor"); + }; + + AceEditor.tracked = function (el) { + return !! $(el).closest(".ace_editor").length; + }; + + TogetherJS.addTracker(AceEditor, true /* skip setInit */); + + var CodeMirrorEditor = util.Class({ + trackerName: "CodeMirrorEditor", + + constructor: function (el) { + this.element = $(el)[0]; + assert(this.element.CodeMirror); + this._change = this._change.bind(this); + this._editor().on("change", this._change); + }, + + tracked: function (el) { + return this.element === $(el)[0]; + }, + + destroy: function (el) { + this._editor().off("change", this._change); + }, + + update: function (msg) { + this._editor().setValue(msg.value); + }, + + init: function (msg) { + if (msg.value) { + this.update(msg); + } + }, + + makeInit: function () { + return { + element: this.element, + tracker: this.trackerName, + value: this._editor().getValue() + }; + }, + + _change: function (editor, change) { + if (inRemoteUpdate) { + return; + } + sendData({ + tracker: this.trackerName, + element: this.element, + value: this.getContent() + }); + }, + + _editor: function () { + return this.element.CodeMirror; + }, + + getContent: function() { + return this._editor().getValue(); + } + }); + + CodeMirrorEditor.scan = function () { + var result = []; + var els = document.body.getElementsByTagName("*"); + var _len = els.length; + for (var i=0; i<_len; i++) { + var el = els[i]; + if (el.CodeMirror) { + result.push(el); + } + } + return $(result); + }; + + CodeMirrorEditor.tracked = function (el) { + el = $(el)[0]; + while (el) { + if (el.CodeMirror) { + return true; + } + el = el.parentNode; + } + return false; + }; + + TogetherJS.addTracker(CodeMirrorEditor, true /* skip setInit */); + + var CKEditor = util.Class({ + trackerName: "CKEditor", + + constructor: function (el) { + this.element = $(el)[0]; + assert(CKEDITOR); + assert(CKEDITOR.dom.element.get(this.element)); + this._change = this._change.bind(this); + // FIXME: change event is available since CKEditor 4.2 + this._editor().on("change", this._change); + }, + tracked: function (el) { + return this.element === $(el)[0]; + }, + destroy: function (el) { + this._editor().removeListener("change", this._change); + }, + + update: function (msg) { + //FIXME: use setHtml instead of setData to avoid frame reloading overhead + this._editor().editable().setHtml(msg.value); + }, + + init: function (update, msg) { + this.update(update); + }, + + makeInit: function () { + return { + element: this.element, + tracker: this.trackerName, + value: this.getContent() + }; + }, + + _change: function (e) { + if (inRemoteUpdate) { + return; + } + sendData({ + tracker: this.trackerName, + element: this.element, + value: this.getContent() + }); + }, + + _editor: function () { + return CKEDITOR.dom.element.get(this.element).getEditor(); + }, + + getContent: function () { + return this._editor().getData(); + } + }); + + CKEditor.scan = function () { + var result = []; + if (typeof CKEDITOR == "undefined") { + return; + } + var editorInstance; + for (var instanceIdentifier in CKEDITOR.instances) { + editorInstance = document.getElementById(instanceIdentifier) || document.getElementsByName(instanceIdentifier)[0]; + if (editorInstance) { + result.push(editorInstance); + } + } + return $(result); + }; + + CKEditor.tracked = function (el) { + if (typeof CKEDITOR == "undefined") { + return false; + } + el = $(el)[0]; + return !! (CKEDITOR.dom.element.get(el) && CKEDITOR.dom.element.get(el).getEditor()); + }; + + TogetherJS.addTracker(CKEditor, true /* skip setInit */); + + //////////////////// BEGINNING OF TINYMCE //////////////////////// + var tinymceEditor = util.Class({ + trackerName: "tinymceEditor", + + constructor: function (el) { + this.element = $(el)[0]; + assert($(this.element).attr('id').indexOf('mce_') != -1); + this._change = this._change.bind(this); + this._editor().on("input keyup cut paste change", this._change); + }, + + tracked: function (el) { + return this.element === $(el)[0]; + }, + + destroy: function (el) { + this._editor().destory(); + }, + + update: function (msg) { + this._editor().setContent(msg.value, {format: 'raw'}); + }, + + init: function (update, msg) { + this.update(update); + }, + + makeInit: function () { + return { + element: this.element, + tracker: this.trackerName, + value: this.getContent() + }; + }, + + _change: function (e) { + if (inRemoteUpdate) { + return; + } + sendData({ + tracker: this.trackerName, + element: this.element, + value: this.getContent() + }); + }, + + _editor: function () { + if (typeof tinymce == "undefined") { + return; + } + return $(this.element).data("tinyEditor"); + }, + + getContent: function () { + return this._editor().getContent(); + } + }); + + tinymceEditor.scan = function () { + //scan all the elements that contain tinyMCE editors + if (typeof tinymce == "undefined") { + return; + } + var result = []; + $(window.tinymce.editors).each(function (i, ed) { + result.push($('#'+ed.id)); + //its impossible to retrieve a single editor from a container, so lets store it + $('#'+ed.id).data("tinyEditor", ed); + }); + return $(result); + }; + + tinymceEditor.tracked = function (el) { + if (typeof tinymce == "undefined") { + return false; + } + el = $(el)[0]; + return !!$(el).data("tinyEditor"); + /*var flag = false; + $(window.tinymce.editors).each(function (i, ed) { + if (el.id == ed.id) { + flag = true; + } + }); + return flag;*/ + }; + + TogetherJS.addTracker(tinymceEditor, true); + ///////////////// END OF TINYMCE /////////////////////////////////// + + function buildTrackers() { + assert(! liveTrackers.length); + util.forEachAttr(editTrackers, function (TrackerClass) { + var els = TrackerClass.scan(); + if (els) { + $.each(els, function () { + var tracker = new TrackerClass(this); + $(this).data("togetherjsHistory", ot.SimpleHistory(session.clientId, tracker.getContent(), 1)); + liveTrackers.push(tracker); + }); + } + }); + } + + function destroyTrackers() { + liveTrackers.forEach(function (tracker) { + tracker.destroy(); + }); + liveTrackers = []; + } + + function elementTracked(el) { + var result = false; + util.forEachAttr(editTrackers, function (TrackerClass) { + if (TrackerClass.tracked(el)) { + result = true; + } + }); + return result; + } + + function getTracker(el, name) { + el = $(el)[0]; + for (var i=0; i= STEPS.length) { + session.emit("startup-ready"); + return; + } + currentStep = STEPS[index]; + handlers[currentStep](startup.start); + }; + + var handlers = { + + browserBroken: function (next) { + if (window.WebSocket) { + next(); + return; + } + windowing.show("#togetherjs-browser-broken", { + onClose: function () { + session.close(); + } + }); + if ($.browser.msie) { + $("#togetherjs-browser-broken-is-ie").show(); + } + }, + + browserUnsupported: function (next) { + if (! $.browser.msie) { + next(); + return; + } + var cancel = true; + windowing.show("#togetherjs-browser-unsupported", { + onClose: function () { + if (cancel) { + session.close(); + } else { + next(); + } + } + }); + $("#togetherjs-browser-unsupported-anyway").click(function () { + cancel = false; + }); + }, + + sessionIntro: function (next) { + // pgbovine - pop open chat + windowing.show("#togetherjs-chat"); + + if ((! session.isClient) || ! session.firstRun) { + next(); + return; + } + TogetherJS.config.close("suppressJoinConfirmation"); + if (TogetherJS.config.get("suppressJoinConfirmation")) { + next(); + return; + } + var cancelled = false; + windowing.show("#togetherjs-intro", { + onClose: function () { + if (! cancelled) { + next(); + } + } + }); + $("#togetherjs-intro .togetherjs-modal-dont-join").click(function () { + cancelled = true; + windowing.hide(); + session.close("declined-join"); + }); + }, + + // pgbovine - disable boilerplate walkthrough popup + walkthrough: function (next) { + next(); + }, + /* + walkthrough: function (next) { + storage.settings.get("seenIntroDialog").then(function (seenIntroDialog) { + if (seenIntroDialog) { + next(); + return; + } + require(["walkthrough"], function (walkthrough) { + walkthrough.start(true, function () { + storage.settings.set("seenIntroDialog", true); + next(); + }); + }); + }); + }, + */ + + share: function (next) { + TogetherJS.config.close("suppressInvite"); + if (session.isClient || (! session.firstRun) || + TogetherJS.config.get("suppressInvite")) { + next(); + return; + } + require(["windowing"], function (windowing) { + windowing.show("#togetherjs-share"); + // FIXME: no way to detect when the window is closed + // If there was a next() step then it would not work + }); + } + + }; + + return startup; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('templates-localized',[], function () { + return { + "interface": "__interface_html__", + walkthrough: "__walkthrough_html__", + names: "__names__" + }; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('videos',["jquery", "util", "session", "elementFinder"], +function ($, util, session, elementFinder) { + + var listeners = []; + + var TIME_UPDATE = 'timeupdate'; + var MIRRORED_EVENTS = ['play', 'pause']; + + var TOO_FAR_APART = 3000; + + session.on("reinitialize", function () { + unsetListeners(); + setupListeners(); + }); + + session.on("ui-ready", setupListeners); + + function setupListeners() { + var videos = $('video'); + setupMirroredEvents(videos); + setupTimeSync(videos); + } + + function setupMirroredEvents(videos) { + var currentListener; + MIRRORED_EVENTS.forEach(function (eventName) { + currentListener = makeEventSender(eventName); + videos.on(eventName, currentListener); + listeners.push({ + name: eventName, + listener: currentListener + }); + }); + } + + function makeEventSender(eventName) { + return function (event, options) { + var element = event.target; + options || (options = {}); + if (!options.silent) { + session.send({ + type: ('video-'+eventName), + location: elementFinder.elementLocation(element), + position: element.currentTime + }); + } + }; + } + + function setupTimeSync(videos) { + videos.each(function(i, video) { + var onTimeUpdate = makeTimeUpdater(); + $(video).on(TIME_UPDATE, onTimeUpdate); + listeners.push({ + name: TIME_UPDATE, + listener: onTimeUpdate + }); + }); + } + + function makeTimeUpdater() { + var last = 0; + return function (event) { + var currentTime = event.target.currentTime; + if(areTooFarApart(currentTime, last)){ + makeEventSender(TIME_UPDATE)(event); + } + last = currentTime; + }; + } + + function areTooFarApart(currentTime, lastTime) { + var secDiff = Math.abs(currentTime - lastTime); + var milliDiff = secDiff * 1000; + return milliDiff > TOO_FAR_APART; + } + + session.on("close", unsetListeners); + + function unsetListeners() { + var videos = $('video'); + listeners.forEach(function (event) { + videos.off(event.name, event.listener); + }); + listeners = []; + } + + + session.hub.on('video-timeupdate', function (msg) { + var element = $findElement(msg.location); + var oldTime = element.prop('currentTime'); + var newTime = msg.position; + + //to help throttle uneccesary position changes + if(areTooFarApart(oldTime, newTime)){ + setTime(element, msg.position); + } + }); + + MIRRORED_EVENTS.forEach( function (eventName) { + session.hub.on("video-"+eventName, function (msg) { + var element = $findElement(msg.location); + + setTime(element, msg.position); + + element.trigger(eventName, {silent: true}); + }); + }); + + //Currently does not discriminate between visible and invisible videos + function $findElement(location) { + return $(elementFinder.findElement(location)); + } + + function setTime(video, time) { + video.prop('currentTime', time); + } + +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('walkthrough',["util", "ui", "jquery", "windowing", "templates", "templating", "session", "peers"], function (util, ui, $, windowing, templates, templating, session, peers) { + var assert = util.assert; + var walkthrough = util.Module("walkthrough"); + var onHideAll = null; + var container = null; + + var slides = null; + + walkthrough.start = function (firstTime, doneCallback) { + if (! container) { + container = $(templates("walkthrough")); + container.hide(); + ui.container.append(container); + slides = container.find(".togetherjs-walkthrough-slide"); + slides.hide(); + var progress = $("#togetherjs-walkthrough-progress"); + slides.each(function (index) { + var bullet = templating.sub("walkthrough-slide-progress"); + progress.append(bullet); + bullet.click(function () { + show(index); + }); + }); + container.find("#togetherjs-walkthrough-previous").click(previous); + container.find("#togetherjs-walkthrough-next").click(next); + ui.prepareShareLink(container); + container.find(".togetherjs-self-name").bind("keyup", function (event) { + var val = $(event.target).val(); + peers.Self.update({name: val}); + }); + container.find(".togetherjs-swatch").click(function () { + var picker = $("#togetherjs-pick-color"); + if (picker.is(":visible")) { + picker.hide(); + return; + } + picker.show(); + picker.find(".togetherjs-swatch-active").removeClass("togetherjs-swatch-active"); + picker.find(".togetherjs-swatch[data-color=\"" + peers.Self.color + "\"]").addClass("togetherjs-swatch-active"); + var location = container.find(".togetherjs-swatch").offset(); + picker.css({ + top: location.top, + // The -7 comes out of thin air, but puts it in the right place: + left: location.left-7 + }); + }); + if (session.isClient) { + container.find(".togetherjs-if-creator").remove(); + container.find(".togetherjs-ifnot-creator").show(); + } else { + container.find(".togetherjs-if-creator").show(); + container.find(".togetherjs-ifnot-creator").remove(); + } + TogetherJS.config.track("siteName", function (value) { + value = value || document.title; + container.find(".togetherjs-site-name").text(value); + }); + ui.activateAvatarEdit(container, { + onSave: function () { + container.find("#togetherjs-avatar-when-saved").show(); + container.find("#togetherjs-avatar-when-unsaved").hide(); + }, + onPending: function () { + container.find("#togetherjs-avatar-when-saved").hide(); + container.find("#togetherjs-avatar-when-unsaved").show(); + } + }); + // This triggers substititions in the walkthrough: + peers.Self.update({}); + session.emit("new-element", container); + } + assert(typeof firstTime == "boolean", "You must provide a firstTime boolean parameter"); + if (firstTime) { + container.find(".togetherjs-walkthrough-firsttime").show(); + container.find(".togetherjs-walkthrough-not-firsttime").hide(); + } else { + container.find(".togetherjs-walkthrough-firsttime").hide(); + container.find(".togetherjs-walkthrough-not-firsttime").show(); + } + onHideAll = doneCallback; + show(0); + windowing.show(container); + }; + + function show(index) { + slides.hide(); + $(slides[index]).show(); + var bullets = container.find("#togetherjs-walkthrough-progress .togetherjs-walkthrough-slide-progress"); + bullets.removeClass("togetherjs-active"); + $(bullets[index]).addClass("togetherjs-active"); + var $next = $("#togetherjs-walkthrough-next").removeClass("togetherjs-disabled"); + var $previous = $("#togetherjs-walkthrough-previous").removeClass("togetherjs-disabled"); + if (index == slides.length - 1) { + $next.addClass("togetherjs-disabled"); + } else if (index === 0) { + $previous.addClass("togetherjs-disabled"); + } + } + + function previous() { + var index = getIndex(); + index--; + if (index < 0) { + index = 0; + } + show(index); + } + + function next() { + var index = getIndex(); + index++; + if (index >= slides.length) { + index = slides.length-1; + } + show(index); + } + + function getIndex() { + var active = slides.filter(":visible"); + if (! active.length) { + return 0; + } + for (var i=0; i"); + $canvas[0].height = session.AVATAR_SIZE; + $canvas[0].width = session.AVATAR_SIZE; + var context = $canvas[0].getContext("2d"); + context.arc(session.AVATAR_SIZE/2, session.AVATAR_SIZE/2, session.AVATAR_SIZE/2, 0, Math.PI*2); + context.closePath(); + context.clip(); + context.drawImage($video[0], (session.AVATAR_SIZE - width) / 2, 0, width, height); + savePicture($canvas[0].toDataURL("image/png")); + } + + $upload.on("change", function () { + var reader = new FileReader(); + reader.onload = function () { + // FIXME: I don't actually know it's JPEG, but it's probably a + // good enough guess: + var url = "data:image/jpeg;base64," + util.blobToBase64(this.result); + convertImage(url, function (result) { + savePicture(result); + }); + }; + reader.onerror = function () { + console.error("Error reading file:", this.error); + }; + reader.readAsArrayBuffer(this.files[0]); + }); + + function convertImage(imageUrl, callback) { + var $canvas = $(""); + $canvas[0].height = session.AVATAR_SIZE; + $canvas[0].width = session.AVATAR_SIZE; + var context = $canvas[0].getContext("2d"); + var img = new Image(); + img.src = imageUrl; + // Sometimes the DOM updates immediately to call + // naturalWidth/etc, and sometimes it doesn't; using setTimeout + // gives it a chance to catch up + setTimeout(function () { + var width = img.naturalWidth || img.width; + var height = img.naturalHeight || img.height; + width = width * (session.AVATAR_SIZE / height); + height = session.AVATAR_SIZE; + context.drawImage(img, 0, 0, width, height); + callback($canvas[0].toDataURL("image/png")); + }); + } + + }); + + /**************************************** + * RTC support + */ + + function audioButton(selector) { + ui.displayToggle(selector); + if (selector == "#togetherjs-audio-incoming") { + $("#togetherjs-audio-button").addClass("togetherjs-animated").addClass("togetherjs-color-alert"); + } else { + $("#togetherjs-audio-button").removeClass("togetherjs-animated").removeClass("togetherjs-color-alert"); + } + } + + session.on("ui-ready", function () { + $("#togetherjs-audio-button").click(function () { + if ($("#togetherjs-rtc-info").is(":visible")) { + windowing.hide(); + return; + } + if (session.RTCSupported) { + enableAudio(); + } else { + windowing.show("#togetherjs-rtc-not-supported"); + } + }); + + if (! session.RTCSupported) { + audioButton("#togetherjs-audio-unavailable"); + return; + } + audioButton("#togetherjs-audio-ready"); + + var audioStream = null; + var accepted = false; + var connected = false; + var $audio = $("#togetherjs-audio-element"); + var offerSent = null; + var offerReceived = null; + var offerDescription = false; + var answerSent = null; + var answerReceived = null; + var answerDescription = false; + var _connection = null; + var iceCandidate = null; + + function enableAudio() { + accepted = true; + storage.settings.get("dontShowRtcInfo").then(function (dontShow) { + if (! dontShow) { + windowing.show("#togetherjs-rtc-info"); + } + }); + if (! audioStream) { + startStreaming(connect); + return; + } + if (! connected) { + connect(); + } + toggleMute(); + } + + ui.container.find("#togetherjs-rtc-info .togetherjs-dont-show-again").change(function () { + storage.settings.set("dontShowRtcInfo", this.checked); + }); + + function error() { + console.warn.apply(console, arguments); + var s = ""; + for (var i=0; i= expected) { + close(); + } else { + def.notify(users); + } + } + } + console.log("users", users); + }; + channel.send({ + type: "who", + "server-echo": true, + clientId: null + }); + var timeout = setTimeout(function () { + close(); + }, MAX_RESPONSE_TIME); + function close() { + if (timeout) { + clearTimeout(timeout); + } + if (lateResponseTimeout) { + clearTimeout(lateResponseTimeout); + } + channel.close(); + def.resolve(users); + } + }); + }; + + who.invite = function (hubUrl, clientId) { + return util.Deferred(function (def) { + var channel = channels.WebSocketChannel(hubUrl); + var id = util.generateId(); + channel.onmessage = function (msg) { + if (msg.type == "invite" && msg.inviteId == id) { + channel.close(); + def.resolve(); + } + }; + var userInfo = session.makeHelloMessage(false); + delete userInfo.type; + userInfo.clientId = session.clientId; + channel.send({ + type: "invite", + inviteId: id, + url: session.shareUrl(), + userInfo: userInfo, + forClientId: clientId, + clientId: null, + "server-echo": true + }); + }); + }; + + who.ExternalPeer = util.Class({ + isSelf: false, + isExternal: true, + constructor: function (id, attrs) { + attrs = attrs || {}; + assert(id); + this.id = id; + this.identityId = attrs.identityId || null; + this.status = attrs.status || "live"; + this.idle = attrs.status || "active"; + this.name = attrs.name || null; + this.avatar = attrs.avatar || null; + this.color = attrs.color || "#00FF00"; + this.lastMessageDate = 0; + this.view = ui.PeerView(this); + }, + + className: function (prefix) { + prefix = prefix || ""; + return prefix + util.safeClassName(this.id); + } + + }); + + return who; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http:// mozilla.org/MPL/2.0/. */ + +define('youtubeVideos',["jquery", "util", "session", "elementFinder"], +function ($, util, session, elementFinder) { + + // constant var to indicate whether two players are too far apart in sync + var TOO_FAR_APART = 3000; + // embedded youtube iframes + var youTubeIframes = []; + // youtube API load delay + var API_LOADING_DELAY = 2000; + + session.on("reinitialize", function () { + if (TogetherJS.config.get("youtube")) { + prepareYouTube(); + } + }); + + session.on("close", function () { + $(youTubeIframes).each(function (i, iframe) { + // detach players from iframes + $(iframe).removeData("togetherjs-player"); + $(iframe).removeData("dontPublish"); + $(iframe).removeData("currentVideoId"); + // disable iframeAPI + $(iframe).removeAttr("enablejsapi"); + // remove unique youtube iframe indicators + var id = $(iframe).attr("id") || ""; + if (id.indexOf("youtube-player") === 0) { + // An id we added + $(iframe).removeAttr("id"); + } + youTubeIframes = []; + }); + }); + + TogetherJS.config.track("youtube", function (track, previous) { + if (track && ! previous) { + prepareYouTube(); + // You can enable youtube dynamically, but can't turn it off: + TogetherJS.config.close("youtube"); + } + }); + + function prepareYouTube() { + // setup iframes first + setupYouTubeIframes(); + + // this function should be global so it can be called when API is loaded + window.onYouTubeIframeAPIReady = function() { + // YouTube API is ready + $(youTubeIframes).each(function (i, iframe) { + var player = new YT.Player(iframe.id, { // get the reference to the already existing iframe + events: { + 'onReady': insertPlayer, + 'onStateChange': publishPlayerStateChange + } + }); + }); + }; + + if (window.YT === undefined) { + // load necessary API + // it calls onYouTubeIframeAPIReady automatically when the API finishes loading + var tag = document.createElement('script'); + tag.src = "https://www.youtube.com/iframe_api"; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + } else { + // manually invoke APIReady function when the API was already loaded by user + onYouTubeIframeAPIReady(); + } + + // give each youtube iframe a unique id and set its enablejsapi param to true + function setupYouTubeIframes() { + var iframes = $('iframe'); + iframes.each(function (i, iframe) { + // if the iframe's unique id is already set, skip it + // FIXME: what if the user manually sets an iframe's id (i.e. "#my-youtube")? + // maybe we should set iframes everytime togetherjs is reinitialized? + if (($(iframe).attr("src") || "").indexOf("youtube") != -1 && !$(iframe).attr("id")) { + $(iframe).attr("id", "youtube-player"+i); + $(iframe).attr("enablejsapi", 1); + youTubeIframes[i] = iframe; + } + }); + } // iframes are ready + + function insertPlayer(event) { + // only when it is READY, attach a player to its iframe + var currentPlayer = event.target; + var currentIframe = currentPlayer.a; + // check if a player is already attached in case of being reinitialized + if (!$(currentIframe).data("togetherjs-player")) { + $(currentIframe).data("togetherjs-player", currentPlayer); + // initialize its dontPublish flag as well + $(currentIframe).data("dontPublish", false); + // store its current video's id + var currentVideoId = getVideoIdFromUrl(currentPlayer.getVideoUrl()); + $(currentIframe).data("currentVideoId", currentVideoId); + } + } + } // end of prepareYouTube + + function publishPlayerStateChange(event) { + var target = event.target; + var currentIframe = target.a; + // FIXME: player object retrieved from event.target has an incomplete set of essential functions + // this is most likely due to a recently-introduced problem with current YouTube API as others have been reporting the same issue (12/18/`13) + //var currentPlayer = target; + //var currentTime = currentPlayer.getCurrentTime(); + var currentPlayer = $(currentIframe).data("togetherjs-player"); + var currentTime = target.k.currentTime; + var iframeLocation = elementFinder.elementLocation(currentIframe); + + if ($(currentPlayer).data("seek")) { + $(currentPlayer).removeData("seek"); + return; + } + + // do not publish if playerState was changed by other users + if ($(currentIframe).data("dontPublish")) { + // make it false again so it can start publishing events of its own state changes + $(currentIframe).data("dontPublish", false); + return; + } + + // notify other people that I changed the player state + if (event.data == YT.PlayerState.PLAYING) { + + var currentVideoId = isDifferentVideoLoaded(currentIframe); + if (currentVideoId) { + // notify that I just loaded another video + publishDifferentVideoLoaded(iframeLocation, currentVideoId); + // update current video id + $(currentIframe).data("currentVideoId", currentVideoId); + } else { + session.send({ + type: "playerStateChange", + element: iframeLocation, + playerState: 1, + playerTime: currentTime + }); + } + } else if (event.data == YT.PlayerState.PAUSED) { + session.send({ + type: "playerStateChange", + element: iframeLocation, + playerState: 2, + playerTime: currentTime + }); + } else { + // do nothing when the state is buffering, cued, or ended + return; + } + } + + function publishDifferentVideoLoaded(iframeLocation, videoId) { + session.send({ + type: "differentVideoLoaded", + videoId: videoId, + element: iframeLocation + }); + } + + session.hub.on('playerStateChange', function (msg) { + var iframe = elementFinder.findElement(msg.element); + var player = $(iframe).data("togetherjs-player"); + var currentTime = player.getCurrentTime(); + var currentState = player.getPlayerState(); + + if (currentState != msg.playerState) { + $(iframe).data("dontPublish", true); + } + + if (msg.playerState == 1) { + player.playVideo(); + // seekTo() updates the video's time and plays it if it was already playing + // and pauses it if it was already paused + if (areTooFarApart(currentTime, msg.playerTime)) { + player.seekTo(msg.playerTime, true); + } + } else if (msg.playerState == 2) { + // When YouTube videos are advanced while playing, + // Chrome: pause -> pause -> play (onStateChange is called even when it is from pause to pause) + // FireFox: buffering -> play -> buffering -> play + // We must prevent advanced videos from going out of sync + player.pauseVideo(); + if (areTooFarApart(currentTime, msg.playerTime)) { + // "seek" flag will help supress publishing unwanted state changes + $(player).data("seek", true); + player.seekTo(msg.playerTime, true); + } + } + }); + + // if a late user joins a channel, synchronize his videos + session.hub.on('hello', function () { + // wait a couple seconds to make sure the late user has finished loading API + setTimeout(synchronizeVideosOfLateGuest, API_LOADING_DELAY); + }); + + session.hub.on('synchronizeVideosOfLateGuest', function (msg) { + var iframe = elementFinder.findElement(msg.element); + var player = $(iframe).data("togetherjs-player"); + // check if another video had been loaded to an existing iframe before I joined + var currentVideoId = $(iframe).data("currentVideoId"); + if (msg.videoId != currentVideoId) { + $(iframe).data("currentVideoId", msg.videoId); + player.loadVideoById(msg.videoId, msg.playerTime, 'default'); + } else { + // if the video is only cued, I do not have to do anything to sync + if (msg.playerState != 5) { + player.seekTo(msg.playerTime, true); + } + } + }); + + session.hub.on('differentVideoLoaded', function (msg) { + // load a new video if the host has loaded one + var iframe = elementFinder.findElement(msg.element); + var player = $(iframe).data("togetherjs-player"); + player.loadVideoById(msg.videoId, 0, 'default'); + $(iframe).data("currentVideoId", msg.videoId); + + }); + + function synchronizeVideosOfLateGuest() { + youTubeIframes.forEach(function (iframe) { + var currentPlayer = $(iframe).data("togetherjs-player"); + var currentVideoId = getVideoIdFromUrl(currentPlayer.getVideoUrl()); + var currentState = currentPlayer.getPlayerState(); + var currentTime = currentPlayer.getCurrentTime(); + var iframeLocation = elementFinder.elementLocation(iframe); + session.send({ + type: "synchronizeVideosOfLateGuest", + element: iframeLocation, + videoId: currentVideoId, + playerState: currentState, //this might be necessary later + playerTime: currentTime + }); + }); + } + + function isDifferentVideoLoaded(iframe) { + var lastVideoId = $(iframe).data("currentVideoId"); + var currentPlayer = $(iframe).data("togetherjs-player"); + var currentVideoId = getVideoIdFromUrl(currentPlayer.getVideoUrl()); + + // since url forms of iframe src and player's video url are different, + // I have to compare the video ids + if (currentVideoId != lastVideoId) { + return currentVideoId; + } else { + return false; + } + } + + // parses videoId from the url returned by getVideoUrl function + function getVideoIdFromUrl(videoUrl) { + var videoId = videoUrl.split('v=')[1]; + //Chrome and Firefox have different positions for parameters + var ampersandIndex = videoId.indexOf('&'); + if (ampersandIndex != -1) { + videoId = videoId.substring(0, ampersandIndex); + } + return videoId; + } + + function areTooFarApart(myTime, theirTime) { + var secDiff = Math.abs(myTime - theirTime); + var milliDiff = secDiff * 1000; + return milliDiff > TOO_FAR_APART; + } +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('templates-en-US',[], function () { + return { + "interface": "<% /*\n This is basically all the markup and interface for TogetherJS.\n Note all links should be like http://localhost:8080/togetherjs/*\n these links are rewritten with the location where TogetherJS was deployed.\n\n This file is inlined into togetherjs/templates.js\n*/ %>\n
    \n\n \n
    \n
    \n \n \"drag\"\n \n \n \"drag\"\n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n
    \n\n \n
    \n
    Update avatar
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n \n or\n \n
    \n
    \n\n \n
    \n
    Invite a friend
    \n
    \n
    \n

    Copy and paste this link over IM or email:

    \n \n
    \n
    \n

    Copy and paste this link over IM or email:

    \n \n \n
    \n
    \n
    \n\n \n
    \n
    Participants
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    \n\n
    \n

    Role:\n \n

    \n\n

    Currently at:\n \n

    \n\n

    Status:\n \n

    \n\n

    Follow this participant:\n \n \n

    \n\n
    \n\n
    \n \n \n \n
    \n is on the same page as you.\n
    \n
    \n
    \n\n \n
    \n
    Chat
    \n
    \n
    \n \n & You\n
    \n \n
    \n Invite someone to chat with URL at top of page\n
    \n\n
    \n\n
    \n\n \n
    \n
    \n
    HH:MM AM/PM
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    left the session.
    \n
    \n
    \n
    declined to join the session.
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    joined the session.
    \n
    \n
    \n\n \n
    \n \n
    \n\n \n \n\n \n
    \n
    \n
    \n
    \n \n is on the same page as you.\n
    \n
    \n \n has gone to: \n
    \n \n \n
    \n\n \n\n
    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n
    \n \n
    \n
    \n\n \n
    \n\n
    Audio Chat
    \n
    \n

    \n Activate your browser microphone near your URL bar above.\n

    \n

    \n Talking on your microphone through your web browser is an experimental feature.\n

    \n

    \n Read more about Audio Chat here.\n

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Audio Chat
    \n\n
    \n

    Audio chat requires you to use a newer browser!

    \n

    \n Live audio chat requires a newer (or different) browser than you're using.\n

    \n

    \n See this pagefor more information and a list of supported browsers.\n

    \n
    \n\n
    \n
    \n \n
    \n
    \n
    \n\n \n
    \n \"\"\n \"[close]\"\n
    \n
    \n
    \n\n \n
    \n
    \n \n [nickname]\n \n
    \n
    \n
    \"\" Update your name
    \n
    \"\" Change avatar
    \n
    Pick profile color
    \n
    \n
    Help
    \n
    Feedback
    \n
    \n
    \n
    \n
    Refresh users
    \n
    Invite anyone
    \n
    \n
    \n
    \"\" End TogetherJS
    \n
    \n\n \n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    Settings and Profile
    \n
    \n
    \n \n \n
    \n
    \n
    \"\" Update your name
    \n
    \"\" Change avatar
    \n
    Pick profile color
    \n
    \n
    Help
    \n
    Feedback
    \n
    \n
    \"\" End TOOL_NAME
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    Update Name
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n \n \n \n \n\n \n
    \n
    Join TOOL_NAME session?
    \n
    \n

    Your friend has asked you to join their TOOL_SITE_LINK browser session to collaborate in real-time!

    \n

    Would you like to join their session?

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Sorry
    \n\n
    \n

    \n We're sorry, TOOL_NAME doesn't work with this browser. Please upgrade to a supported browser to try TOOL_NAME.\n

    \n\n

    \n We need your help fixing TogetherJS on Internet Explorer! Here are a list of IE GitHub issues we need fixed that you can work on.\n Internet Explorer is currently not supported. If you do want to try out TogetherJS, we'd suggest using Firefox or Chrome.\n

    \n
    \n\n
    \n \n
    \n\n
    \n\n \n
    \n
    Unsupported Browser
    \n\n
    \n

    \n We need your help fixing TogetherJS on Internet Explorer! Here are a list of IE GitHub issues we need fixed that you can work on.\n Internet Explorer is currently not supported. If you do want to try out TogetherJS, we'd suggest using Firefox or Chrome.\n

    \n\n

    You can continue to try to use TOOL_NAME, but you are likely to hit lots of bugs. So be warned.

    \n\n
    \n\n
    \n \n \n
    \n\n
    \n\n
    \n
    End session?
    \n
    \n

    \n Are you sure you'd like to end your TOOL_NAME session?\n

    \n
    \n
    \n \n or\n \n
    \n
    \n\n
    \n
    Feedback
    \n \n \n
    \n\n
    \n \n
    \n
    Following to new URL...
    \n
    \n
    \n Following\n \n to \n
    \n
    \n\n \n
    \n
    \n
    \n \n has invited anyone\n you\n to \n
    \n
    \n\n
    \n\n \n
    \n
    \n\n \n
    \n\n \n
    \n\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n
    \n\n \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    \n", + walkthrough: "\n
    \n
    You're using TOOL_NAME!
    \n\n
    \n
    \n\n
    \n

    \n\t

    TOOL_NAME is a service for your website that makes it easy to collaborate in real-time on SITE_NAME

    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n

    Set up your avatar, name and user color above. If you'd like to update it later, you can click your Profile button.

    \n
    \n
    \n

    \n

    Change your avatar, name and user color using the Profile button.

    \n
    \n
    \n\n
    \n

    \n

    \n

    You can invite more friends to the session by sending the invite link in the TOOL_NAME dock.

    \n

    \n \n Copy and paste this link into IM or email to invite friends.\n \n \n

    \n

    Send the above link to a friend so they can join your session! You can find this invite link on the TOOL_NAME dock as well.

    \n
    \n\n
    \n

    \n

    Friends who join your TOOL_NAME session will appear here. You can click their avatars to see more.

    \n
    \n\n
    \n

    \n

    When your friends join you in your TOOL_NAME session, you can chat with them here!

    \n
    \n\n
    \n

    \n

    If your browser supports it, click the microphone icon to begin a audio chat. Learn more about this experimental feature here.

    \n
    \n\n
    \n

    \n

    Alright, you're ready to use TOOL_NAME. Now start collaborating on SITE_NAME!

    \n
    \n\n
    \n \n \n
    \n
    \n
    \n\n
    \n \n
    \n\n
    \n", + names: "Friendly Fox, Brilliant Beaver, Observant Owl, Gregarious Giraffe, Wild Wolf, Silent Seal, Wacky Whale, Curious Cat, Intelligent Iguana" + }; +}); + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define('templates-ru',[], function () { + return { + "interface": "<% /*\n This is basically all the markup and interface for TogetherJS.\n Note all links should be like http://localhost:8080/togetherjs/*\n these links are rewritten with the location where TogetherJS was deployed.\n\n This file is inlined into togetherjs/templates.js\n*/ %>\n
    \n\n \n
    \n
    \n \n \"drag\"\n \n \n \"drag\"\n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n
    \n\n \n
    \n
    Обновить аватар
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n \n или\n \n
    \n
    \n\n \n
    \n
    Пригласить друга
    \n
    \n
    \n

    Скопируйте эту ссылку и приклейте её в IM или в имейл:

    \n \n
    \n
    \n

    Скопируйте эту ссылку и приклейте её в IM или в имейл:

    \n \n \n
    \n
    \n
    \n\n \n
    \n
    Участники
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    \n\n
    \n

    Роль:\n \n

    \n\n

    Сейчас на:\n \n

    \n\n

    Статус:\n \n

    \n\n

    Следовать за этим участником:\n \n \n

    \n\n
    \n\n
    \n \n \n \n
    \n с Вами на одной странице.\n
    \n
    \n
    \n\n \n
    \n
    Чат
    \n
    \n
    \n \n & Вы\n
    \n \n
    \n Nobody is here yet. Please wait ...\n
    \n\n
    \n\n
    \n\n \n
    \n
    \n
    HH:MM AM/PM
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    покинул сеанс.
    \n
    \n
    \n
    отказался присоединиться к сеансу.
    \n
    \n
    \n
    \n\n \n
    \n
    \n
    присоединился к сеансу.
    \n
    \n
    \n\n \n
    \n \n
    \n\n \n \n\n \n
    \n
    \n
    \n
    \n \n с Вами на одной странице.\n
    \n
    \n \n отправился на: \n
    \n \n \n
    \n\n \n\n
    \n
    \n
    \n
    \n
    \n\n
    \n \n
    \n
    \n \n
    \n
    \n\n \n
    \n\n
    Аудио-чат
    \n
    \n

    \n Включите микрофон браузера возле адресной строки вверху.\n

    \n

    \n Разговор по микрофону через веб-браузер - экспериментальное свойство.\n

    \n

    \n Почитайте больше об аудио-чате здесь.\n

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Аудио-чат
    \n\n
    \n

    Аудио-чат требует, чтобы Вы использовалибраузер поновее!

    \n

    \n Для живого аудио-чата требуется более новый (или другой) браузер, чем тот, который Вы используете.\n

    \n

    \n Посмотрите на 'этой странице' дополнительную информацию и список поддерживаемых браузеров.\n

    \n
    \n\n
    \n
    \n \n
    \n
    \n
    \n\n \n
    \n \"\"\n \"[close]\"\n
    \n
    \n
    \n\n \n
    \n
    \n \n [nickname]\n \n
    \n
    \n
    \"\" Обновить своё имя
    \n
    \"\" Изменить аватар
    \n
    Выбрать цвет профиля
    \n
    \n
    Помощь
    \n
    Отзывы и предложения
    \n
    \n
    \n
    \n
    Refresh users
    \n
    Пригласить кого-нибудь
    \n
    \n
    \n
    \"\" Закончить TogetherJS
    \n
    \n\n \n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    Установки и профиль
    \n
    \n
    \n \n \n
    \n
    \n
    \"\" Обновить своё имя
    \n
    \"\" Изменить аватар
    \n
    Выбрать цвет профиля
    \n
    \n
    Помощь
    \n
    Отзывы и предложения
    \n
    \n
    \"\" Закончить TOOL_NAME
    \n
    \n
    \n \n
    \n
    \n\n \n
    \n
    Обновить имя
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n \n \n \n \n\n \n
    \n
    Присоединиться к сеансу TOOL_NAME?
    \n
    \n

    Ваш друг просит Вас присоединиться к его TOOL_SITE_LINK браузер-сеансу, чтобы сотрудничать с Вами в реальном времени!

    \n

    Хотели бы Вы присоединиться к его сеансу?

    \n
    \n\n
    \n \n \n
    \n
    \n\n \n
    \n
    Извините
    \n\n
    \n

    \n Извините, TOOL_NAME не работает на этом браузере. Просьба обновиться до поддерживаемого браузера, чтобы попробовать TOOL_NAME.\n

    \n\n

    \n Нам нужна Ваша помощь в починке TogetherJS на Internet Explorer! Вот список ошибок на GitHub, которые нам нужно починить, и над которыми Вы можете поработать.\n Internet Explorer в настоящее время не поддерживается. Если Вы действительно хотите испытать TogetherJS, советуем Вам использовать Firefox или Chrome.\n

    \n
    \n\n
    \n \n
    \n\n
    \n\n \n
    \n
    Браузер не поддерживается
    \n\n
    \n

    \n Нам нужна Ваша помощь в починке TogetherJS на Internet Explorer! Вот список ошибок на GitHub, которые нам нужно починить, и над которыми Вы можете поработать.\n Internet Explorer в настоящее время не поддерживается. Если Вы действительно хотите испытать TogetherJS, советуем Вам использовать Firefox или Chrome.\n

    \n\n

    Вы можете продолжать пробовать использовать TOOL_NAME, но скорее всего Вы получите массу ошибок. Мы Вас предупредили.

    \n\n
    \n\n
    \n \n \n
    \n\n
    \n\n
    \n
    Закончить сеанс?
    \n
    \n

    \n Вы уверены, что хотите завершить свой сеанс TOOL_NAME?\n

    \n
    \n
    \n \n или\n \n
    \n
    \n\n
    \n
    Отзывы и предложения
    \n \n \n
    \n\n
    \n \n
    \n
    Следую на новый URL...
    \n
    \n
    \n Следую\n \n на \n
    \n
    \n\n \n
    \n
    \n
    \n \n пригласил кого-либо\n Вас\n на \n
    \n
    \n\n
    \n\n \n
    \n
    \n\n \n
    \n\n \n
    \n\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n
    \n\n \n
    \n
    \n
    \n\n \n
    \n
    \n
    \n
    \n", + walkthrough: "\n
    \n
    Вы используете TOOL_NAME!
    \n\n
    \n
    \n\n
    \n

    \n\t

    TOOL_NAME - это служба для Вашего сайта, которая помогает Вам сотрудничать с другими в реальном времени на сайте SITE_NAME

    \n
    \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n

    Задайте свои аватар, имя и пользовательский цвет вверху. При желании изменить их позднее, щёлкните по кнопке Профиль.

    \n
    \n
    \n

    \n

    Вы можете изменить свои аватар, имя и пользовательский цвет, используя кнопку Профиль.

    \n
    \n
    \n\n
    \n

    \n

    \n

    Вы можете пригласить ещё друзей на Ваш сеанс, послав им ссылку с приглашением на панели TOOL_NAME.

    \n

    \n \n Скопируйте и приклейте эту ссылку в IM или в имейл, чтобы пригласить друзей.
    \n
    \n \n

    \n

    Пошлите другу ссылку вверху, чтобы он мог присоединиться к Вашему сеансу! Вы также можете найти эту ссылку с приглашением на панели TOOL_NAME.

    \n
    \n\n
    \n

    \n

    Друзья, которые присоединятся к Вашему сеансу TOOL_NAME, появятся здесь. Вы можете щёлкнуть по аватару друга, чтобы увидеть больше информации.

    \n
    \n\n
    \n

    \n

    Когда Ваши друзья присоединятся к Вашему сеансу TOOL_NAME, Вы сможете общаться с ними здесь!

    \n
    \n\n
    \n

    \n

    Если Ваш браузер поддерживает аудио-чат, Вы можете запустить его нажатием на иконку микрофона. Узнайте побольше об этой экспериментальной функции здесь.

    \n
    \n\n
    \n

    \n

    Ну вот Вы и готовы использовать TOOL_NAME. Теперь начинайте сотрудничать на сайте SITE_NAME!

    \n
    \n\n
    \n \n \n
    \n
    \n
    \n\n
    \n \n
    \n\n
    \n", + names: "Лысый Лис, Большой Бобёр, Умная Сова, Жирный Жираф, Серый Волк, Толстый Тюлень, Рыба-кит, Кисьян Котяра, Известная Игуана" + }; +}); + +TogetherJS.require = TogetherJS._requireObject = require; +TogetherJS._loaded = true; +require(["session"]); +}()); diff --git a/v3/js/togetherjs/togetherjs/ui.js b/v3/js/togetherjs/togetherjs/ui.js new file mode 100644 index 000000000..109845219 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/ui.js @@ -0,0 +1,1516 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define(["require", "jquery", "util", "session", "templates", "templating", "linkify", "peers", "windowing", "tinycolor", "elementFinder", "visibilityApi"], function (require, $, util, session, templates, templating, linkify, peers, windowing, tinycolor, elementFinder, visibilityApi) { + var ui = util.Module('ui'); + var assert = util.assert; + var AssertionError = util.AssertionError; + var chat; + var $window = $(window); + // This is also in togetherjs.less, as @button-height: + var BUTTON_HEIGHT = 60 + 1; // 60 is button height, 1 is border + // chat TextArea + var TEXTAREA_LINE_HEIGHT = 20; // in pixels + var TEXTAREA_MAX_LINES = 5; + // This is also in togetherjs.less, under .togetherjs-animated + var ANIMATION_DURATION = 1000; + // Time the new user window sticks around until it fades away: + var NEW_USER_FADE_TIMEOUT = 5000; + // This is set when an animation will keep the UI from being ready + // (until this time): + var finishedAt = null; + // Time in milliseconds for the dock to animate out: + var DOCK_ANIMATION_TIME = 300; + // If two chat messages come from the same person in this time + // (milliseconds) then they are collapsed into one message: + var COLLAPSE_MESSAGE_LIMIT = 5000; + + var COLORS = [ + "#8A2BE2", "#7FFF00", "#DC143C", "#00FFFF", "#8FBC8F", "#FF8C00", "#FF00FF", + "#FFD700", "#F08080", "#90EE90", "#FF6347"]; + + // This would be a circular import, but we just need the chat module sometime + // after everything is loaded, and this is sure to complete by that time: + require(["chat"], function (c) { + chat = c; + }); + + /* Displays some toggleable element; toggleable elements have a + data-toggles attribute that indicates what other elements should + be hidden when this element is shown. */ + ui.displayToggle = function (el) { + el = $(el); + assert(el.length, "No element", arguments[0]); + var other = $(el.attr("data-toggles")); + assert(other.length, "Cannot toggle", el[0], "selector", other.selector); + other.hide(); + el.show(); + }; + + function panelPosition() { + var iface = $("#togetherjs-dock"); + if (iface.hasClass("togetherjs-dock-right")) { + return "right"; + } else if (iface.hasClass("togetherjs-dock-left")) { + return "left"; + } else if (iface.hasClass("togetherjs-dock-bottom")) { + return "bottom"; + } else { + throw new AssertionError("#togetherjs-dock doesn't have positioning class"); + } + } + + ui.container = null; + + // This is used for some signalling when ui.prepareUI and/or + // ui.activateUI is called before the DOM is fully loaded: + var deferringPrepareUI = null; + + function deferForContainer(func) { + /* Defers any calls to func() until after ui.container is set + Function cannot have a return value (as sometimes the call will + become async). Use like: + + method: deferForContainer(function (args) {...}) + */ + return function () { + if (ui.container) { + func.apply(this, arguments); + } + var self = this; + var args = Array.prototype.slice.call(arguments); + session.once("ui-ready", function () { + func.apply(self, args); + }); + }; + } + + // This is called before activateUI; it doesn't bind anything, but does display + // the dock + // FIXME: because this module has lots of requirements we can't do + // this before those requirements are loaded. Maybe worth splitting + // this out? OTOH, in production we should have all the files + // combined so there's not much problem loading those modules. + ui.prepareUI = function () { + if (! (document.readyState == "complete" || document.readyState == "interactive")) { + // Too soon! Wait a sec... + deferringPrepareUI = "deferring"; + document.addEventListener("DOMContentLoaded", function () { + var d = deferringPrepareUI; + deferringPrepareUI = null; + ui.prepareUI(); + // This happens when ui.activateUI is called before the document has been + // loaded: + if (d == "activate") { + ui.activateUI(); + } + }); + return; + } + var container = ui.container = $(templates("interface")); + assert(container.length); + $("body").append(container); + fixupAvatars(container); + if (session.firstRun && TogetherJS.startTarget) { + // Time at which the UI will be fully ready: + // (We have to do this because the offset won't be quite right + // until the animation finishes - attempts to calculate the + // offset without taking into account CSS transforms have so far + // failed.) + var timeoutSeconds = DOCK_ANIMATION_TIME / 1000; + finishedAt = Date.now() + DOCK_ANIMATION_TIME + 50; + setTimeout(function () { + finishedAt = Date.now() + DOCK_ANIMATION_TIME + 40; + var iface = container.find("#togetherjs-dock"); + var start = iface.offset(); + var pos = $(TogetherJS.startTarget).offset(); + pos.top = Math.floor(pos.top - start.top); + pos.left = Math.floor(pos.left - start.left); + var translate = "translate(" + pos.left + "px, " + pos.top + "px)"; + iface.css({ + MozTransform: translate, + WebkitTransform: translate, + transform: translate, + opacity: "0.0" + }); + setTimeout(function () { + // We keep recalculating because the setTimeout times aren't always so accurate: + finishedAt = Date.now() + DOCK_ANIMATION_TIME + 20; + var transition = "transform " + timeoutSeconds + "s ease-out, "; + transition += "opacity " + timeoutSeconds + "s ease-out"; + iface.css({ + opacity: "1.0", + MozTransition: "-moz-" + transition, + MozTransform: "translate(0, 0)", + WebkitTransition: "-webkit-" + transition, + WebkitTransform: "translate(0, 0)", + transition: transition, + transform: "translate(0, 0)" + }); + setTimeout(function () { + finishedAt = null; + iface.attr("style", ""); + }, 510); + }, 5); + }, 5); + } + if (TogetherJS.startTarget) { + var el = $(TogetherJS.startTarget); + var text = el.text().toLowerCase().replace(/\s+/g, " "); + text = text.replace(/^\s*/, "").replace(/\s*$/, ""); + if (text == "start togetherjs") { + el.attr("data-end-togetherjs-html", "End TogetherJS"); + } + if (el.attr("data-end-togetherjs-html")) { + el.attr("data-start-togetherjs-html", el.html()); + el.html(el.attr("data-end-togetherjs-html")); + } + el.addClass("togetherjs-started"); + } + ui.container.find(".togetherjs-window > header, .togetherjs-modal > header").each(function () { + $(this).append($('')); + }); + + TogetherJS.config.track("disableWebRTC", function (hide, previous) { + if (hide && ! previous) { + ui.container.find("#togetherjs-audio-button").hide(); + adjustDockSize(-1); + } else if ((! hide) && previous) { + ui.container.find("#togetherjs-audio-button").show(); + adjustDockSize(1); + } + }); + + // pgbovine -- disable the user profile and "Invite a friend" link dialogs + ui.container.find("#togetherjs-profile-button").hide(); + ui.container.find("#togetherjs-share-button").hide(); + adjustDockSize(-2); + + }; + + // After prepareUI, this actually makes the interface live. We have + // to do this later because we call prepareUI when many components + // aren't initialized, so we don't even want the user to be able to + // interact with the interface. But activateUI is called once + // everything is loaded and ready for interaction. + ui.activateUI = function () { + if (deferringPrepareUI) { + console.warn("ui.activateUI called before document is ready; waiting..."); + deferringPrepareUI = "activate"; + return; + } + if (! ui.container) { + ui.prepareUI(); + } + var container = ui.container; + + //create the overlay + if($.browser.mobile) { + // $("body").append( "\x3cdiv class='overlay' style='position: absolute; top: 0; left: 0; background-color: rgba(0,0,0,0); width: 120%; height: 100%; z-index: 1000; margin: -10px'>\x3c/div>" ); + } + + // The share link: + ui.prepareShareLink(container); + container.find("input.togetherjs-share-link").on("keydown", function (event) { + if (event.which == 27) { + windowing.hide("#togetherjs-share"); + return false; + } + return undefined; + }); + session.on("shareId", updateShareLink); + + // The chat input element: + var input = container.find("#togetherjs-chat-input"); + input.bind("keydown", function (event) { + if (event.which == 13 && !event.shiftKey) { // Enter without Shift pressed + submitChat(); + return false; + } + if (event.which == 27) { // Escape + windowing.hide("#togetherjs-chat"); + return false; + } + }); + + function submitChat() { + var val = input.val(); + if ($.trim(val)) { + input.val(""); + // triggering the event manually to avoid the addition of newline character to the textarea: + input.trigger("input").trigger("propertychange"); + chat.submit(val); + } + } + // auto-resize textarea: + input.on("input propertychange", function () { + var $this = $(this); + var actualHeight = $this.height(); + // reset the height of textarea to remove trailing empty space (used for shrinking): + $this.height(TEXTAREA_LINE_HEIGHT); + this.scrollTop = 0; + // scroll to bottom: + this.scrollTop = 9999; + var newHeight = this.scrollTop + $this.height(); + var maxHeight = TEXTAREA_MAX_LINES * TEXTAREA_LINE_HEIGHT; + if (newHeight > maxHeight) { + newHeight = maxHeight; + this.style.overflowY = "scroll"; + } else { + this.style.overflowY = "hidden"; + } + this.style.height = newHeight + "px"; + var diff = newHeight - actualHeight; + $("#togetherjs-chat-input-box").height($("#togetherjs-chat-input-box").height() + diff); + $("#togetherjs-chat-messages").height($("#togetherjs-chat-messages").height() - diff); + return false; + }); + + util.testExpose({submitChat: submitChat}); + + // Moving the window: + // FIXME: this should probably be stickier, and not just move the window around + // so abruptly + var anchor = container.find("#togetherjs-dock-anchor"); + assert(anchor.length); + // FIXME: This is in place to temporarily disable dock dragging: + anchor = container.find("#togetherjs-dock-anchor-disabled"); + anchor.mousedown(function (event) { + var iface = $("#togetherjs-dock"); + // FIXME: switch to .offset() and pageX/Y + var startPos = panelPosition(); + function selectoff() { + return false; + } + function mousemove(event2) { + var fromRight = $window.width() + window.pageXOffset - event2.pageX; + var fromLeft = event2.pageX - window.pageXOffset; + var fromBottom = $window.height() + window.pageYOffset - event2.pageY; + // FIXME: this is to temporarily disable the bottom view: + fromBottom = 10000; + + var pos; + if (fromLeft < fromRight && fromLeft < fromBottom) { + pos = "left"; + } else if (fromRight < fromLeft && fromRight < fromBottom) { + pos = "right"; + } else { + pos = "bottom"; + } + iface.removeClass("togetherjs-dock-left"); + iface.removeClass("togetherjs-dock-right"); + iface.removeClass("togetherjs-dock-bottom"); + iface.addClass("togetherjs-dock-" + pos); + if (startPos && pos != startPos) { + windowing.hide(); + startPos = null; + } + } + $(document).bind("mousemove", mousemove); + // If you don't turn selection off it will still select text, and show a + // text selection cursor: + $(document).bind("selectstart", selectoff); + // FIXME: it seems like sometimes we lose the mouseup event, and it's as though + // the mouse is stuck down: + $(document).one("mouseup", function () { + $(document).unbind("mousemove", mousemove); + $(document).unbind("selectstart", selectoff); + }); + return false; + }); + + function openDock() { + $('.togetherjs-window').animate({ + opacity: 1 + }); + $('#togetherjs-dock-participants').animate({ + opacity: 1 + }); + $('#togetherjs-dock #togetherjs-buttons').animate({ + opacity: 1 + }); + + //for iphone + if($(window).width() < 480) { + $('.togetherjs-dock-right').animate({ + width: "204px" + }, { + duration:60, easing:"linear" + }); + } + + //for ipad + else { + $('.togetherjs-dock-right').animate({ + width: "27%" + }, { + duration:60, easing:"linear" + }); + } + + + // add bg overlay + // $("body").append( "\x3cdiv class='overlay' style='position: absolute; top: 0; left: -2px; background-color: rgba(0,0,0,0.5); width: 200%; height: 400%; z-index: 1000; margin: 0px;'>\x3c/div>" ); + + //disable vertical scrolling + // $("body").css({ + // "position": "fixed", + // top: 0, + // left: 0 + // }); + + //replace the anchor icon + var src = "/togetherjs/images/togetherjs-logo-close.png"; + $("#togetherjs-dock-anchor #togetherjs-dock-anchor-horizontal img").attr("src", src); + } + + function closeDock() { + //enable vertical scrolling + $("body").css({ + "position": "", + top: "", + left: "" + }); + + //replace the anchor icon + var src = "/togetherjs/images/togetherjs-logo-open.png"; + $("#togetherjs-dock-anchor #togetherjs-dock-anchor-horizontal img").attr("src", src); + + $('.togetherjs-window').animate({ + opacity: 0 + }); + $('#togetherjs-dock-participants').animate({ + opacity: 0 + }); + $('#togetherjs-dock #togetherjs-buttons').animate({ + opacity: 0 + }); + $('.togetherjs-dock-right').animate({ + width: "40px" + }, { + duration:60, easing:"linear" + }); + + // remove bg overlay + //$(".overlay").remove(); + } + + // Setting the anchor button + dock mobile actions + if($.browser.mobile) { + + // toggle the audio button + $("#togetherjs-audio-button").click(function () { + windowing.toggle("#togetherjs-rtc-not-supported"); + }); + + // toggle the profile button + $("#togetherjs-profile-button").click(function () { + windowing.toggle("#togetherjs-menu-window"); + }); + + // $("body").append( "\x3cdiv class='overlay' style='position: absolute; top: 0; left: -2px; background-color: rgba(0,0,0,0.5); width: 200%; height: 400%; z-index: 1000; margin: 0px'>\x3c/div>" ); + + //disable vertical scrolling + // $("body").css({ + // "position": "fixed", + // top: 0, + // left: 0 + // }); + + //replace the anchor icon + var src = "/togetherjs/images/togetherjs-logo-close.png"; + $("#togetherjs-dock-anchor #togetherjs-dock-anchor-horizontal img").attr("src", src); + + $("#togetherjs-dock-anchor").toggle(function() { + closeDock(); + },function(){ + openDock(); + }); + } + + $("#togetherjs-share-button").click(function () { + windowing.toggle("#togetherjs-share"); + }); + + $("#togetherjs-profile-button").click(function (event) { + if ($.browser.mobile) { + windowing.show("#togetherjs-menu-window"); + return false; + } + toggleMenu(); + event.stopPropagation(); + return false; + }); + + $("#togetherjs-menu-feedback, #togetherjs-menu-feedback-button").click(function(){ + windowing.hide(); + hideMenu(); + windowing.show("#togetherjs-feedback-form"); + }); + + $("#togetherjs-menu-help, #togetherjs-menu-help-button").click(function () { + windowing.hide(); + hideMenu(); + require(["walkthrough"], function (walkthrough) { + windowing.hide(); + walkthrough.start(false); + }); + }); + + $("#togetherjs-menu-update-name").click(function () { + var input = $("#togetherjs-menu .togetherjs-self-name"); + input.css({ + width: $("#togetherjs-menu").width() - 32 + "px" + }); + ui.displayToggle("#togetherjs-menu .togetherjs-self-name"); + $("#togetherjs-menu .togetherjs-self-name").focus(); + }); + + $("#togetherjs-menu-update-name-button").click(function () { + windowing.show("#togetherjs-edit-name-window"); + $("#togetherjs-edit-name-window input").focus(); + }); + + $("#togetherjs-menu .togetherjs-self-name").bind("keyup change", function (event) { + console.log("alrighty", event); + if (event.which == 13) { + ui.displayToggle("#togetherjs-self-name-display"); + return; + } + var val = $("#togetherjs-menu .togetherjs-self-name").val(); + console.log("values!!", val); + if (val) { + peers.Self.update({name: val}); + } + }); + + $("#togetherjs-menu-update-avatar, #togetherjs-menu-update-avatar-button").click(function () { + hideMenu(); + windowing.show("#togetherjs-avatar-edit"); + }); + + $("#togetherjs-menu-end, #togetherjs-menu-end-button").click(function () { + hideMenu(); + windowing.show("#togetherjs-confirm-end"); + }); + + $("#togetherjs-end-session").click(function () { + session.close(); + //$(".overlay").remove(); + + }); + + $("#togetherjs-menu-update-color").click(function () { + var picker = $("#togetherjs-pick-color"); + if (picker.is(":visible")) { + picker.hide(); + return; + } + picker.show(); + bindPicker(); + picker.find(".togetherjs-swatch-active").removeClass("togetherjs-swatch-active"); + picker.find(".togetherjs-swatch[data-color=\"" + peers.Self.color + "\"]").addClass("togetherjs-swatch-active"); + }); + + $("#togetherjs-pick-color").click(".togetherjs-swatch", function (event) { + var swatch = $(event.target); + var color = swatch.attr("data-color"); + peers.Self.update({ + color: color + }); + event.stopPropagation(); + return false; + }); + + $("#togetherjs-pick-color").click(function (event) { + $("#togetherjs-pick-color").hide(); + event.stopPropagation(); + return false; + }); + + COLORS.forEach(function (color) { + var el = templating.sub("swatch"); + el.attr("data-color", color); + var darkened = tinycolor.darken(color); + el.css({ + backgroundColor: color, + borderColor: darkened + }); + $("#togetherjs-pick-color").append(el); + }); + + $("#togetherjs-chat-button").click(function () { + windowing.toggle("#togetherjs-chat"); + }); + + session.on("display-window", function (id, element) { + if (id == "togetherjs-chat") { + if (! $.browser.mobile) { + $("#togetherjs-chat-input").focus(); + } + } else if (id == "togetherjs-share") { + var link = element.find("input.togetherjs-share-link"); + if (link.is(":visible")) { + link.focus().select(); + } + } + }); + + container.find("#togetherjs-chat-notifier").click(function (event) { + if ($(event.target).is("a") || container.is(".togetherjs-close")) { + return; + } + windowing.show("#togetherjs-chat"); + }); + + // FIXME: Don't think this makes sense + $(".togetherjs header.togetherjs-title").each(function (index, item) { + var button = $(''); + button.click(function (event) { + var window = button.closest(".togetherjs-window"); + windowing.hide(window); + }); + $(item).append(button); + }); + + $("#togetherjs-avatar-done").click(function () { + ui.displayToggle("#togetherjs-no-avatar-edit"); + }); + + $("#togetherjs-self-color").css({backgroundColor: peers.Self.color}); + + var avatar = peers.Self.avatar; + if (avatar) { + $("#togetherjs-self-avatar").attr("src", avatar); + } + + var starterButton = $("#togetherjs-starter button"); + starterButton.click(function () { + windowing.show("#togetherjs-about"); + }).addClass("togetherjs-running"); + if (starterButton.text() == "Start TogetherJS") { + starterButton.attr("data-start-text", starterButton.text()); + starterButton.text("End TogetherJS Session"); + } + + ui.activateAvatarEdit(container, { + onSave: function () { + windowing.hide("#togetherjs-avatar-edit"); + } + }); + + TogetherJS.config.track("inviteFromRoom", function (inviter, previous) { + if (inviter) { + container.find("#togetherjs-invite").show(); + } else { + container.find("#togetherjs-invite").hide(); + } + }); + + container.find("#togetherjs-menu-refresh-invite").click(refreshInvite); + container.find("#togetherjs-menu-invite-anyone").click(function () { + invite(null); + }); + + // The following lines should be at the end of this function + // (new code goes above) + session.emit("new-element", ui.container); + + if (finishedAt && finishedAt > Date.now()) { + setTimeout(function () { + finishedAt = null; + session.emit("ui-ready", ui); + }, finishedAt - Date.now()); + } else { + session.emit("ui-ready", ui); + } + + }; // End ui.activateUI() + + ui.activateAvatarEdit = function (container, options) { + options = options || {}; + var pendingImage = null; + + container.find(".togetherjs-avatar-save").prop("disabled", true); + + container.find(".togetherjs-avatar-save").click(function () { + if (pendingImage) { + peers.Self.update({avatar: pendingImage}); + container.find(".togetherjs-avatar-save").prop("disabled", true); + if (options.onSave) { + options.onSave(); + } + } + }); + + container.find(".togetherjs-upload-avatar").on("change", function () { + util.readFileImage(this).then(function (url) { + sizeDownImage(url).then(function (smallUrl) { + pendingImage = smallUrl; + container.find(".togetherjs-avatar-preview").css({ + backgroundImage: 'url(' + pendingImage + ')' + }); + container.find(".togetherjs-avatar-save").prop("disabled", false); + if (options.onPending) { + options.onPending(); + } + }); + }); + }); + + }; + + function sizeDownImage(imageUrl) { + return util.Deferred(function (def) { + var $canvas = $(""); + $canvas[0].height = session.AVATAR_SIZE; + $canvas[0].width = session.AVATAR_SIZE; + var context = $canvas[0].getContext("2d"); + var img = new Image(); + img.src = imageUrl; + // Sometimes the DOM updates immediately to call + // naturalWidth/etc, and sometimes it doesn't; using setTimeout + // gives it a chance to catch up + setTimeout(function () { + var width = img.naturalWidth || img.width; + var height = img.naturalHeight || img.height; + width = width * (session.AVATAR_SIZE / height); + height = session.AVATAR_SIZE; + context.drawImage(img, 0, 0, width, height); + def.resolve($canvas[0].toDataURL("image/png")); + }); + }); + } + + function fixupAvatars(container) { + /* All
    elements need an element inside, + so we add that element here */ + container.find(".togetherjs-person").each(function () { + var $this = $(this); + var inner = $this.find(".togetherjs-person-avatar-swatch"); + if (! inner.length) { + $this.append('
    '); + } + }); + } + + ui.prepareShareLink = function (container) { + container.find("input.togetherjs-share-link").click(function () { + $(this).select(); + }).change(function () { + updateShareLink(); + }); + container.find("a.togetherjs-share-link").click(function () { + // FIXME: this is currently opening up Bluetooth, not sharing a link + if (false && window.MozActivity) { + var activity = new MozActivity({ + name: "share", + data: { + type: "url", + url: $(this).attr("href") + } + }); + } + // FIXME: should show some help if you actually try to follow the link + // like this, instead of simply suppressing it + return false; + }); + updateShareLink(); + }; + + // Menu + + function showMenu(event) { + var el = $("#togetherjs-menu"); + assert(el.length); + el.show(); + bindMenu(); + $(document).bind("click", maybeHideMenu); + } + + function bindMenu() { + var el = $("#togetherjs-menu:visible"); + if (el.length) { + var bound = $("#togetherjs-profile-button"); + var boundOffset = bound.offset(); + el.css({ + top: boundOffset.top + bound.height() - $window.scrollTop() + "px", + left: (boundOffset.left + bound.width() - 10 - el.width() - $window.scrollLeft()) + "px" + }); + } + } + + function bindPicker() { + var picker = $("#togetherjs-pick-color:visible"); + if (picker.length) { + var menu = $("#togetherjs-menu-update-color"); + var menuOffset = menu.offset(); + picker.css({ + top: menuOffset.top + menu.height(), + left: menuOffset.left + }); + } + } + + session.on("resize", function () { + bindMenu(); + bindPicker(); + }); + + function toggleMenu() { + if ($("#togetherjs-menu").is(":visible")) { + hideMenu(); + } else { + showMenu(); + } + } + + function hideMenu() { + var el = $("#togetherjs-menu"); + el.hide(); + $(document).unbind("click", maybeHideMenu); + ui.displayToggle("#togetherjs-self-name-display"); + $("#togetherjs-pick-color").hide(); + } + + function maybeHideMenu(event) { + var t = event.target; + while (t) { + if (t.id == "togetherjs-menu") { + // Click inside the menu, ignore this + return; + } + t = t.parentNode; + } + hideMenu(); + } + + function adjustDockSize(buttons) { + /* Add or remove spots from the dock; positive number to + add button(s), negative number to remove button(s) + */ + assert(typeof buttons == "number"); + assert(buttons && Math.floor(buttons) == buttons); + var iface = $("#togetherjs-dock"); + var newHeight = iface.height() + (BUTTON_HEIGHT * buttons); + // pgbovine - set the lower limit to 1 instead of 3 ... + assert(newHeight >= BUTTON_HEIGHT * 1, "Height went too low (", newHeight, + "), should never be less than 2 buttons high (", BUTTON_HEIGHT * 1, ")"); + //assert(newHeight >= BUTTON_HEIGHT * 3, "Height went too low (", newHeight, + // "), should never be less than 3 buttons high (", BUTTON_HEIGHT * 3, ")"); + iface.css({ + height: newHeight + "px" + }); + } + + // Misc + + function updateShareLink() { + var input = $("input.togetherjs-share-link"); + var link = $("a.togetherjs-share-link"); + var display = $("#togetherjs-session-id"); + if (! session.shareId) { + input.val(""); + link.attr("href", "#"); + display.text("(none)"); + } else { + input.val(session.shareUrl()); + link.attr("href", session.shareUrl()); + display.text(session.shareId); + } + } + + session.on("close", function () { + + if($.browser.mobile) { + // remove bg overlay + //$(".overlay").remove(); + + //after hitting End, reset window draggin + $("body").css({ + "position": "", + top: "", + left: "" + }); + + } + + if (ui.container) { + ui.container.remove(); + ui.container = null; + } + // Clear out any other spurious elements: + $(".togetherjs").remove(); + var starterButton = $("#togetherjs-starter button"); + starterButton.removeClass("togetherjs-running"); + if (starterButton.attr("data-start-text")) { + starterButton.text(starterButton.attr("data-start-text")); + starterButton.attr("data-start-text", ""); + } + if (TogetherJS.startTarget) { + var el = $(TogetherJS.startTarget); + if (el.attr("data-start-togetherjs-html")) { + el.html(el.attr("data-start-togetherjs-html")); + } + el.removeClass("togetherjs-started"); + } + }); + + ui.chat = { + text: function (attrs) { + assert(typeof attrs.text == "string"); + assert(attrs.peer); + assert(attrs.messageId); + var date = attrs.date || Date.now(); + var lastEl = ui.container.find("#togetherjs-chat .togetherjs-chat-message"); + if (lastEl.length) { + lastEl = $(lastEl[lastEl.length-1]); + } + var lastDate = null; + if (lastEl) { + lastDate = parseInt(lastEl.attr("data-date"), 10); + } + if (lastEl && lastEl.attr("data-person") == attrs.peer.id && + lastDate && date < lastDate + COLLAPSE_MESSAGE_LIMIT) { + lastEl.attr("data-date", date); + var content = lastEl.find(".togetherjs-chat-content"); + assert(content.length); + attrs.text = content.text() + "\n" + attrs.text; + attrs.messageId = lastEl.attr("data-message-id"); + lastEl.remove(); + } + var el = templating.sub("chat-message", { + peer: attrs.peer, + content: attrs.text, + date: date + }); + linkify(el.find(".togetherjs-chat-content")); + el.attr("data-person", attrs.peer.id) + .attr("data-date", date) + .attr("data-message-id", attrs.messageId); + ui.chat.add(el, attrs.messageId, attrs.notify); + }, + + joinedSession: function (attrs) { + assert(attrs.peer); + var date = attrs.date || Date.now(); + var el = templating.sub("chat-joined", { + peer: attrs.peer, + date: date + }); + // FIXME: should bind the notification to the dock location + ui.chat.add(el, attrs.peer.className("join-message-"), 4000); + }, + + leftSession: function (attrs) { + assert(attrs.peer); + var date = attrs.date || Date.now(); + var el = templating.sub("chat-left", { + peer: attrs.peer, + date: date, + declinedJoin: attrs.declinedJoin + }); + // FIXME: should bind the notification to the dock location + ui.chat.add(el, attrs.peer.className("join-message-"), 4000); + }, + + system: function (attrs) { + assert(! attrs.peer); + assert(typeof attrs.text == "string"); + var date = attrs.date || Date.now(); + var el = templating.sub("chat-system", { + content: attrs.text, + date: date + }); + ui.chat.add(el, undefined, true); + }, + + clear: deferForContainer(function () { + var container = ui.container.find("#togetherjs-chat-messages"); + container.empty(); + }), + + urlChange: function (attrs) { + assert(attrs.peer); + assert(typeof attrs.url == "string"); + assert(typeof attrs.sameUrl == "boolean"); + var messageId = attrs.peer.className("url-change-"); + // FIXME: duplicating functionality in .add(): + var realId = "togetherjs-chat-" + messageId; + var date = attrs.date || Date.now(); + var title; + // FIXME: strip off common domain from msg.url? E.g., if I'm on + // http://example.com/foobar, and someone goes to http://example.com/baz then + // show only /baz + // FIXME: truncate long titles + if (attrs.title) { + title = attrs.title + " (" + attrs.url + ")"; + } else { + title = attrs.url; + } + var el = templating.sub("url-change", { + peer: attrs.peer, + date: date, + href: attrs.url, + title: title, + sameUrl: attrs.sameUrl + }); + el.find(".togetherjs-nudge").click(function () { + attrs.peer.nudge(); + return false; + }); + el.find(".togetherjs-follow").click(function () { + var url = attrs.peer.url; + if (attrs.peer.urlHash) { + url += attrs.peer.urlHash; + } + location.href = url; + }); + var notify = ! attrs.sameUrl; + if (attrs.sameUrl && ! $("#" + realId).length) { + // Don't bother showing a same-url notification, if no previous notification + // had been shown + return; + } + ui.chat.add(el, messageId, notify); + }, + + invite: function (attrs) { + assert(attrs.peer); + assert(typeof attrs.url == "string"); + var messageId = attrs.peer.className("invite-"); + var date = attrs.date || Date.now(); + var hrefTitle = attrs.url.replace(/\#?&togetherjs=.*/, "").replace(/^\w+:\/\//, ""); + var el = templating.sub("invite", { + peer: attrs.peer, + date: date, + href: attrs.url, + hrefTitle: hrefTitle, + forEveryone: attrs.forEveryone + }); + if (attrs.forEveryone) { + el.find("a").click(function () { + // FIXME: hacky way to do this: + chat.submit("Followed link to " + attrs.url); + }); + } + ui.chat.add(el, messageId, true); + }, + + hideTimeout: null, + + add: deferForContainer(function (el, id, notify) { + if (id) { + el.attr("id", "togetherjs-chat-" + util.safeClassName(id)); + } + var container = ui.container.find("#togetherjs-chat-messages"); + assert(container.length); + var popup = ui.container.find("#togetherjs-chat-notifier"); + container.append(el); + ui.chat.scroll(); + var doNotify = !! notify; + var section = popup.find("#togetherjs-chat-notifier-message"); + if (notify && visibilityApi.hidden()) { + ui.container.find("#togetherjs-notification")[0].play(); + } + if (id && section.data("message-id") == id) { + doNotify = true; + } + if (container.is(":visible")) { + doNotify = false; + } + if (doNotify) { + section.empty(); + section.append(el.clone(true, true)); + if (section.data("message-id") != id) { + section.data("message-id", id || ""); + windowing.show(popup); + } else if (! popup.is(":visible")) { + windowing.show(popup); + } + if (typeof notify == "number") { + // This is the amount of time we're supposed to notify + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout = null; + } + this.hideTimeout = setTimeout((function () { + windowing.hide(popup); + this.hideTimeout = null; + }).bind(this), notify); + } + } + }), + + scroll: deferForContainer(function () { + var container = ui.container.find("#togetherjs-chat-messages")[0]; + container.scrollTop = container.scrollHeight; + }) + + }; + + session.on("display-window", function (id, win) { + if (id == "togetherjs-chat") { + ui.chat.scroll(); + windowing.hide("#togetherjs-chat-notifier"); + } + }); + + /* This class is bound to peers.Peer instances as peer.view. + The .update() method is regularly called by peer objects when info changes. */ + ui.PeerView = util.Class({ + + constructor: function (peer) { + assert(peer.isSelf !== undefined, "PeerView instantiated with non-Peer object"); + this.peer = peer; + this.dockClick = this.dockClick.bind(this); + }, + + /* Takes an element and sets any person-related attributes on the element + Different from updates, which use the class names we set here: */ + setElement: function (el) { + var count = 0; + var classes = ["togetherjs-person", "togetherjs-person-status", + "togetherjs-person-name", "togetherjs-person-name-abbrev", + "togetherjs-person-bgcolor", "togetherjs-person-swatch", + "togetherjs-person-status", "togetherjs-person-role", + "togetherjs-person-url", "togetherjs-person-url-title", + "togetherjs-person-bordercolor"]; + classes.forEach(function (cls) { + var els = el.find("." + cls); + els.addClass(this.peer.className(cls + "-")); + count += els.length; + }, this); + if (! count) { + console.warn("setElement(", el, ") doesn't contain any person items"); + } + this.updateDisplay(el); + }, + + updateDisplay: deferForContainer(function (container) { + container = container || ui.container; + var abbrev = this.peer.name; + if (this.peer.isSelf) { + abbrev = "me"; + } + container.find("." + this.peer.className("togetherjs-person-name-")).text(this.peer.name || ""); + container.find("." + this.peer.className("togetherjs-person-name-abbrev-")).text(abbrev); + var avatarEl = container.find("." + this.peer.className("togetherjs-person-")); + if (this.peer.avatar) { + util.assertValidUrl(this.peer.avatar); + avatarEl.css({ + backgroundImage: "url(" + this.peer.avatar + ")" + }); + } + if (this.peer.idle == "inactive") { + avatarEl.addClass("togetherjs-person-inactive"); + } else { + avatarEl.removeClass("togetherjs-person-inactive"); + } + avatarEl.attr("title", this.peer.name); + if (this.peer.color) { + avatarEl.css({ + borderColor: this.peer.color + }); + avatarEl.find(".togetherjs-person-avatar-swatch").css({ + borderTopColor: this.peer.color, + borderRightColor: this.peer.color + }); + } + if (this.peer.color) { + var colors = container.find("." + this.peer.className("togetherjs-person-bgcolor-")); + colors.css({ + backgroundColor: this.peer.color + }); + colors = container.find("." + this.peer.className("togetherjs-person-bordercolor-")); + colors.css({ + borderColor: this.peer.color + }); + } + container.find("." + this.peer.className("togetherjs-person-role-")) + .text(this.peer.isCreator ? "Creator" : "Participant"); + var urlName = this.peer.title || ""; + if (this.peer.title) { + urlName += " ("; + } + urlName += util.truncateCommonDomain(this.peer.url, location.href); + if (this.peer.title) { + urlName += ")"; + } + container.find("." + this.peer.className("togetherjs-person-url-title-")) + .text(urlName); + var url = this.peer.url; + if (this.peer.urlHash) { + url += this.peer.urlHash; + } + container.find("." + this.peer.className("togetherjs-person-url-")) + .attr("href", url); + // FIXME: should have richer status: + container.find("." + this.peer.className("togetherjs-person-status-")) + .text(this.peer.idle == "active" ? "Active" : "Inactive"); + if (this.peer.isSelf) { + // FIXME: these could also have consistent/reliable class names: + var selfName = $(".togetherjs-self-name"); + selfName.each((function (index, el) { + el = $(el); + if (el.val() != this.peer.name) { + el.val(this.peer.name); + } + }).bind(this)); + $("#togetherjs-menu-avatar").attr("src", this.peer.avatar); + if (! this.peer.name) { + $("#togetherjs-menu .togetherjs-person-name-self").text(this.peer.defaultName); + } + } + if (this.peer.url != session.currentUrl()) { + container.find("." + this.peer.className("togetherjs-person-")) + .addClass("togetherjs-person-other-url"); + } else { + container.find("." + this.peer.className("togetherjs-person-")) + .removeClass("togetherjs-person-other-url"); + } + if (this.peer.following) { + if (this.followCheckbox) { + this.followCheckbox.prop("checked", true); + } + } else { + if (this.followCheckbox) { + this.followCheckbox.prop("checked", false); + } + } + // FIXME: add some style based on following? + updateChatParticipantList(); + this.updateFollow(); + }), + + update: function () { + if (! this.peer.isSelf) { + if (this.peer.status == "live") { + this.dock(); + } else { + this.undock(); + } + } + this.updateDisplay(); + this.updateUrlDisplay(); + }, + + updateUrlDisplay: function (force) { + var url = this.peer.url; + if ((! url) || (url == this._lastUpdateUrlDisplay && ! force)) { + return; + } + this._lastUpdateUrlDisplay = url; + var sameUrl = url == session.currentUrl(); + ui.chat.urlChange({ + peer: this.peer, + url: this.peer.url, + title: this.peer.title, + sameUrl: sameUrl + }); + }, + + urlNudge: function () { + // FIXME: do something more distinct here + this.updateUrlDisplay(true); + }, + + notifyJoined: function () { + ui.chat.joinedSession({ + peer: this.peer + }); + }, + + // when there are too many participants in the dock, consolidate the participants to one avatar, and on mouseOver, the dock expands down to reveal the rest of the participants + // if there are X users in the session + // then hide the users in the dock + // and shrink the size of the dock + // and if you rollover the dock, it expands and reveals the rest of the participants in the dock + + //if users hit X then show the participant button with the consol + + dock: deferForContainer(function () { + + var numberOfUsers = peers.getAllPeers().length; + + // collapse the Dock if too many users + function CollapsedDock() { + // decrease/reset dock height + $("#togetherjs-dock").css("height", 260); + //replace participant button + $("#togetherjs-dock-participants").replaceWith(""); + // new full participant window created on toggle + $("#togetherjs-participantlist-button").click(function () { + windowing.toggle("#togetherjs-participantlist"); + }); + } + + // FIXME: turned off for now + if( numberOfUsers >= 5 && false) { + CollapsedDock(); + } else { + // reset + + } + + + if (this.dockElement) { + return; + } + this.dockElement = templating.sub("dock-person", { + peer: this.peer + }); + this.dockElement.attr("id", this.peer.className("togetherjs-dock-element-")); + ui.container.find("#togetherjs-dock-participants").append(this.dockElement); + this.dockElement.find(".togetherjs-person").animateDockEntry(); + adjustDockSize(1); + this.detailElement = templating.sub("participant-window", { + peer: this.peer + }); + var followId = this.peer.className("togetherjs-person-status-follow-"); + this.detailElement.find('[for="togetherjs-person-status-follow"]').attr("for", followId); + this.detailElement.find('#togetherjs-person-status-follow').attr("id", followId); + this.detailElement.find(".togetherjs-follow").click(function () { + location.href = $(this).attr("href"); + }); + this.detailElement.find(".togetherjs-nudge").click((function () { + this.peer.nudge(); + }).bind(this)); + this.followCheckbox = this.detailElement.find("#" + followId); + this.followCheckbox.change(function () { + if (! this.checked) { + this.peer.unfollow(); + } + // Following doesn't happen until the window is closed + // FIXME: should we tell the user this? + }); + this.maybeHideDetailWindow = this.maybeHideDetailWindow.bind(this); + session.on("hide-window", this.maybeHideDetailWindow); + ui.container.append(this.detailElement); + this.dockElement.click((function () { + if (this.detailElement.is(":visible")) { + windowing.hide(this.detailElement); + } else { + windowing.show(this.detailElement, {bind: this.dockElement}); + this.scrollTo(); + this.cursor().element.animate({ + opacity:0.3 + }).animate({ + opacity:1 + }).animate({ + opacity:0.3 + }).animate({ + opacity:1 + }); + } + }).bind(this)); + this.updateFollow(); + }), + + undock: function () { + if (! this.dockElement) { + return; + } + this.dockElement.animateDockExit().promise().then((function () { + this.dockElement.remove(); + this.dockElement = null; + this.detailElement.remove(); + this.detailElement = null; + adjustDockSize(-1); + }).bind(this)); + }, + + scrollTo: function () { + if (this.peer.url != session.currentUrl()) { + return; + } + var pos = this.peer.scrollPosition; + if (! pos) { + console.warn("Peer has no scroll position:", this.peer); + return; + } + pos = elementFinder.pixelForPosition(pos); + $("html, body").easeTo(pos); + }, + + updateFollow: function () { + if (! this.peer.url) { + return; + } + if (! this.detailElement) { + return; + } + var same = this.detailElement.find(".togetherjs-same-url"); + var different = this.detailElement.find(".togetherjs-different-url"); + if (this.peer.url == session.currentUrl()) { + same.show(); + different.hide(); + } else { + same.hide(); + different.show(); + } + }, + + maybeHideDetailWindow: function (windows) { + if (this.detailElement && windows[0] && windows[0][0] === this.detailElement[0]) { + if (this.followCheckbox[0].checked) { + this.peer.follow(); + } else { + this.peer.unfollow(); + } + } + }, + + dockClick: function () { + // FIXME: scroll to person + }, + + cursor: function () { + return require("cursor").getClient(this.peer.id); + }, + + destroy: function () { + // FIXME: should I get rid of the dockElement? + session.off("hide-window", this.maybeHideDetailWindow); + } + }); + + function updateChatParticipantList() { + var live = peers.getAllPeers(true); + if (live.length) { + ui.displayToggle("#togetherjs-chat-participants"); + $("#togetherjs-chat-participant-list").text( + live.map(function (p) {return p.name;}).join(", ")); + } else { + ui.displayToggle("#togetherjs-chat-no-participants"); + } + } + + function inviteHubUrl() { + var base = TogetherJS.config.get("inviteFromRoom"); + assert(base); + return util.makeUrlAbsolute(base, session.hubUrl()); + } + + var inRefresh = false; + + function refreshInvite() { + if (inRefresh) { + return; + } + inRefresh = true; + require(["who"], function (who) { + var def = who.getList(inviteHubUrl()); + function addUser(user, before) { + var item = templating.sub("invite-user-item", {peer: user}); + item.attr("data-clientid", user.id); + if (before) { + item.insertBefore(before); + } else { + $("#togetherjs-invite-users").append(item); + } + item.click(function() { + invite(user.clientId); + }); + } + function refresh(users, finished) { + var sorted = []; + for (var id in users) { + if (users.hasOwnProperty(id)) { + sorted.push(users[id]); + } + } + sorted.sort(function (a, b) { + return a.name < b.name ? -1 : 1; + }); + var pos = 0; + ui.container.find("#togetherjs-invite-users .togetherjs-menu-item").each(function () { + var $this = $(this); + if (finished && ! users[$this.attr("data-clientid")]) { + $this.remove(); + return; + } + if (pos >= sorted.length) { + return; + } + while (pos < sorted.length && $this.attr("data-clientid") !== sorted[pos].id) { + addUser(sorted[pos], $this); + pos++; + } + while (pos < sorted.length && $this.attr("data-clientid") == sorted[pos].id) { + pos++; + } + }); + for (var i=pos; i TOO_FAR_APART; + } + + session.on("close", unsetListeners); + + function unsetListeners() { + var videos = $('video'); + listeners.forEach(function (event) { + videos.off(event.name, event.listener); + }); + listeners = []; + } + + + session.hub.on('video-timeupdate', function (msg) { + var element = $findElement(msg.location); + var oldTime = element.prop('currentTime'); + var newTime = msg.position; + + //to help throttle uneccesary position changes + if(areTooFarApart(oldTime, newTime)){ + setTime(element, msg.position); + } + }); + + MIRRORED_EVENTS.forEach( function (eventName) { + session.hub.on("video-"+eventName, function (msg) { + var element = $findElement(msg.location); + + setTime(element, msg.position); + + element.trigger(eventName, {silent: true}); + }); + }); + + //Currently does not discriminate between visible and invisible videos + function $findElement(location) { + return $(elementFinder.findElement(location)); + } + + function setTime(video, time) { + video.prop('currentTime', time); + } + +}); diff --git a/v3/js/togetherjs/togetherjs/visibilityApi.js b/v3/js/togetherjs/togetherjs/visibilityApi.js new file mode 100644 index 000000000..6d4b6ce94 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/visibilityApi.js @@ -0,0 +1,46 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* Loading this module will cause, when TogetherJS is active, the + session object to emit visibility-change with a `hidden` argument + whenever the visibility changes, on browsers where we can detect + it. + */ + +define(["util", "session"], function (util, session) { + var visibilityApi = util.Module("visibilityApi"); + var hidden; + var visibilityChange; + if (document.hidden !== undefined) { // Opera 12.10 and Firefox 18 and later support + hidden = "hidden"; + visibilityChange = "visibilitychange"; + } else if (document.mozHidden !== undefined) { + hidden = "mozHidden"; + visibilityChange = "mozvisibilitychange"; + } else if (document.msHidden !== undefined) { + hidden = "msHidden"; + visibilityChange = "msvisibilitychange"; + } else if (document.webkitHidden !== undefined) { + hidden = "webkitHidden"; + visibilityChange = "webkitvisibilitychange"; + } + + session.on("start", function () { + document.addEventListener(visibilityChange, change, false); + }); + + session.on("close", function () { + document.removeEventListener(visibilityChange, change, false); + }); + + function change() { + session.emit("visibility-change", document[hidden]); + } + + visibilityApi.hidden = function () { + return document[hidden]; + }; + + return visibilityApi; +}); diff --git a/v3/js/togetherjs/togetherjs/walkabout.html b/v3/js/togetherjs/togetherjs/walkabout.html new file mode 100644 index 000000000..24c109107 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/walkabout.html @@ -0,0 +1,5 @@ +
    + diff --git a/v3/js/togetherjs/togetherjs/walkthrough.html b/v3/js/togetherjs/togetherjs/walkthrough.html new file mode 100644 index 000000000..a5aeb732e --- /dev/null +++ b/v3/js/togetherjs/togetherjs/walkthrough.html @@ -0,0 +1,90 @@ + +
    +
    {{ gettext( "You're using TOOL_NAME!" ) }}
    + +
    +
    + +
    +

    +

    {{ gettext( "TOOL_NAME is a service for your website that makes it easy to collaborate in real-time on SITE_NAME") }}

    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +

    {{ gettext( "Set up your avatar, name and user color above. If you'd like to update it later, you can click your Profile button.") }}

    +
    +
    +

    +

    {{ gettext( "Change your avatar, name and user color using the Profile button." ) }}

    +
    +
    + +
    +

    +

    +

    {{ gettext( "You can invite more friends to the session by sending the invite link in the TOOL_NAME dock." ) }}

    +

    + + {{ gettext( "Copy and paste this link into IM or email to invite friends." ) }} + + +

    +

    {{ gettext("Send the above link to a friend so they can join your session! You can find this invite link on the TOOL_NAME dock as well.") }}

    +
    + +
    +

    +

    {{ gettext( "Friends who join your TOOL_NAME session will appear here. You can click their avatars to see more." ) }}

    +
    + +
    +

    +

    {{ gettext( "When your friends join you in your TOOL_NAME session, you can chat with them here!" ) }}

    +
    + +
    +

    +

    {{ gettext( "If your browser supports it, click the microphone icon to begin a audio chat. Learn more about this experimental feature here." ) }}

    +
    + +
    +

    +

    {{ gettext( "Alright, you're ready to use TOOL_NAME. Now start collaborating on SITE_NAME!" ) }}

    +
    + +
    + + +
    +
    +
    + +
    + +
    + +
    diff --git a/v3/js/togetherjs/togetherjs/walkthrough.js b/v3/js/togetherjs/togetherjs/walkthrough.js new file mode 100644 index 000000000..9acd32236 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/walkthrough.js @@ -0,0 +1,151 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +define(["util", "ui", "jquery", "windowing", "templates", "templating", "session", "peers"], function (util, ui, $, windowing, templates, templating, session, peers) { + var assert = util.assert; + var walkthrough = util.Module("walkthrough"); + var onHideAll = null; + var container = null; + + var slides = null; + + walkthrough.start = function (firstTime, doneCallback) { + if (! container) { + container = $(templates("walkthrough")); + container.hide(); + ui.container.append(container); + slides = container.find(".togetherjs-walkthrough-slide"); + slides.hide(); + var progress = $("#togetherjs-walkthrough-progress"); + slides.each(function (index) { + var bullet = templating.sub("walkthrough-slide-progress"); + progress.append(bullet); + bullet.click(function () { + show(index); + }); + }); + container.find("#togetherjs-walkthrough-previous").click(previous); + container.find("#togetherjs-walkthrough-next").click(next); + ui.prepareShareLink(container); + container.find(".togetherjs-self-name").bind("keyup", function (event) { + var val = $(event.target).val(); + peers.Self.update({name: val}); + }); + container.find(".togetherjs-swatch").click(function () { + var picker = $("#togetherjs-pick-color"); + if (picker.is(":visible")) { + picker.hide(); + return; + } + picker.show(); + picker.find(".togetherjs-swatch-active").removeClass("togetherjs-swatch-active"); + picker.find(".togetherjs-swatch[data-color=\"" + peers.Self.color + "\"]").addClass("togetherjs-swatch-active"); + var location = container.find(".togetherjs-swatch").offset(); + picker.css({ + top: location.top, + // The -7 comes out of thin air, but puts it in the right place: + left: location.left-7 + }); + }); + if (session.isClient) { + container.find(".togetherjs-if-creator").remove(); + container.find(".togetherjs-ifnot-creator").show(); + } else { + container.find(".togetherjs-if-creator").show(); + container.find(".togetherjs-ifnot-creator").remove(); + } + TogetherJS.config.track("siteName", function (value) { + value = value || document.title; + container.find(".togetherjs-site-name").text(value); + }); + ui.activateAvatarEdit(container, { + onSave: function () { + container.find("#togetherjs-avatar-when-saved").show(); + container.find("#togetherjs-avatar-when-unsaved").hide(); + }, + onPending: function () { + container.find("#togetherjs-avatar-when-saved").hide(); + container.find("#togetherjs-avatar-when-unsaved").show(); + } + }); + // This triggers substititions in the walkthrough: + peers.Self.update({}); + session.emit("new-element", container); + } + assert(typeof firstTime == "boolean", "You must provide a firstTime boolean parameter"); + if (firstTime) { + container.find(".togetherjs-walkthrough-firsttime").show(); + container.find(".togetherjs-walkthrough-not-firsttime").hide(); + } else { + container.find(".togetherjs-walkthrough-firsttime").hide(); + container.find(".togetherjs-walkthrough-not-firsttime").show(); + } + onHideAll = doneCallback; + show(0); + windowing.show(container); + }; + + function show(index) { + slides.hide(); + $(slides[index]).show(); + var bullets = container.find("#togetherjs-walkthrough-progress .togetherjs-walkthrough-slide-progress"); + bullets.removeClass("togetherjs-active"); + $(bullets[index]).addClass("togetherjs-active"); + var $next = $("#togetherjs-walkthrough-next").removeClass("togetherjs-disabled"); + var $previous = $("#togetherjs-walkthrough-previous").removeClass("togetherjs-disabled"); + if (index == slides.length - 1) { + $next.addClass("togetherjs-disabled"); + } else if (index === 0) { + $previous.addClass("togetherjs-disabled"); + } + } + + function previous() { + var index = getIndex(); + index--; + if (index < 0) { + index = 0; + } + show(index); + } + + function next() { + var index = getIndex(); + index++; + if (index >= slides.length) { + index = slides.length-1; + } + show(index); + } + + function getIndex() { + var active = slides.filter(":visible"); + if (! active.length) { + return 0; + } + for (var i=0; i"); + $canvas[0].height = session.AVATAR_SIZE; + $canvas[0].width = session.AVATAR_SIZE; + var context = $canvas[0].getContext("2d"); + context.arc(session.AVATAR_SIZE/2, session.AVATAR_SIZE/2, session.AVATAR_SIZE/2, 0, Math.PI*2); + context.closePath(); + context.clip(); + context.drawImage($video[0], (session.AVATAR_SIZE - width) / 2, 0, width, height); + savePicture($canvas[0].toDataURL("image/png")); + } + + $upload.on("change", function () { + var reader = new FileReader(); + reader.onload = function () { + // FIXME: I don't actually know it's JPEG, but it's probably a + // good enough guess: + var url = "data:image/jpeg;base64," + util.blobToBase64(this.result); + convertImage(url, function (result) { + savePicture(result); + }); + }; + reader.onerror = function () { + console.error("Error reading file:", this.error); + }; + reader.readAsArrayBuffer(this.files[0]); + }); + + function convertImage(imageUrl, callback) { + var $canvas = $(""); + $canvas[0].height = session.AVATAR_SIZE; + $canvas[0].width = session.AVATAR_SIZE; + var context = $canvas[0].getContext("2d"); + var img = new Image(); + img.src = imageUrl; + // Sometimes the DOM updates immediately to call + // naturalWidth/etc, and sometimes it doesn't; using setTimeout + // gives it a chance to catch up + setTimeout(function () { + var width = img.naturalWidth || img.width; + var height = img.naturalHeight || img.height; + width = width * (session.AVATAR_SIZE / height); + height = session.AVATAR_SIZE; + context.drawImage(img, 0, 0, width, height); + callback($canvas[0].toDataURL("image/png")); + }); + } + + }); + + /**************************************** + * RTC support + */ + + function audioButton(selector) { + ui.displayToggle(selector); + if (selector == "#togetherjs-audio-incoming") { + $("#togetherjs-audio-button").addClass("togetherjs-animated").addClass("togetherjs-color-alert"); + } else { + $("#togetherjs-audio-button").removeClass("togetherjs-animated").removeClass("togetherjs-color-alert"); + } + } + + session.on("ui-ready", function () { + $("#togetherjs-audio-button").click(function () { + if ($("#togetherjs-rtc-info").is(":visible")) { + windowing.hide(); + return; + } + if (session.RTCSupported) { + enableAudio(); + } else { + windowing.show("#togetherjs-rtc-not-supported"); + } + }); + + if (! session.RTCSupported) { + audioButton("#togetherjs-audio-unavailable"); + return; + } + audioButton("#togetherjs-audio-ready"); + + var audioStream = null; + var accepted = false; + var connected = false; + var $audio = $("#togetherjs-audio-element"); + var offerSent = null; + var offerReceived = null; + var offerDescription = false; + var answerSent = null; + var answerReceived = null; + var answerDescription = false; + var _connection = null; + var iceCandidate = null; + + function enableAudio() { + accepted = true; + storage.settings.get("dontShowRtcInfo").then(function (dontShow) { + if (! dontShow) { + windowing.show("#togetherjs-rtc-info"); + } + }); + if (! audioStream) { + startStreaming(connect); + return; + } + if (! connected) { + connect(); + } + toggleMute(); + } + + ui.container.find("#togetherjs-rtc-info .togetherjs-dont-show-again").change(function () { + storage.settings.set("dontShowRtcInfo", this.checked); + }); + + function error() { + console.warn.apply(console, arguments); + var s = ""; + for (var i=0; i= expected) { + close(); + } else { + def.notify(users); + } + } + } + console.log("users", users); + }; + channel.send({ + type: "who", + "server-echo": true, + clientId: null + }); + var timeout = setTimeout(function () { + close(); + }, MAX_RESPONSE_TIME); + function close() { + if (timeout) { + clearTimeout(timeout); + } + if (lateResponseTimeout) { + clearTimeout(lateResponseTimeout); + } + channel.close(); + def.resolve(users); + } + }); + }; + + who.invite = function (hubUrl, clientId) { + return util.Deferred(function (def) { + var channel = channels.WebSocketChannel(hubUrl); + var id = util.generateId(); + channel.onmessage = function (msg) { + if (msg.type == "invite" && msg.inviteId == id) { + channel.close(); + def.resolve(); + } + }; + var userInfo = session.makeHelloMessage(false); + delete userInfo.type; + userInfo.clientId = session.clientId; + channel.send({ + type: "invite", + inviteId: id, + url: session.shareUrl(), + userInfo: userInfo, + forClientId: clientId, + clientId: null, + "server-echo": true + }); + }); + }; + + who.ExternalPeer = util.Class({ + isSelf: false, + isExternal: true, + constructor: function (id, attrs) { + attrs = attrs || {}; + assert(id); + this.id = id; + this.identityId = attrs.identityId || null; + this.status = attrs.status || "live"; + this.idle = attrs.status || "active"; + this.name = attrs.name || null; + this.avatar = attrs.avatar || null; + this.color = attrs.color || "#00FF00"; + this.lastMessageDate = 0; + this.view = ui.PeerView(this); + }, + + className: function (prefix) { + prefix = prefix || ""; + return prefix + util.safeClassName(this.id); + } + + }); + + return who; +}); diff --git a/v3/js/togetherjs/togetherjs/windowing.js b/v3/js/togetherjs/togetherjs/windowing.js new file mode 100644 index 000000000..ee02fc537 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/windowing.js @@ -0,0 +1,216 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ +define(["jquery", "util", "peers", "session"], function ($, util, peers, session) { + var assert = util.assert; + var windowing = util.Module("windowing"); + var $window = $(window); + // This is also in togetherjs.less, under .togetherjs-animated + var ANIMATION_DURATION = 1000; + + /* Displays one window. A window must already exist. This hides other windows, and + positions the window according to its data-bound-to attributes */ + windowing.show = function (element, options) { + element = $(element); + options = options || {}; + options.bind = options.bind || element.attr("data-bind-to"); + var notification = element.hasClass("togetherjs-notification"); + var modal = element.hasClass("togetherjs-modal"); + if (options.bind) { + options.bind = $(options.bind); + } + windowing.hide(); + element.stop(); + element.show(); + // In addition to being hidden, the window can be faded out, which we want to undo: + element.css({opacity: "1"}); + if (options.bind) { + assert(! modal, "Binding does not currently work with modals"); + bind(element, options.bind); + } + if (notification) { + element.slideIn(); + } else if (! modal) { + element.popinWindow(); + } + if (modal) { + getModalBackground().show(); + modalEscape.bind(); + } + onClose = options.onClose || null; + session.emit("display-window", element.attr("id"), element); + }; + + var onClose = null; + + /* Moves a window to be attached to data-bind-to, e.g., the button + that opened the window. Or you can provide an element that it should bind to. */ + function bind(win, bound) { + if ($.browser.mobile) { + return; + } + win = $(win); + assert(bound.length, "Cannot find binding:", bound.selector, "from:", win.selector); + // FIXME: hardcoding + var ifacePos = "right"; + //var ifacePos = panelPosition(); + var boundPos = bound.offset(); + boundPos.height = bound.height(); + boundPos.width = bound.width(); + var windowHeight = $window.height(); + boundPos.top -= $window.scrollTop(); + boundPos.left -= $window.scrollLeft(); + // FIXME: I appear to have to add the padding to the width to get a "true" + // width. But it's still not entirely consistent. + var height = win.height() + 5; + var width = win.width() + 20; + var left, top; + if (ifacePos == "right") { + left = boundPos.left - 11 - width; + top = boundPos.top + (boundPos.height / 2) - (height / 2); + } else if (ifacePos == "left") { + left = boundPos.left + boundPos.width + 15; + top = boundPos.top + (boundPos.height / 2) - (height / 2); + } else if (ifacePos == "bottom") { + left = (boundPos.left + boundPos.width / 2) - (width / 2); + top = boundPos.top - 10 - height; + } + top = Math.min(windowHeight - 10 - height, Math.max(10, top)); + win.css({ + top: top + "px", + left: left + "px" + }); + if (win.hasClass("togetherjs-window")) { + $("#togetherjs-window-pointer-right, #togetherjs-window-pointer-left").hide(); + var pointer = $("#togetherjs-window-pointer-" + ifacePos); + pointer.show(); + if (ifacePos == "right") { + pointer.css({ + top: boundPos.top + Math.floor(boundPos.height / 2) + "px", + left: left + win.width() + 9 + "px" + }); + } else if (ifacePos == "left") { + pointer.css({ + top: boundPos.top + Math.floor(boundPos.height / 2) + "px", + left: (left - 5) + "px" + }); + } else { + console.warn("don't know how to deal with position:", ifacePos); + } + } + win.data("boundTo", bound.selector || "#" + bound.attr("id")); + bound.addClass("togetherjs-active"); + } + + session.on("resize", function () { + var win = $(".togetherjs-modal:visible, .togetherjs-window:visible"); + if (! win.length) { + return; + } + var boundTo = win.data("boundTo"); + if (! boundTo) { + return; + } + boundTo = $(boundTo); + bind(win, boundTo); + }); + + windowing.hide = function (els) { + // FIXME: also hide modals? + els = els || ".togetherjs-window, .togetherjs-modal, .togetherjs-notification"; + els = $(els); + els = els.filter(":visible"); + els.filter(":not(.togetherjs-notification)").hide(); + getModalBackground().hide(); + var windows = []; + els.each(function (index, element) { + element = $(element); + windows.push(element); + var bound = element.data("boundTo"); + if (! bound) { + return; + } + bound = $(bound); + bound.addClass("togetherjs-animated").addClass("togetherjs-color-pulse"); + setTimeout(function () { + bound.removeClass("togetherjs-color-pulse").removeClass("togetherjs-animated"); + }, ANIMATION_DURATION+10); + element.data("boundTo", null); + bound.removeClass("togetherjs-active"); + if (element.hasClass("togetherjs-notification")) { + element.fadeOut().promise().then(function () { + this.hide(); + }); + } + }); + $("#togetherjs-window-pointer-right, #togetherjs-window-pointer-left").hide(); + if (onClose) { + onClose(); + onClose = null; + } + if (windows.length) { + session.emit("hide-window", windows); + } + }; + + windowing.showNotification = function (element, options) { + element = $(element); + options = options || {}; + assert(false); + }; + + windowing.toggle = function (el) { + el = $(el); + if (el.is(":visible")) { + windowing.hide(el); + } else { + windowing.show(el); + } + }; + + function bindEvents(el) { + el.find(".togetherjs-close, .togetherjs-dismiss").click(function (event) { + var w = $(event.target).closest(".togetherjs-window, .togetherjs-modal, .togetherjs-notification"); + windowing.hide(w); + event.stopPropagation(); + return false; + }); + } + + function getModalBackground() { + if (getModalBackground.element) { + return getModalBackground.element; + } + var background = $("#togetherjs-modal-background"); + assert(background.length); + getModalBackground.element = background; + background.click(function () { + windowing.hide(); + }); + return background; + } + + var modalEscape = { + bind: function () { + $(document).keydown(modalEscape.onKeydown); + }, + unbind: function () { + $(document).unbind("keydown", modalEscape.onKeydown); + }, + onKeydown: function (event) { + if (event.which == 27) { + windowing.hide(); + } + } + }; + + session.on("close", function () { + modalEscape.unbind(); + }); + + session.on("new-element", function (el) { + bindEvents(el); + }); + + return windowing; +}); diff --git a/v3/js/togetherjs/togetherjs/youtubeVideos.js b/v3/js/togetherjs/togetherjs/youtubeVideos.js new file mode 100644 index 000000000..04a84ce21 --- /dev/null +++ b/v3/js/togetherjs/togetherjs/youtubeVideos.js @@ -0,0 +1,277 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http:// mozilla.org/MPL/2.0/. */ + +define(["jquery", "util", "session", "elementFinder"], +function ($, util, session, elementFinder) { + + // constant var to indicate whether two players are too far apart in sync + var TOO_FAR_APART = 3000; + // embedded youtube iframes + var youTubeIframes = []; + // youtube API load delay + var API_LOADING_DELAY = 2000; + + session.on("reinitialize", function () { + if (TogetherJS.config.get("youtube")) { + prepareYouTube(); + } + }); + + session.on("close", function () { + $(youTubeIframes).each(function (i, iframe) { + // detach players from iframes + $(iframe).removeData("togetherjs-player"); + $(iframe).removeData("dontPublish"); + $(iframe).removeData("currentVideoId"); + // disable iframeAPI + $(iframe).removeAttr("enablejsapi"); + // remove unique youtube iframe indicators + var id = $(iframe).attr("id") || ""; + if (id.indexOf("youtube-player") === 0) { + // An id we added + $(iframe).removeAttr("id"); + } + youTubeIframes = []; + }); + }); + + TogetherJS.config.track("youtube", function (track, previous) { + if (track && ! previous) { + prepareYouTube(); + // You can enable youtube dynamically, but can't turn it off: + TogetherJS.config.close("youtube"); + } + }); + + function prepareYouTube() { + // setup iframes first + setupYouTubeIframes(); + + // this function should be global so it can be called when API is loaded + window.onYouTubeIframeAPIReady = function() { + // YouTube API is ready + $(youTubeIframes).each(function (i, iframe) { + var player = new YT.Player(iframe.id, { // get the reference to the already existing iframe + events: { + 'onReady': insertPlayer, + 'onStateChange': publishPlayerStateChange + } + }); + }); + }; + + if (window.YT === undefined) { + // load necessary API + // it calls onYouTubeIframeAPIReady automatically when the API finishes loading + var tag = document.createElement('script'); + tag.src = "https://www.youtube.com/iframe_api"; + var firstScriptTag = document.getElementsByTagName('script')[0]; + firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + } else { + // manually invoke APIReady function when the API was already loaded by user + onYouTubeIframeAPIReady(); + } + + // give each youtube iframe a unique id and set its enablejsapi param to true + function setupYouTubeIframes() { + var iframes = $('iframe'); + iframes.each(function (i, iframe) { + // if the iframe's unique id is already set, skip it + // FIXME: what if the user manually sets an iframe's id (i.e. "#my-youtube")? + // maybe we should set iframes everytime togetherjs is reinitialized? + if (($(iframe).attr("src") || "").indexOf("youtube") != -1 && !$(iframe).attr("id")) { + $(iframe).attr("id", "youtube-player"+i); + $(iframe).attr("enablejsapi", 1); + youTubeIframes[i] = iframe; + } + }); + } // iframes are ready + + function insertPlayer(event) { + // only when it is READY, attach a player to its iframe + var currentPlayer = event.target; + var currentIframe = currentPlayer.a; + // check if a player is already attached in case of being reinitialized + if (!$(currentIframe).data("togetherjs-player")) { + $(currentIframe).data("togetherjs-player", currentPlayer); + // initialize its dontPublish flag as well + $(currentIframe).data("dontPublish", false); + // store its current video's id + var currentVideoId = getVideoIdFromUrl(currentPlayer.getVideoUrl()); + $(currentIframe).data("currentVideoId", currentVideoId); + } + } + } // end of prepareYouTube + + function publishPlayerStateChange(event) { + var target = event.target; + var currentIframe = target.a; + // FIXME: player object retrieved from event.target has an incomplete set of essential functions + // this is most likely due to a recently-introduced problem with current YouTube API as others have been reporting the same issue (12/18/`13) + //var currentPlayer = target; + //var currentTime = currentPlayer.getCurrentTime(); + var currentPlayer = $(currentIframe).data("togetherjs-player"); + var currentTime = target.k.currentTime; + var iframeLocation = elementFinder.elementLocation(currentIframe); + + if ($(currentPlayer).data("seek")) { + $(currentPlayer).removeData("seek"); + return; + } + + // do not publish if playerState was changed by other users + if ($(currentIframe).data("dontPublish")) { + // make it false again so it can start publishing events of its own state changes + $(currentIframe).data("dontPublish", false); + return; + } + + // notify other people that I changed the player state + if (event.data == YT.PlayerState.PLAYING) { + + var currentVideoId = isDifferentVideoLoaded(currentIframe); + if (currentVideoId) { + // notify that I just loaded another video + publishDifferentVideoLoaded(iframeLocation, currentVideoId); + // update current video id + $(currentIframe).data("currentVideoId", currentVideoId); + } else { + session.send({ + type: "playerStateChange", + element: iframeLocation, + playerState: 1, + playerTime: currentTime + }); + } + } else if (event.data == YT.PlayerState.PAUSED) { + session.send({ + type: "playerStateChange", + element: iframeLocation, + playerState: 2, + playerTime: currentTime + }); + } else { + // do nothing when the state is buffering, cued, or ended + return; + } + } + + function publishDifferentVideoLoaded(iframeLocation, videoId) { + session.send({ + type: "differentVideoLoaded", + videoId: videoId, + element: iframeLocation + }); + } + + session.hub.on('playerStateChange', function (msg) { + var iframe = elementFinder.findElement(msg.element); + var player = $(iframe).data("togetherjs-player"); + var currentTime = player.getCurrentTime(); + var currentState = player.getPlayerState(); + + if (currentState != msg.playerState) { + $(iframe).data("dontPublish", true); + } + + if (msg.playerState == 1) { + player.playVideo(); + // seekTo() updates the video's time and plays it if it was already playing + // and pauses it if it was already paused + if (areTooFarApart(currentTime, msg.playerTime)) { + player.seekTo(msg.playerTime, true); + } + } else if (msg.playerState == 2) { + // When YouTube videos are advanced while playing, + // Chrome: pause -> pause -> play (onStateChange is called even when it is from pause to pause) + // FireFox: buffering -> play -> buffering -> play + // We must prevent advanced videos from going out of sync + player.pauseVideo(); + if (areTooFarApart(currentTime, msg.playerTime)) { + // "seek" flag will help supress publishing unwanted state changes + $(player).data("seek", true); + player.seekTo(msg.playerTime, true); + } + } + }); + + // if a late user joins a channel, synchronize his videos + session.hub.on('hello', function () { + // wait a couple seconds to make sure the late user has finished loading API + setTimeout(synchronizeVideosOfLateGuest, API_LOADING_DELAY); + }); + + session.hub.on('synchronizeVideosOfLateGuest', function (msg) { + var iframe = elementFinder.findElement(msg.element); + var player = $(iframe).data("togetherjs-player"); + // check if another video had been loaded to an existing iframe before I joined + var currentVideoId = $(iframe).data("currentVideoId"); + if (msg.videoId != currentVideoId) { + $(iframe).data("currentVideoId", msg.videoId); + player.loadVideoById(msg.videoId, msg.playerTime, 'default'); + } else { + // if the video is only cued, I do not have to do anything to sync + if (msg.playerState != 5) { + player.seekTo(msg.playerTime, true); + } + } + }); + + session.hub.on('differentVideoLoaded', function (msg) { + // load a new video if the host has loaded one + var iframe = elementFinder.findElement(msg.element); + var player = $(iframe).data("togetherjs-player"); + player.loadVideoById(msg.videoId, 0, 'default'); + $(iframe).data("currentVideoId", msg.videoId); + + }); + + function synchronizeVideosOfLateGuest() { + youTubeIframes.forEach(function (iframe) { + var currentPlayer = $(iframe).data("togetherjs-player"); + var currentVideoId = getVideoIdFromUrl(currentPlayer.getVideoUrl()); + var currentState = currentPlayer.getPlayerState(); + var currentTime = currentPlayer.getCurrentTime(); + var iframeLocation = elementFinder.elementLocation(iframe); + session.send({ + type: "synchronizeVideosOfLateGuest", + element: iframeLocation, + videoId: currentVideoId, + playerState: currentState, //this might be necessary later + playerTime: currentTime + }); + }); + } + + function isDifferentVideoLoaded(iframe) { + var lastVideoId = $(iframe).data("currentVideoId"); + var currentPlayer = $(iframe).data("togetherjs-player"); + var currentVideoId = getVideoIdFromUrl(currentPlayer.getVideoUrl()); + + // since url forms of iframe src and player's video url are different, + // I have to compare the video ids + if (currentVideoId != lastVideoId) { + return currentVideoId; + } else { + return false; + } + } + + // parses videoId from the url returned by getVideoUrl function + function getVideoIdFromUrl(videoUrl) { + var videoId = videoUrl.split('v=')[1]; + //Chrome and Firefox have different positions for parameters + var ampersandIndex = videoId.indexOf('&'); + if (ampersandIndex != -1) { + videoId = videoId.substring(0, ampersandIndex); + } + return videoId; + } + + function areTooFarApart(myTime, theirTime) { + var secDiff = Math.abs(myTime - theirTime); + var milliDiff = secDiff * 1000; + return milliDiff > TOO_FAR_APART; + } +}); diff --git a/v3/make_visualizations.py b/v3/make_visualizations.py new file mode 100644 index 000000000..96d66e14f --- /dev/null +++ b/v3/make_visualizations.py @@ -0,0 +1,423 @@ +# 'Make' support for Online Python Tutor +# +# Copyright (C) 2013 Peter Robinson (pjr@itee.uq.edu.au) +# +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +""" +This program is a 'make' program for embedding traces in web pages. + +The process is driven by a .json file (the 'Makefile') + +Assuming the file viz_makefile.json is in the cwd which will typically +be where the web pages and python code to be visualized reside, +and $OPT is the path to the installation of OPT +(including make_visualizations.py) then + +python $OPT/make_visualizations.py viz_makefile.json + +will generate all the .js traces and update the web pages as specified +in viz_makefile.json. + +python $OPT/make_visualizations.py viz_makefile.json eg1.html + +will do the same thing but only for the given page(s). + +Here is an example of the 'Makefile' viz_makefile.json +---------------------------- +{ +"visualizer_url": + "http://path_to_local_visualizer/visualize.html", + + +"default_viz_config": + { + "embeddedMode": true, + "verticalStack": true + }, + +"eg1.html": + [ + # hash to end of line is a comment + "js/t1.js", + { + "python_scripts/t1a.py": {} + "python_scripts/t1b.py": {"embeddedMode": false} + } + ] +"eg2.html": + [ + "js/t2.js", + { + # verticalStack is removed from the params below + "python_scripts/t2.py": {"verticalStack": ""} + } + ] +} +---------------------------- +For each .html file the first argument is the .js file where the traces will go +and the second argument is a dictionary whose keys are the python scripts +to be used to generate the traces. + +If "visualizer_url" is not supplied it defaults to + "http://pythontutor.com/visualize.html" + +If "default_viz_config" is not supplied it defaults to + {'heightChangeCallback': 'redrawAllVisualizerArrows', + 'editCodeBaseURL': viz_url} + +where viz_url is the value associated with the "visualizer_url" key. +Note: for this version heightChangeCallback is hard-wired to be +redrawAllVisualizerArrows. + +The dictionary associated with a python script overrides the +"default_viz_config" dictionary. +In other words, if all visualizations behave the same way then the dictionary +associated with a python script can be set to {} and so will end up being the +(supplied) default. + +""" + +import subprocess +import os +import re +import json +from optparse import OptionParser + +# The OPT program for generating traces +GEN_JSON = "generate_json_trace.py" + +# The command used to generate traces {0} will be the full path to GEN_JSON +# !! WARNING !! python below might need to be modified to point at the +# correct version +COMMAND = "python {0} --create_jsvar={1}Trace {2}" + +# The possible keys for configuring the visualization and their types +# At the moment changing callbacks are not supported - +# 'heightChangeCallback' is hard-wired in +VIZ_CONFIG_TYPES = {#'heightChangeCallback': unicode, + #'updateOutputCallback': unicode, + #'executeCodeWithRawInputFunc': unicode, + 'embeddedMode': bool, + 'startingInstruction': int, + 'verticalStack': bool, + 'jumpToEnd': bool, + 'codeDivWidth': int, + 'codeDivHeight': int, + 'hideOutput' : bool, + 'editCodeBaseURL' : unicode, + 'allowEditAnnotations' : bool, + 'disableHeapNesting' : bool, + 'drawParentPointer' : bool, + 'textualMemoryLabels' : bool, + 'showOnlyOutputs' : bool, + } + +CALLBACK_PATTERN_REPL = [ + (r'"heightChangeCallback"\s*:\s*"([^"]*)"', r'"heightChangeCallback":\1'), + (r'"dateOutputCallback"\s*:\s*"([^"]*)"', r'"OutputCallback":\1'), + (r'"executeCodeWithRawInputFunc"\s*:\s*"([^"]*)"', + r'"executeCodeWithRawInputFunc":\1') + ] + +# visualize.html in OPT home +DEFALUT_VIZ_URL = 'http://pythontutor.com/visualize.html' + +# The global default visualization configuration +# Note: heightChangeCallback is hard-wired to be redrawAllVisualizerArrows +DEFAULT_VIZ_CONFIG = {'heightChangeCallback': 'redrawAllVisualizerArrows'} + + +# The string used to generate js code for ExecutionVisualizer +VIZ_VAR = \ +"""var {0}Visualizer = + new ExecutionVisualizer('{0}Div', {0}Trace, + {1});""" + +# The following is used to inject the dependencies and other info +# into the web pages. If this info is already there then it will be replaced. +# If your file already has this info in but does not have the +# PY_TUTOR_END footer then manually remove this info. +# This information is based on the example from 'http://pythontutor.com' +PY_TUTOR_START = '' +PY_TUTOR_END = '' +PY_TUTOR_DEPEND = PY_TUTOR_START + \ +""" + + + + + + + + + + + + + + + + + + + +""" + PY_TUTOR_END + +# A regular expression used to remove the old info +PY_TUTOR_RE = PY_TUTOR_START + '.*' + PY_TUTOR_END + +# Used to inject a comment along with the dependency information so that +# you can cut and paste into the appropriate place in to the page body +DIV_TEXT = '
    ' + +# The ready function to go at the end ot the generated .js file +DOCUMENT_READY_TEXT = \ +""" +$(document).ready(function() {{ + +{0} + + function redrawAllVisualizerArrows() {{ + {1} + }} +$(window).resize(redrawAllVisualizerArrows); +}}); +""" + +REDRAW_CONNECTORS_TEXT = "if ({0}Visualizer) {0}Visualizer.redrawConnectors();" + +COMMENT_RE = r'#.*$' + +def check_viz_config(parent, config): + """Check that config is a valid visualization configuration""" + isOK = True + if type(config) != dict: + print "In {0}, {1} is not a dictionary".format(parent,config) + return False + for key, value in config.iteritems(): + config_field_type = VIZ_CONFIG_TYPES.get(key) + if config_field_type is None: + print "Unknown visualizer key:", key + isOK = False + elif value != '' and type(value) != config_field_type: + print "The visualizer configure entry {0}:{1} has the wrong type".format(key,value) + isOK = False + return isOK + +def check_html_build(html, html_build_info): + """Check that the build information for this html file is valid.""" + if len(html_build_info) != 2: + print "The build list for {0} should have 2 entries".format(html) + return False + if type(html_build_info[0]) != unicode or \ + not html_build_info[0].endswith('.js'): + print "The first argument of build list for {0} should be a .js file".format(html) + if type(html_build_info[1]) != dict: + print "The html build information must be a dictionary" + return False + + isOK = True + for key, value in html_build_info[1].iteritems(): + if type(key) != unicode or not key.endswith('.py'): + print "The key {0} is not a .py file".format(key) + isOK = False + isOK = check_viz_config(html_build_info[1], value) and isOK + return isOK + + +def check_build_info(build_info): + """Check that the json info is a valid 'Makefile'""" + isOK = True + if type(build_info) != dict: + print "The build information must be a dictionary" + return False + for key, value in build_info.iteritems(): + if key == 'default_viz_config': + isOK = check_viz_config(build_info, value) and isOK + elif key == 'visualizer_url': + if type(value) != unicode: + print 'The visualizer url must be a string' + isOK = False + elif key.endswith('.html'): + isOK = check_html_build(key, value) and isOK + else: + print 'Unknown key:', key + isOK = False + return isOK + +def update_dict(d, defaultd): + """Update d with key,value pairs in defaultd if the key is not in d. + If the value is the empty string then that entry is removed from + the dictionary""" + for key, value in defaultd.iteritems(): + if key not in d: + d[key] = value + elif value == '': + d.pop(key) + +def get_build_info(json_file): + """Return the build information in json_file. + Check if file is valid. + """ + try: + fp = open(json_file, 'rU') + text = fp.read() + fp.close() + text = re.sub(COMMENT_RE, '', text, flags=re.M) + build_info = json.loads(text) + except Exception as e: + print "Error in {0}:\n{1}".format(json_file, str(e)) + return None + if not check_build_info(build_info): + return None + # if necessary add a value for "visualizer_url" + if "visualizer_url" not in build_info: + build_info["visualizer_url"] = DEFALUT_VIZ_URL + # merge DEFAULT_VIZ_CONFIG with the supplied "default_viz_config" + config = DEFAULT_VIZ_CONFIG + config["editCodeBaseURL"] = build_info["visualizer_url"] + config.update(build_info.get("default_viz_config", {})) + build_info["default_viz_config"] = config + # update all the + for key, value in build_info.iteritems(): + if key.endswith('.html'): + for py_key, py_dict in value[1].iteritems(): + update_dict(py_dict, build_info.get("default_viz_config", {})) + return build_info + + +def get_vizname_root(py_file): + """Return the name to be used as the prefix for Trace, Visualizer etc""" + return os.path.basename(py_file).replace('.', '_') + + + +def run_command(gen_trace, py_file): + """ Return the output of generate_json_trace.py on py_file""" + command = COMMAND.format(gen_trace, get_vizname_root(py_file), py_file) + return subprocess.check_output(command,bufsize=1, + close_fds=True, + shell=True) + +def make_viz(build_info, html_files): + """Build the visualizations specified in build_info and html_files""" + abspath = os.path.abspath(__file__) + dname = os.path.dirname(abspath) + prog = os.path.join(dname, GEN_JSON) + # if no html files are supplied 'make' all of them + if not html_files: + html_files = [h for h in build_info if h.endswith('.html')] + + for html in html_files: + if html in build_info: + make_html_viz(prog, html, build_info[html]) + else: + print "{0} is not in the json file".format(html) + +def get_viz_config(conf): + """Get the configuration params for visualization.""" + text = json.dumps(conf) + # The callbacks are strings in conf and need to be turned into + # function relreences by removing the quotes + for patt, repl in CALLBACK_PATTERN_REPL: + text = re.sub(patt, repl, text) + return text + +def make_html_viz(prog, html_file, html_info): + """'Make' the visualizations for html_file""" + + js_out, py_dict = html_info + + # all_traces is a string containing all the js trace datastructures + # for all the supplied .py files for html_file + try: + all_traces = '\n'.join(run_command(prog, py) for py in py_dict) + except Exception as e: + print str(e) + return + + # all_viz is the string containing the js code for creating the + # required instances of ExecutionVisualizer for all the .py files + # the root of the .py file is used as the root names in ExecutionVisualizer + all_viz = '\n'.join(VIZ_VAR.format(get_vizname_root(py), + get_viz_config(pyd)) \ + for py,pyd in py_dict.iteritems()) + + all_redraws = ' \n'.join(REDRAW_CONNECTORS_TEXT.format(get_vizname_root(py)) for py, pyd in py_dict.iteritems() if 'redrawAllVisualizerArrows' in pyd.values()) + + ready_function = DOCUMENT_READY_TEXT.format(all_viz, all_redraws) + + # all_js is the string of all the require js code + all_js = all_traces + '\n' + ready_function + '\n' + + fd = open(js_out, 'w') + fd.write(all_js) + fd.close() + + # Update html_file + try: + fd = open(html_file, 'rU') + html_text = fd.read() + fd.close() + except Exception as e: + print str(e) + return + # strip out the old OPT dependency info + html_text = re.sub(PY_TUTOR_RE, '', html_text, flags=re.M | re.S) + end_head_pos = html_text.find('\n') + if end_head_pos == -1: + print "Could not find '\n' in {0}".format(html_file) + return + + # all_divs is the string of all div entries to embed in the html + # this is added to the header comments for easy cut and pasting + # to the correct location in the document. + all_divs = '\n'.join(DIV_TEXT.format(get_vizname_root(py)) for py in py_dict) + # add the updated dependency info just before + html_text = html_text[:end_head_pos] +\ + PY_TUTOR_DEPEND.format(js_out, all_divs) + \ + html_text[end_head_pos:] + fd = open(html_file, 'w') + fd.write(html_text) + fd.close() + + +def main(args): + build_info = get_build_info(args[0]) + if build_info is None: + print "Make aborted" + else: + make_viz(build_info, args[1:]) + + +if __name__ == '__main__': + usage = "usage: %prog json_file [py_files]" + parser = OptionParser(usage = usage) + options,args = parser.parse_args() + if len(args) == 0: + print "Missing arguments - try python make_visualizations.py -h" + else: + main(args) diff --git a/v3/matrix.html b/v3/matrix.html new file mode 100644 index 000000000..eebfc8bf5 --- /dev/null +++ b/v3/matrix.html @@ -0,0 +1,138 @@ + + + + + + + Coding The Matrix - Python Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    + +Write your solution code here (will be submitted for grading): +
    +
    + +

    +Write your test code here (will not be submitted for grading): +
    + +

    + +

    + +
    + + +
    +
    + +
    + + +

    + +

    + +

    + +

    +Grader output:
    + +

    + + + +
    + + + + + + diff --git a/v3/matrix.py b/v3/matrix.py new file mode 100644 index 000000000..3edeaaee5 --- /dev/null +++ b/v3/matrix.py @@ -0,0 +1,151 @@ +# m a t r i x . p y +# +# Support for 2d matrix that renders to an HTML table +# +# Chris Meyers. 09/25/2013 +# + +dftTableAttr = 'cellspacing="0" cellpadding="10"' + +class Matrix : + def __init__ (self, nrows=1, ncols=1, data=None, + dftFormat="", dftStyle="", title="", + tableAttr=dftTableAttr, tableHeaders=None, + Expand=True) : + self.nrows = nrows + self.ncols = ncols + self.values = {} + self.expanded = Expand + if Expand : + # get attributes only on the main Matrix + self.dftFormat = dftFormat + self.dftStyle = dftStyle + self.title = title + self.tableAttr = tableAttr + self.tableHeaders = tableHeaders + self.format = Matrix(nrows, ncols, Expand=False) + self.style = Matrix(nrows, ncols, Expand=False) + if data : + if type(data) == type({}) : data=dictToLol(data) + if type(data) == type([]) : + self.populate(data) + + def __getitem__(self, coords) : + row, col = coords + return self.values.get((row,col)) + + def __setitem__(self, coords, value) : + row, col = coords + self.values[(row,col)] = value + self.nrows = max(self.nrows,row+1) + self.ncols = max(self.ncols,col+1) + if self.expanded : + self.format.nrows = self.nrows + self.format.ncols = self.ncols + self.style.nrows = self.nrows + self.style.ncols = self.ncols + return value + +#=========================================== + + def setrowVals(self, row, values) : + "set each column to a seperate value" + col = 0 + for col in range(len(values)) : + self.__setitem__((row,col),values[col]) + col += 1 + + def setrowVal(self, row, value) : + "set all columns to the same value" + col = 0 + while col < self.ncols : + self.__setitem__((row,col),value) + col += 1 + + def getrow (self, row) : + vals = [] + for c in range(self.ncols) : + vals.append(self.__getitem__( (row,c) )) + return vals + +#=========================================== + + def setcolVals(self, col, values) : + "set each row to a seperate value" + row = 0 + for row in range(len(values)) : + self.__setitem__((row,col),values[row]) + row += 1 + + def setcolVal(self, col, value) : + "set all rowumns to the same value" + row = 0 + while row < self.nrows : + self.__setitem__((row,col),value) + row += 1 + + def getcol (self, col) : + vals = [] + for r in range(self.nrows) : + vals.append(self.__getitem__( (r,col) )) + return vals + +#=========================================== + + def populate(self, lists) : + "Fill self from a list of lists" + nRows = len(lists) + nCols = max([len(l) for l in lists]) + for row in range(len(lists)) : + vals = lists[row] + if type(vals) != list : vals = [vals] # make sing col + self.setrowVals(row, vals) + + def renderHtml(self,wrap=None) : + lins = ["","
    " % self.tableAttr] + if self.title : lins[0] = "
    %s
    " % self.title + headers = self.tableHeaders + if headers : + lins.append("") + for row in range(self.nrows) : + rowLin = [" "] + vals = self.getrow(row) + if self.format : formats = self.format.getrow(row) + else : formats = ['']*self.ncols + if self.style : styles = self.style.getrow(row) + else : styles = ['']*self.ncols + for c in range(self.ncols) : + val = vals[c]; style=styles[c]; format=formats[c] + if val == None : val = "" + if not format : format = self.dftFormat + if format : + if type(format)==type("") : val = format % val + else : val = format(val) + if not style : style = self.dftStyle + if style : cell = '' % (style,val) + else : cell = '' % val + if wrap and c>0 and c%wrap==0 : cell=""+cell + rowLin.append(cell) + rowLin.append("") + lins.append("".join(rowLin)) + lins.append("
    "+"".join(map(str,headers))+ + "
    %s%s
    ") + return "\n".join(lins) + + def __str__ (self) : + return "Matrix-%dx%d" % (self.nrows,self.ncols) + +#=========================================== + +typeSeq = (type([]), type((1,2))) + +def dictToLol(dic) : + "Convert dict to a list of lists" + keys = dic.keys(); keys.sort() + lists = [] + for key in keys : + val = dic[key] + if type(val) not in typeSeq : val = [val] + lists.append([key]+list(val)) + return lists + diff --git a/v3/name_lookup.py b/v3/name_lookup.py new file mode 100644 index 000000000..f58c91a7c --- /dev/null +++ b/v3/name_lookup.py @@ -0,0 +1,28 @@ +#!/usr/local/bin/python2.7 + +# Minimal CGI script for name lookups + +# Also, check CGI execute permission in your script directory. +# You might need to create an .htaccess file like the following: +# +# Options +ExecCGI +# AddHandler cgi-script .py + +import cgi +import json +import sys + +form = cgi.FieldStorage() +requested_email = form['email'].value + +print("Content-type: text/plain; charset=iso-8859-1\n") + +for line in open('names.csv'): + toks = line.strip().split(',') + name = toks[0].strip() + email = toks[1].strip() + if email == requested_email: + print(json.dumps({'name': name, 'email': email})) + sys.exit(0) # get out early + +print(json.dumps({'error': 1})) diff --git a/v3/office-mix-labshost/LabsJsServer-1.0.4.js b/v3/office-mix-labshost/LabsJsServer-1.0.4.js new file mode 100644 index 000000000..c68ec166b --- /dev/null +++ b/v3/office-mix-labshost/LabsJsServer-1.0.4.js @@ -0,0 +1,3262 @@ +/*! LabsJsServer.js - v1.0.4 - 2014-04-30 */ +var Labs; +(function (Labs) { + (function (Core) { + ; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + /** + * The current mode of the lab. Whether in edit mode or view mode. Edit is when configuring the lab and view + * is when taking the lab. + */ + (function (LabMode) { + /** + * The lab is in edit mode. Meaning the user is configuring it + */ + LabMode[LabMode["Edit"] = 0] = "Edit"; + + /** + * The lab is in view mode. Meaning the user is taking it + */ + LabMode[LabMode["View"] = 1] = "View"; + })(Core.LabMode || (Core.LabMode = {})); + var LabMode = Core.LabMode; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + ; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + /** + * Static class representing the permissions allowed for the given user of the lab + */ + var Permissions = (function () { + function Permissions() { + } + Permissions.Edit = "Labs.Permissions.Edit"; + + Permissions.Take = "Labs.Permissions.Take"; + return Permissions; + })(); + Core.Permissions = Permissions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsCore.js.map + +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Closes the component and indicates there will be no future actions against it. + */ + Actions.CloseComponentAction = "Labs.Core.Actions.CloseComponentAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Action to create a new attempt + */ + Actions.CreateAttemptAction = "Labs.Core.Actions.CreateAttemptAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Action to create a new component + */ + Actions.CreateComponentAction = "Labs.Core.Actions.CreateComponentAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Attempt timeout action + */ + Actions.AttemptTimeoutAction = "Labs.Core.Actions.AttemptTimeoutAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Action to retrieve a value associated with an attempt. + */ + Actions.GetValueAction = "Labs.Core.Actions.GetValueAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Resume attempt action. Used to indicate the user is resuming work on a given attempt. + */ + Actions.ResumeAttemptAction = "Labs.Core.Actions.ResumeAttemptAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (Actions) { + /** + * Action to submit an answer for a given attempt + */ + Actions.SubmitAnswerAction = "Labs.Core.Actions.SubmitAnswerAction"; + })(Core.Actions || (Core.Actions = {})); + var Actions = Core.Actions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsActions.js.map + +var Labs; +(function (Labs) { + (function (Core) { + (function (GetActions) { + /** + * Gets actions associated with a given component. + */ + GetActions.GetComponentActions = "Labs.Core.GetActions.GetComponentActions"; + })(Core.GetActions || (Core.GetActions = {})); + var GetActions = Core.GetActions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + (function (GetActions) { + /** + * Get attempt get action. Retrieves all actions associated with a given attempt. + */ + GetActions.GetAttempt = "Labs.Core.GetActions.GetAttempt"; + })(Core.GetActions || (Core.GetActions = {})); + var GetActions = Core.GetActions; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsGetActions.js.map + +var Labs; +(function (Labs) { + Labs.TimelineNextMessageType = "Labs.Message.Timeline.Next"; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Base class for components instances + */ + var ComponentInstanceBase = (function () { + function ComponentInstanceBase() { + } + /** + * Attaches a LabsInternal to this component instance + * + * @param { id } The ID of the component + * @param { labs } The LabsInternal object for use by the instance + */ + ComponentInstanceBase.prototype.attach = function (id, labs) { + this._id = id; + this._labs = labs; + }; + return ComponentInstanceBase; + })(); + Labs.ComponentInstanceBase = ComponentInstanceBase; +})(Labs || (Labs = {})); +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Labs; +(function (Labs) { + /** + * Class representing a component instance. An instance is an instantiation of a component for a user. It contains + * a translated view of the component for a particular run of the lab. + */ + var ComponentInstance = (function (_super) { + __extends(ComponentInstance, _super); + /** + * Constructs a new ComponentInstance. + */ + function ComponentInstance() { + _super.call(this); + } + /** + * Begins a new attempt at the component + * + * @param { callback } Callback fired when the attempt has been created + */ + ComponentInstance.prototype.createAttempt = function (callback) { + var _this = this; + // Retrieve the create attempt options + var createAttemptAction = this.getCreateAttemptOptions(); + + // And create the attempt + this._labs.takeAction(Labs.Core.Actions.CreateAttemptAction, createAttemptAction, function (err, createResult) { + var attempt = null; + if (!err) { + try { + attempt = _this.buildAttempt(createResult); + } catch (exception) { + err = exception; + } + } + + setTimeout(function () { + return callback(err, attempt); + }, 0); + }); + }; + + /** + * Retrieves all attempts associated with the given component + * + * @param { callback } Callback fired once the attempts have been retrieved + */ + ComponentInstance.prototype.getAttempts = function (callback) { + var _this = this; + var componentSearch = { + componentId: this._id, + action: Labs.Core.Actions.CreateAttemptAction + }; + + this._labs.getActions(Labs.Core.GetActions.GetComponentActions, componentSearch, function (err, actions) { + // Construct the attempts if there wasn't an error + var attempts = null; + if (!err) { + attempts = actions.map(function (action) { + return _this.buildAttempt(action); + }); + } + + // And return them + setTimeout(function () { + return callback(null, attempts); + }, 0); + }); + }; + + /** + * Retrieves the default create attempt options. Can be overriden by derived classes. + */ + ComponentInstance.prototype.getCreateAttemptOptions = function () { + var createAttemptAction = { + componentId: this._id + }; + + return createAttemptAction; + }; + + /** + * method to built an attempt from the given action. Should be implemented by derived classes. + * + * @param { createAttemptResult } The create attempt action for the attempt + */ + ComponentInstance.prototype.buildAttempt = function (createAttemptResult) { + throw "Not implemented"; + }; + return ComponentInstance; + })(Labs.ComponentInstanceBase); + Labs.ComponentInstance = ComponentInstance; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Enumeration of the connection states + */ + (function (ConnectionState) { + /** + * Disconnected + */ + ConnectionState[ConnectionState["Disconnected"] = 0] = "Disconnected"; + + /** + * In the process of connecting + */ + ConnectionState[ConnectionState["Connecting"] = 1] = "Connecting"; + + /** + * Connected + */ + ConnectionState[ConnectionState["Connected"] = 2] = "Connected"; + })(Labs.ConnectionState || (Labs.ConnectionState = {})); + var ConnectionState = Labs.ConnectionState; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Helper class to manage a set of event handlers + */ + var EventManager = (function () { + function EventManager() { + this._handlers = {}; + } + EventManager.prototype.getHandler = function (event) { + var handler = this._handlers[event]; + if (handler === undefined) { + this._handlers[event] = []; + } + + return this._handlers[event]; + }; + + /** + * Adds a new event handler for the given event + * + * @param { event } The event to add a handler for + * @param { handler } The event handler to add + */ + EventManager.prototype.add = function (event, handler) { + var eventHandlers = this.getHandler(event); + eventHandlers.push(handler); + }; + + /** + * Removes an event handler for the given event + * + * @param { event } The event to remove a handler for + * @param { handler } The event handler to remove + */ + EventManager.prototype.remove = function (event, handler) { + var eventHandlers = this.getHandler(event); + for (var i = eventHandlers.length - 1; i >= 0; i--) { + if (eventHandlers[i] === handler) { + eventHandlers.splice(i, 1); + } + } + }; + + /** + * Fires the given event + * + * @param { event } The event to fire + * @param { data } Data associated with the event + */ + EventManager.prototype.fire = function (event, data) { + var eventHandlers = this.getHandler(event); + eventHandlers.forEach(function (handler) { + handler(data); + }); + }; + return EventManager; + })(); + Labs.EventManager = EventManager; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * The LabEditor allows for the editing of the given lab. This includes getting and setting + * the entire configuration associated with the lab. + */ + var LabEditor = (function () { + /** + * Constructs a new LabEditor + * + * @param { labsInternal } LabsInternal to use with the editor + * @param { doneCallback } Callback to invoke when the editor is finished + */ + function LabEditor(labsInternal, doneCallback) { + this._labsInternal = labsInternal; + this._doneCallback = doneCallback; + } + LabEditor.Create = /** + * Creates a new lab. This prepares the lab storage and saves the host version + * + * @param { labsInternal } LabsInternal to use with the editor + * @param { doneCallback } Callback to invoke when the editor is finished + * @param { callback } Callback fired once the LabEditor has been created + */ + function (labsInternal, doneCallback, callback) { + labsInternal.create(function (err, data) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + return; + } + + // Instantiate the components and then attach them to the lab + var labEditor = new LabEditor(labsInternal, doneCallback); + setTimeout(function () { + return callback(null, labEditor); + }, 0); + }); + }; + + /** + * Gets the current lab configuration + * + * @param { callback } Callback fired once the configuration has been retrieved + */ + LabEditor.prototype.getConfiguration = function (callback) { + this._labsInternal.getConfiguration(callback); + }; + + /** + * Sets a new lab configuration + * + * @param { configuration } The configuration to set + * @param { callback } Callback fired once the configuration has been set + */ + LabEditor.prototype.setConfiguration = function (configuration, callback) { + this._labsInternal.setConfiguration(configuration, callback); + }; + + /** + * Indicates that the user is done editing the lab. + * + * @param { callback } Callback fired once the lab editor has finished + */ + LabEditor.prototype.done = function (callback) { + this._doneCallback(); + this._doneCallback = null; + setTimeout(function () { + return callback(null, null); + }, 0); + }; + return LabEditor; + })(); + Labs.LabEditor = LabEditor; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * A LabInstance is an instance of the configured lab for the current user. It is used to + * record and retrieve per user lab data. + */ + var LabInstance = (function () { + /** + * Constructs a new LabInstance + * + * @param { labsInternal } The LabsInternal to use with the instance + * @param { components } The components of the lab instance + * @param { doneCallback } Callback to invoke once the user is done taking the instance + * @param { data } Custom data attached to the lab + */ + function LabInstance(labsInternal, components, doneCallback, data) { + this._labsInternal = labsInternal; + this.components = components; + this._doneCallback = doneCallback; + this.data = data; + } + LabInstance.Create = /** + * Creates a new LabInstance + * + * @param { labsInternal } The LabsInternal to use with the instance + * @param { doneCallback } Callback to invoke once the user is done taking the instance + * @param { callback } Callback that fires once the LabInstance has been created + */ + function (labsInternal, doneCallback, callback) { + labsInternal.getConfigurationInstance(function (err, configuration) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + return; + } + + if (!configuration) { + setTimeout(function () { + return callback("No configuration set", null); + }, 0); + return; + } + + // Instantiate the components and then attach them to the lab + var components = configuration.components.map(function (component) { + var componentInstance = Labs.deserialize(component); + componentInstance.attach(component.componentId, labsInternal); + return componentInstance; + }); + var labInstance = new LabInstance(labsInternal, components, doneCallback, configuration.data); + + // And return it to the user + setTimeout(function () { + return callback(null, labInstance); + }, 0); + }); + }; + + /** + * Gets the current state of the lab for the user + * + * @param { callback } Callback that fires with the lab state + */ + LabInstance.prototype.getState = function (callback) { + this._labsInternal.getState(callback); + }; + + /** + * Sets the state of the lab for the user + * + * @param { state } The state to set + * @param { callback } Callback that fires once the state is set + */ + LabInstance.prototype.setState = function (state, callback) { + this._labsInternal.setState(state, callback); + }; + + /** + * Indicates that the user is done taking the lab. + * + * @param { callback } Callback fired once the lab instance has finished + */ + LabInstance.prototype.done = function (callback) { + this._doneCallback(); + this._doneCallback = null; + setTimeout(function () { + return callback(null, null); + }, 0); + }; + return LabInstance; + })(); + Labs.LabInstance = LabInstance; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + // Current initialization state + var _connectionState = Labs.ConnectionState.Disconnected; + + // Internal device we use to communicate with the host + var _labsInternal; + + // Cached information received during a connection + var _connectionResponse; + + // Timeline control class + var _timeline; + + // Map of deserialization functions + var _labDeserializers = {}; + + // Instance of lab being taken + var _labInstance = null; + + // Instance of lab being edited + var _labEditor = null; + + /** + * Method to use to construct a default ILabHost + */ + Labs.DefaultHostBuilder; + + function connect(labHost, callback) { + if (_connectionState !== Labs.ConnectionState.Disconnected) { + throw "connect has previously been called"; + } + + // Set the correct parameters after the method overloading + var translatedCallback = callback === undefined ? labHost : callback; + var translatedLabHost = callback === undefined ? Labs.DefaultHostBuilder() : labHost; + + // Instantiate the internal labs class + var labsInternal; + try { + labsInternal = new Labs.LabsInternal(translatedLabHost); + } catch (exception) { + setTimeout(function () { + return translatedCallback(exception, null); + }, 0); + return; + } + + // Now that we've been able to create the objects, set the state to connecting + _connectionState = Labs.ConnectionState.Connecting; + + // And go and initialize communication with the host + labsInternal.connect(function (err, connectionResponse) { + if (err) { + _connectionState = Labs.ConnectionState.Disconnected; + _labsInternal = null; + _connectionResponse = null; + } else { + _connectionState = Labs.ConnectionState.Connected; + _labsInternal = labsInternal; + _connectionResponse = connectionResponse; + _timeline = new Labs.Timeline(_labsInternal); + } + + setTimeout(function () { + // Invoke the callback to allow events to be registered + translatedCallback(err, connectionResponse); + + // And notify the labs internal to send any pending events + labsInternal.firePendingMessages(); + }, 0); + }); + } + Labs.connect = connect; + + /** + * Returns whether or not the labs are connected to the host. + */ + function isConnected() { + return _connectionState === Labs.ConnectionState.Connected; + } + Labs.isConnected = isConnected; + + /** + * Retrieves the information associated with a connection + */ + function getConnectionInfo() { + checkIsConnected(); + + return _connectionResponse; + } + Labs.getConnectionInfo = getConnectionInfo; + + /** + * Disconnects from the host. + * + * @param { completionStatus } The final result of the lab interaction + */ + function disconnect() { + checkIsConnected(); + + // Update our state to be disconnected + _labsInternal.dispose(); + _labsInternal = null; + _timeline = null; + _labInstance = null; + _labEditor = null; + _connectionState = Labs.ConnectionState.Disconnected; + } + Labs.disconnect = disconnect; + + /** + * Opens the lab for editing. When in edit mode the configuration can be specified. A lab cannot be edited while it + * is being taken. + * + * @param { callback } Callback fired once the LabEditor is created + */ + function editLab(callback) { + checkIsConnected(); + + if (_labInstance !== null) { + throw "Lab is being taken"; + } + if (_labEditor !== null) { + throw "Lab edit already in progress"; + } + + Labs.LabEditor.Create(_labsInternal, function () { + _labEditor = null; + }, function (err, labEditor) { + _labEditor = !err ? labEditor : null; + setTimeout(function () { + return callback(err, labEditor); + }, 0); + }); + } + Labs.editLab = editLab; + + /** + * Takes the given lab. This allows results to be sent for the lab. A lab cannot be taken while it is being edited. + * + * @param { callback } Callback fired once the LabInstance is created + */ + function takeLab(callback) { + checkIsConnected(); + + if (_labEditor !== null) { + throw "Lab is being edited"; + } + if (_labInstance !== null) { + throw "Lab already in progress"; + } + + Labs.LabInstance.Create(_labsInternal, function () { + _labInstance = null; + }, function (err, labInstance) { + _labInstance = !err ? labInstance : null; + setTimeout(function () { + return callback(err, labInstance); + }, 0); + }); + } + Labs.takeLab = takeLab; + + /** + * Adds a new event handler for the given event + * + * @param { event } The event to add a handler for + * @param { handler } The event handler to add + */ + function on(event, handler) { + checkIsConnected(); + + _labsInternal.on(event, handler); + } + Labs.on = on; + + /** + * Removes an event handler for the given event + * + * @param { event } The event to remove a handler for + * @param { handler } The event handler to remove + */ + function off(event, handler) { + checkIsConnected(); + + _labsInternal.off(event, handler); + } + Labs.off = off; + + /** + * Retrieves the Timeline object that can be used to control the host's player control. + */ + function getTimeline() { + checkIsConnected(); + + return _timeline; + } + Labs.getTimeline = getTimeline; + + /** + * Registers a function to deserialize the given type. Should be used by component authors only. + * + * @param { type } The type to deserialize + * @param { deserialize } The deserialization function + */ + function registerDeserializer(type, deserialize) { + if (type in _labDeserializers) { + throw "Type already has a create function registered"; + } + + // Save the serialization functions + _labDeserializers[type] = deserialize; + } + Labs.registerDeserializer = registerDeserializer; + + /** + * Deserializes the given json object into an object. Should be used by component authors only. + * + * @param { json } The ILabObject to deserialize + */ + function deserialize(json) { + if (!(json.type in _labDeserializers)) { + throw "Unknown type"; + } + + return _labDeserializers[json.type](json); + } + Labs.deserialize = deserialize; + + /** + * Helper method to catch and throw if not connected + */ + function checkIsConnected() { + if (_connectionState != Labs.ConnectionState.Connected) { + throw "API not initialized"; + } + } +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Enum representing the internal state of the lab + */ + var LabsInternalState; + (function (LabsInternalState) { + /** + * Initial state + */ + LabsInternalState[LabsInternalState["None"] = 0] = "None"; + + /** + * Initialized state + */ + LabsInternalState[LabsInternalState["Initialized"] = 1] = "Initialized"; + + /** + * LabsInternal has been disposed + */ + LabsInternalState[LabsInternalState["Disposed"] = 2] = "Disposed"; + })(LabsInternalState || (LabsInternalState = {})); + + /** + * Class used to interface with the underlying ILabsHost interface. + */ + var LabsInternal = (function () { + /** + * Constructs a new LabsInternal + * + * @param { labHost } The ILabHost to make use of + */ + function LabsInternal(labHost) { + /** + * Current state of the LabsInternal + */ + this._state = LabsInternalState.None; + /** + * Helper class to manage events in the system + */ + this._eventManager = new Labs.EventManager(); + /** + * The version of the host this LabsInternal is making use of + */ + this._hostVersion = null; + /** + * Start out queueing pending messages until we are notified to invoke them + */ + this._queuePendingMessages = true; + /** + * Pending messages to invoke from the EventManager + */ + this._pendingMessages = []; + // Get the version info from the lab host - only support 0.1 hosts for now + var versions = labHost.getSupportedVersions(); + + var hasSupportedVersion = false; + for (var i = 0; i < versions.length; i++) { + if (versions[i].version.major === 0 && versions[i].version.minor <= 1) { + hasSupportedVersion = true; + } + } + + if (!hasSupportedVersion) { + throw "Unsupported host version"; + } + + this._labHost = labHost; + } + /** + * Connect to the host + * + * @param { callback } Callback that will return the IConnectionResponse when connected + */ + LabsInternal.prototype.connect = function (callback) { + var _this = this; + if (this._state !== LabsInternalState.None) { + throw "Already initialized"; + } + + // initialize the host + this._labHost.connect(this._labHost.getSupportedVersions().splice(0), function (err, initialState) { + if (!err) { + // Set the initialization state + _this._state = LabsInternalState.Initialized; + + // Save the host version used + _this._hostVersion = initialState.hostVersion; + + // Register for messages coming from the host + _this._labHost.on(function (message, messageData) { + if (_this._queuePendingMessages) { + _this._pendingMessages.push({ message: message, messageData: messageData }); + } else { + _this._eventManager.fire(message, messageData); + } + }); + } + + setTimeout(function () { + return callback(err, initialState); + }, 0); + }); + }; + + /** + * Fires all pending messages + */ + LabsInternal.prototype.firePendingMessages = function () { + var _this = this; + this._queuePendingMessages = false; + this._pendingMessages.forEach(function (pendingMessage) { + _this._eventManager.fire(pendingMessage.message, pendingMessage.messageData); + }); + this._pendingMessages = []; + }; + + /** + * Creates a new lab + * + * @param { callback } Callback fired once the create operation completes + */ + LabsInternal.prototype.create = function (callback) { + this.checkIsInitialized(); + + this._labHost.create({}, function (err, editData) { + setTimeout(function () { + return callback(err, editData); + }); + }); + }; + + /** + * Terminates the LabsInternal class and halts the connection. + */ + LabsInternal.prototype.dispose = function () { + this.checkIsInitialized(); + + this._state = LabsInternalState.Disposed; + this._labHost.disconnect(function (err, data) { + if (err) { + console.error("Labs.js: Error disconnecting from host."); + } + }); + }; + + /** + * Adds an event handler for the given event + * + * @param { event } The event to listen for + * @param { handler } Handler fired for the given event + */ + LabsInternal.prototype.on = function (event, handler) { + this.checkIsInitialized(); + + this._eventManager.add(event, handler); + }; + + /** + * Sends a message to the host + * + * @param { type } The type of message being sent + * @param { options } The options for that message + * @param { callback } Callback invoked once the message has been received + */ + LabsInternal.prototype.sendMessage = function (type, options, callback) { + this.checkIsInitialized(); + + this._labHost.sendMessage(type, options, callback); + }; + + /** + * Removes an event handler for the given event + * + * @param { event } The event whose handler should be removed + * @param { handler } Handler to remove + */ + LabsInternal.prototype.off = function (event, handler) { + this.checkIsInitialized(); + + this._eventManager.remove(event, handler); + }; + + /** + * Gets the current state of the lab for the user + * + * @param { callback } Callback that fires when the state is retrieved + */ + LabsInternal.prototype.getState = function (callback) { + this.checkIsInitialized(); + + this._labHost.getState(callback); + }; + + /** + * Sets the state of the lab for the user + * + * @param { state } The state to set + * @param { callback } Callback fired once the state has been set + */ + LabsInternal.prototype.setState = function (state, callback) { + this.checkIsInitialized(); + + this._labHost.setState(state, callback); + }; + + /** + * Gets the current lab configuration + * + * @param { callback } Callback that fires when the configuration is retrieved + */ + LabsInternal.prototype.getConfiguration = function (callback) { + this.checkIsInitialized(); + + this._labHost.getConfiguration(callback); + }; + + /** + * Sets a new lab configuration + * + * @param { configuration } The lab configuration to set + * @param { callback } Callback that fires once the configuration has been set + */ + LabsInternal.prototype.setConfiguration = function (configuration, callback) { + this.checkIsInitialized(); + + this._labHost.setConfiguration(configuration, callback); + }; + + /** + * Retrieves the configuration instance for the lab. + * + * @param { callback } Callback that fires when the configuration instance has been retrieved + */ + LabsInternal.prototype.getConfigurationInstance = function (callback) { + this.checkIsInitialized(); + this._labHost.getConfigurationInstance(callback); + }; + + LabsInternal.prototype.takeAction = function (type, options, result, callback) { + this.checkIsInitialized(); + + if (callback !== undefined) { + this._labHost.takeAction(type, options, result, callback); + } else { + this._labHost.takeAction(type, options, result); + } + }; + + /** + * Retrieves actions + * + * @param { type } The type of get to perform + * @param { options } The options associated with the get + * @param { callback } Callback that fires with the completed actions + */ + LabsInternal.prototype.getActions = function (type, options, callback) { + this.checkIsInitialized(); + this._labHost.getActions(type, options, callback); + }; + + /** + * Checks whether or not the LabsInternal is initialized + */ + LabsInternal.prototype.checkIsInitialized = function () { + if (this._state !== LabsInternalState.Initialized) { + throw "Not initialized"; + } + }; + return LabsInternal; + })(); + Labs.LabsInternal = LabsInternal; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Provides access to the labs.js timeline + */ + var Timeline = (function () { + function Timeline(labsInternal) { + this._labsInternal = labsInternal; + } + /** + * Used to indicate that the timeline should advance to the next slide. + */ + Timeline.prototype.next = function (completionStatus, callback) { + var options = { + status: completionStatus + }; + + this._labsInternal.sendMessage(Labs.TimelineNextMessageType, options, function (err, result) { + setTimeout(function () { + return callback(err, null); + }, 0); + }); + }; + return Timeline; + })(); + Labs.Timeline = Timeline; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * A ValueHolder is responsible for holding a value that when requested is tracked by labs.js. + * This value may be stored locally or stored on the server. + */ + var ValueHolder = (function () { + /** + * Constructs a new ValueHolder + * + * @param { componentId } The component the value is associated with + * @param { attemptId } The attempt the value is associated with + * @param { id } The id of the value + * @param { labs } The labs device that can be used to request the value + * @param { isHint } Whether or not the value is a hint + * @param { hasBeenRequested } Whether or not the value has already been requested + * @param { hasValue } Whether or not the value is available + * @param { value } If hasValue is true this is the value, otherwise is optional + */ + function ValueHolder(componentId, attemptId, id, labs, isHint, hasBeenRequested, hasValue, value) { + this._componentId = componentId; + this._attemptId = attemptId; + this.id = id; + this._labs = labs; + this.isHint = isHint; + this.hasBeenRequested = hasBeenRequested; + this.hasValue = hasValue; + this.value = value; + } + /** + * Retrieves the given value + * + * @param { callback } Callback that returns the given value + */ + ValueHolder.prototype.getValue = function (callback) { + var _this = this; + if (this.hasValue && this.hasBeenRequested) { + setTimeout(function () { + return callback(null, _this.value); + }, 0); + return; + } + + // Otherwise construct the message to retrieve it and send it back + var options = { + componentId: this._componentId, + attemptId: this._attemptId, + valueId: this.id, + isHint: this.isHint + }; + this._labs.takeAction(Labs.Core.Actions.GetValueAction, options, function (err, completedAction) { + if (!err) { + var result = completedAction.result; + _this.value = result.value; + _this.hasValue = true; + _this.hasBeenRequested = true; + } + + setTimeout(function () { + return callback(err, _this.value); + }, 0); + }); + }; + + /** + * Internal method used to actually provide a value to the value holder + * + * @param { value } The value to set for the holder + */ + ValueHolder.prototype.provideValue = function (value) { + this.value = value; + this.hasValue = true; + this.hasBeenRequested = true; + }; + return ValueHolder; + })(); + Labs.ValueHolder = ValueHolder; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsApi.js.map + +var Labs; +(function (Labs) { + (function (Components) { + /** + * Base class for attempts + */ + var ComponentAttempt = (function () { + /** + * Constructs a new ComponentAttempt. + * + * @param { labs } The LabsInternal to use with the attempt + * @param { attemptId } The ID associated with the attempt + * @param { values } The values associated with the attempt + */ + function ComponentAttempt(labs, componentId, attemptId, values) { + // Whether or not the component has been resumed + this._resumed = false; + // Current state of the attempt + this._state = Labs.ProblemState.InProgress; + // Values associated with the attempt + this._values = {}; + this._labs = labs; + this._id = attemptId; + this._componentId = componentId; + + for (var key in values) { + var valueHolderValues = []; + var valueArray = values[key]; + for (var i = 0; i < valueArray.length; i++) { + var value = valueArray[i]; + valueHolderValues.push(new Labs.ValueHolder(this._componentId, this._id, value.valueId, this._labs, value.isHint, false, value.hasValue, value.value)); + } + + this._values[key] = valueHolderValues; + } + } + /** + * Verifies that the attempt has been resumed + */ + ComponentAttempt.prototype.verifyResumed = function () { + if (!this._resumed) { + throw "Attempt has not yet been resumed"; + } + }; + + /** + * Returns whether or not the app has been resumed + */ + ComponentAttempt.prototype.isResumed = function () { + return this._resumed; + }; + + /** + * Used to indicate that the lab has resumed progress on the given attempt. Loads in existing data as part of this process. An attempt + * must be resumed before it can be used. + * + * @param { callback } Callback fired once the attempt is resumed + */ + ComponentAttempt.prototype.resume = function (callback) { + var _this = this; + if (this._resumed) { + throw "Already resumed"; + } + + var attemptSearch = { + attemptId: this._id + }; + this._labs.getActions(Labs.Core.GetActions.GetAttempt, attemptSearch, function (err, actions) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + return; + } + + _this.resumeCore(actions); + _this.sendResumeAction(function (resumeErr, data) { + if (!resumeErr) { + _this._resumed = true; + } + + setTimeout(function () { + return callback(err, data); + }); + }); + }); + }; + + /** + * Helper method to send the resume action to the host + */ + ComponentAttempt.prototype.sendResumeAction = function (callback) { + var resumeAttemptActon = { + componentId: this._componentId, + attemptId: this._id + }; + + this._labs.takeAction(Labs.Core.Actions.ResumeAttemptAction, resumeAttemptActon, function (err, data) { + if (!err) { + } + + setTimeout(function () { + return callback(err, null); + }, 0); + }); + }; + + /** + * Runs over the retrieved actions for the attempt and populates the state of the lab + */ + ComponentAttempt.prototype.resumeCore = function (actions) { + for (var i = 0; i < actions.length; i++) { + var action = actions[i]; + this.processAction(action); + } + }; + + /** + * Retrieves the state of the lab + */ + ComponentAttempt.prototype.getState = function () { + return this._state; + }; + + ComponentAttempt.prototype.processAction = function (action) { + if (action.type === Labs.Core.Actions.GetValueAction) { + this.useValue(action); + } else if (action.type == Labs.Core.Actions.AttemptTimeoutAction) { + this._state = Labs.ProblemState.Timeout; + } + }; + + /** + * Retrieves the cached values associated with the attempt + * + * @param { key } The key to lookup in the value map + */ + ComponentAttempt.prototype.getValues = function (key) { + this.verifyResumed(); + + return this._values[key]; + }; + + /** + * Makes use of a value in the value array + */ + ComponentAttempt.prototype.useValue = function (completedSubmission) { + var useValueAction = completedSubmission.options; + var useValueResult = completedSubmission.result; + + var valueId = useValueAction.valueId; + + for (var key in this._values) { + var valueArray = this._values[key]; + for (var i = 0; i < valueArray.length; i++) { + if (valueArray[i].id === valueId) { + valueArray[i].provideValue(useValueResult.value); + } + } + } + }; + return ComponentAttempt; + })(); + Components.ComponentAttempt = ComponentAttempt; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var Labs; +(function (Labs) { + (function (Components) { + /** + * A class representing an attempt at an activity component + */ + var ActivityComponentAttempt = (function (_super) { + __extends(ActivityComponentAttempt, _super); + function ActivityComponentAttempt(labs, componentId, attemptId, values) { + _super.call(this, labs, componentId, attemptId, values); + } + /** + * Called to indicate that the activity has completed + * + * @param { callback } Callback invoked once the activity has completed + */ + ActivityComponentAttempt.prototype.complete = function (callback) { + var _this = this; + var submitAnswer = { + componentId: this._componentId, + attemptId: this._id, + answer: null + }; + + this._labs.takeAction(Labs.Core.Actions.SubmitAnswerAction, submitAnswer, null, function (err, completedAction) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + return; + } + + _this._state = Labs.ProblemState.Completed; + + setTimeout(function () { + return callback(null, null); + }, 0); + }); + }; + + /** + * Runs over the retrieved actions for the attempt and populates the state of the lab + */ + ActivityComponentAttempt.prototype.processAction = function (action) { + if (action.type === Labs.Core.Actions.SubmitAnswerAction) { + this._state = Labs.ProblemState.Completed; + } else if (action.type === Labs.Core.Actions.GetValueAction) { + _super.prototype.processAction.call(this, action); + } + }; + return ActivityComponentAttempt; + })(Components.ComponentAttempt); + Components.ActivityComponentAttempt = ActivityComponentAttempt; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + Components.ActivityComponentInstanceType = "Labs.Components.ActivityComponentInstance"; + + var ActivityComponentInstance = (function (_super) { + __extends(ActivityComponentInstance, _super); + /** + * Constructs a new ActivityComponentInstnace + * + * @param { component } The IActivityComponentInstance to create this class from + */ + function ActivityComponentInstance(component) { + _super.call(this); + this.component = component; + } + /** + * Builds a new ActivityComponentAttempt. Implements abstract method defined on the base class. + * + * @param { createAttemptResult } The result from a create attempt action + */ + ActivityComponentInstance.prototype.buildAttempt = function (createAttemptAction) { + var id = (createAttemptAction.result).attemptId; + return new Components.ActivityComponentAttempt(this._labs, this.component.componentId, id, this.component.values); + }; + return ActivityComponentInstance; + })(Labs.ComponentInstance); + Components.ActivityComponentInstance = ActivityComponentInstance; + + // Register the deserializer for this type. This will cause all components to make use of this class. + Labs.registerDeserializer(Components.ActivityComponentInstanceType, function (json) { + return new ActivityComponentInstance(json); + }); + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Answer to a choice component problem + */ + var ChoiceComponentAnswer = (function () { + /** + * Constructs a new ChoiceComponentAnswer + */ + function ChoiceComponentAnswer(answer) { + this.answer = answer; + } + return ChoiceComponentAnswer; + })(); + Components.ChoiceComponentAnswer = ChoiceComponentAnswer; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * A class representing an attempt at a choice component + */ + var ChoiceComponentAttempt = (function (_super) { + __extends(ChoiceComponentAttempt, _super); + /** + * Constructs a new ChoiceComponentAttempt. + * + * @param { labs } The LabsInternal to use with the attempt + * @param { attemptId } The ID associated with the attempt + * @param { values } The values associated with the attempt + */ + function ChoiceComponentAttempt(labs, componentId, attemptId, values) { + _super.call(this, labs, componentId, attemptId, values); + // Submissions associated with the attempt + this._submissions = []; + } + /** + * Used to mark that the lab has timed out + * + * @param { callback } Callback fired once the server has received the timeout message + */ + ChoiceComponentAttempt.prototype.timeout = function (callback) { + var _this = this; + this._labs.takeAction(Labs.Core.Actions.AttemptTimeoutAction, { attemptId: this._id }, function (err, result) { + if (!err) { + _this._state = Labs.ProblemState.Timeout; + } + + setTimeout(function () { + return callback(err, null); + }, 0); + }); + }; + + /** + * Retrieves all of the submissions that have previously been submitted for the given attempt + */ + ChoiceComponentAttempt.prototype.getSubmissions = function () { + this.verifyResumed(); + + return this._submissions; + }; + + /** + * Submits a new answer that was graded by the lab and will not use the host to compute a grade. + * + * @param { answer } The answer for the attempt + * @param { result } The result of the submission + * @param { callback } Callback fired once the submission has been received + */ + ChoiceComponentAttempt.prototype.submit = function (answer, result, callback) { + var _this = this; + this.verifyResumed(); + + var submitAnswer = { + componentId: this._componentId, + attemptId: this._id, + answer: answer.answer + }; + + var submitResult = { + submissionId: null, + complete: result.complete, + score: result.score + }; + + this._labs.takeAction(Labs.Core.Actions.SubmitAnswerAction, submitAnswer, submitResult, function (err, completedAction) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + return; + } + + var submission = _this.storeSubmission(completedAction); + + setTimeout(function () { + return callback(null, submission); + }, 0); + }); + }; + + ChoiceComponentAttempt.prototype.processAction = function (action) { + if (action.type === Labs.Core.Actions.SubmitAnswerAction) { + this.storeSubmission(action); + } else { + _super.prototype.processAction.call(this, action); + } + }; + + /** + * Helper method used to handle a returned submission from labs core + */ + ChoiceComponentAttempt.prototype.storeSubmission = function (completedSubmission) { + var options = completedSubmission.options; + var result = completedSubmission.result; + + if (result.complete) { + this._state = Labs.ProblemState.Completed; + } + + var submission = new Components.ChoiceComponentSubmission(new Components.ChoiceComponentAnswer(options.answer), new Components.ChoiceComponentResult(result.score, result.complete), completedSubmission.time); + + this._submissions.push(submission); + + return submission; + }; + return ChoiceComponentAttempt; + })(Components.ComponentAttempt); + Components.ChoiceComponentAttempt = ChoiceComponentAttempt; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * The name of the component instance. A choice component is a component that has multiple choice options and supports zero + * or more responses. Optionally there is a correct list of choices. + */ + Components.ChoiceComponentInstanceType = "Labs.Components.ChoiceComponentInstance"; + + /** + * Class representing a choice component instance + */ + var ChoiceComponentInstance = (function (_super) { + __extends(ChoiceComponentInstance, _super); + /** + * Constructs a new ChoiceComponentInstance + * + * @param { component } The IChoiceComponentInstance to create this class from + */ + function ChoiceComponentInstance(component) { + _super.call(this); + this.component = component; + } + /** + * Builds a new ChoiceComponentAttempt. Implements abstract method defined on the base class. + * + * @param { createAttemptResult } The result from a create attempt action + */ + ChoiceComponentInstance.prototype.buildAttempt = function (createAttemptAction) { + var id = (createAttemptAction.result).attemptId; + return new Components.ChoiceComponentAttempt(this._labs, this.component.componentId, id, this.component.values); + }; + return ChoiceComponentInstance; + })(Labs.ComponentInstance); + Components.ChoiceComponentInstance = ChoiceComponentInstance; + + // Register the deserializer for this type. This will cause all components to make use of this class. + Labs.registerDeserializer(Components.ChoiceComponentInstanceType, function (json) { + return new ChoiceComponentInstance(json); + }); + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * The name of the component instance. A dynamic component is a component that allows for new components to be inserted within it. + */ + Components.DynamicComponentInstanceType = "Labs.Components.DynamicComponentInstance"; + + /** + * Class representing a dynamic component. A dynamic component is used to create, at runtime, new components. + */ + var DynamicComponentInstance = (function (_super) { + __extends(DynamicComponentInstance, _super); + /** + * Constructs a new dynamic component instance from the provided definition + */ + function DynamicComponentInstance(component) { + _super.call(this); + this.component = component; + } + /** + * Retrieves all the components created by this dynamic component. + */ + DynamicComponentInstance.prototype.getComponents = function (callback) { + var _this = this; + var componentSearch = { + componentId: this._id, + action: Labs.Core.Actions.CreateComponentAction + }; + + this._labs.getActions(Labs.Core.GetActions.GetComponentActions, componentSearch, function (err, actions) { + var components = actions.map(function (action) { + return _this.createComponentInstance(action); + }); + setTimeout(function () { + return callback(null, components); + }, 0); + }); + }; + + /** + * Creates a new component. + */ + DynamicComponentInstance.prototype.createComponent = function (component, callback) { + var _this = this; + var options = { + componentId: this._id, + component: component + }; + + this._labs.takeAction(Labs.Core.Actions.CreateComponentAction, options, function (err, result) { + var instance = null; + if (!err) { + instance = _this.createComponentInstance(result); + } + + setTimeout(function () { + return callback(err, instance); + }, 0); + }); + }; + + DynamicComponentInstance.prototype.createComponentInstance = function (action) { + var componentInstanceDefinition = (action.result).componentInstance; + var componentInstance = Labs.deserialize(componentInstanceDefinition); + componentInstance.attach(componentInstanceDefinition.componentId, this._labs); + return componentInstance; + }; + + /** + * Used to indicate that there will be no more submissions associated with this component + */ + DynamicComponentInstance.prototype.close = function (callback) { + var _this = this; + this.isClosed(function (err, closed) { + if (err) { + setTimeout(function () { + return callback(err, null); + }); + return; + } + + var options = { + componentId: _this._id + }; + _this._labs.takeAction(Labs.Core.Actions.CloseComponentAction, options, null, function (err, action) { + setTimeout(function () { + return callback(err, null); + }); + }); + }); + }; + + /** + * Returns whether or not the dynamic component is closed + */ + DynamicComponentInstance.prototype.isClosed = function (callback) { + var componentSearch = { + componentId: this._id, + action: Labs.Core.Actions.CloseComponentAction + }; + + this._labs.getActions(Labs.Core.GetActions.GetComponentActions, componentSearch, function (err, actions) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + } else { + var closed = actions.length > 0; + setTimeout(function () { + return callback(null, closed); + }, 0); + } + }); + }; + return DynamicComponentInstance; + })(Labs.ComponentInstanceBase); + Components.DynamicComponentInstance = DynamicComponentInstance; + + // Register the deserializer for this type. This will cause all components to make use of this class. + Labs.registerDeserializer(Components.DynamicComponentInstanceType, function (json) { + return new DynamicComponentInstance(json); + }); + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Type string for an ActivityComponent + */ + Components.ActivityComponentType = "Labs.Components.ActivityComponent"; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Type string to use with this type of component + */ + Components.ChoiceComponentType = "Labs.Components.ChoiceComponent"; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + Components.Infinite = -1; + + /** + * Type string for a dynamic component + */ + Components.DynamicComponentType = "Labs.Components.DynamicComponent"; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Type string to use with this type of component + */ + Components.InputComponentType = "Labs.Components.InputComponent"; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Answer to an input component problem + */ + var InputComponentAnswer = (function () { + /** + * Constructs a new InputComponentAnswer + */ + function InputComponentAnswer(answer) { + this.answer = answer; + } + return InputComponentAnswer; + })(); + Components.InputComponentAnswer = InputComponentAnswer; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * A class representing an attempt at an input component + */ + var InputComponentAttempt = (function (_super) { + __extends(InputComponentAttempt, _super); + function InputComponentAttempt(labs, componentId, attemptId, values) { + _super.call(this, labs, componentId, attemptId, values); + // Submissions associated with the attempt + this._submissions = []; + } + /** + * Runs over the retrieved actions for the attempt and populates the state of the lab + */ + InputComponentAttempt.prototype.processAction = function (action) { + if (action.type === Labs.Core.Actions.SubmitAnswerAction) { + this.storeSubmission(action); + } else { + _super.prototype.processAction.call(this, action); + } + }; + + /** + * Retrieves all of the submissions that have previously been submitted for the given attempt + */ + InputComponentAttempt.prototype.getSubmissions = function () { + this.verifyResumed(); + + return this._submissions; + }; + + /** + * Submits a new answer that was graded by the lab and will not use the host to compute a grade. + * + * @param { answer } The answer for the attempt + * @param { result } The result of the submission + * @param { callback } Callback fired once the submission has been received + */ + InputComponentAttempt.prototype.submit = function (answer, result, callback) { + var _this = this; + this.verifyResumed(); + + var submitAnswer = { + componentId: this._componentId, + attemptId: this._id, + answer: answer.answer + }; + + var submitResult = { + submissionId: null, + complete: result.complete, + score: result.score + }; + + this._labs.takeAction(Labs.Core.Actions.SubmitAnswerAction, submitAnswer, submitResult, function (err, completedAction) { + if (err) { + setTimeout(function () { + return callback(err, null); + }, 0); + return; + } + + var submission = _this.storeSubmission(completedAction); + + setTimeout(function () { + return callback(null, submission); + }, 0); + }); + }; + + /** + * Helper method used to handle a returned submission from labs core + */ + InputComponentAttempt.prototype.storeSubmission = function (completedSubmission) { + var options = completedSubmission.options; + var result = completedSubmission.result; + + if (result.complete) { + this._state = Labs.ProblemState.Completed; + } + + var submission = new Components.InputComponentSubmission(new Components.InputComponentAnswer(options.answer), new Components.InputComponentResult(result.score, result.complete), completedSubmission.time); + + this._submissions.push(submission); + + return submission; + }; + return InputComponentAttempt; + })(Components.ComponentAttempt); + Components.InputComponentAttempt = InputComponentAttempt; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * The name of the component instance. An input component is a component that allows free form + * input from a user. + */ + Components.InputComponentInstanceType = "Labs.Components.InputComponentInstance"; + + /** + * Class representing an input component instance + */ + var InputComponentInstance = (function (_super) { + __extends(InputComponentInstance, _super); + /** + * Constructs a new InputComponentInstance + * + * @param { component } The IInputComponentInstance to create this class from + */ + function InputComponentInstance(component) { + _super.call(this); + this.component = component; + } + /** + * Builds a new InputComponentAttempt. Implements abstract method defined on the base class. + * + * @param { createAttemptResult } The result from a create attempt action + */ + InputComponentInstance.prototype.buildAttempt = function (createAttemptAction) { + var id = (createAttemptAction.result).attemptId; + return new Components.InputComponentAttempt(this._labs, this.component.componentId, id, this.component.values); + }; + return InputComponentInstance; + })(Labs.ComponentInstance); + Components.InputComponentInstance = InputComponentInstance; + + // Register the deserializer for this type. This will cause all components to make use of this class. + Labs.registerDeserializer(Components.InputComponentInstanceType, function (json) { + return new InputComponentInstance(json); + }); + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * The result of an input component submission + */ + var InputComponentResult = (function () { + /** + * Constructs a new InputComponentResult + * + * @param { score } The score of the result + * @param { complete } Whether or not the result completed the attempt + */ + function InputComponentResult(score, complete) { + this.score = score; + this.complete = complete; + } + return InputComponentResult; + })(); + Components.InputComponentResult = InputComponentResult; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Class that represents an input component submission + */ + var InputComponentSubmission = (function () { + /** + * Constructs a new InputComponentSubmission + * + * @param { answer } The answer associated with the submission + * @param { result } The result of the submission + * @param { time } The time at which the submission was received + */ + function InputComponentSubmission(answer, result, time) { + this.answer = answer; + this.result = result; + this.time = time; + } + return InputComponentSubmission; + })(); + Components.InputComponentSubmission = InputComponentSubmission; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * State values for a lab + */ + (function (ProblemState) { + /** + * The problem is in progress + */ + ProblemState[ProblemState["InProgress"] = 0] = "InProgress"; + + /** + * The problem has timed out + */ + ProblemState[ProblemState["Timeout"] = 1] = "Timeout"; + + /** + * The problem has completed + */ + ProblemState[ProblemState["Completed"] = 2] = "Completed"; + })(Labs.ProblemState || (Labs.ProblemState = {})); + var ProblemState = Labs.ProblemState; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * The result of a choice component submission + */ + var ChoiceComponentResult = (function () { + /** + * Constructs a new ChoiceComponentResult + * + * @param { score } The score of the result + * @param { complete } Whether or not the result completed the attempt + */ + function ChoiceComponentResult(score, complete) { + this.score = score; + this.complete = complete; + } + return ChoiceComponentResult; + })(); + Components.ChoiceComponentResult = ChoiceComponentResult; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Components) { + /** + * Class that represents a choice component submission + */ + var ChoiceComponentSubmission = (function () { + /** + * Constructs a new ChoiceComponentSubmission + * + * @param { answer } The answer associated with the submission + * @param { result } The result of the submission + * @param { time } The time at which the submission was received + */ + function ChoiceComponentSubmission(answer, result, time) { + this.answer = answer; + this.result = result; + this.time = time; + } + return ChoiceComponentSubmission; + })(); + Components.ChoiceComponentSubmission = ChoiceComponentSubmission; + })(Labs.Components || (Labs.Components = {})); + var Components = Labs.Components; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsComponents.js.map + +var Labs; +(function (Labs) { + /** + * General command used to pass messages between the client and host + */ + var Command = (function () { + /** + * Constructs a new command + * + * @param { type } The type of command + * @param { commandData } Optional data associated with the command + */ + function Command(type, commandData) { + this.type = type; + this.commandData = commandData; + } + return Command; + })(); + Labs.Command = Command; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Strings representing supported command types + */ + (function (CommandType) { + CommandType.Connect = "connect"; + + CommandType.Disconnect = "disconnect"; + + CommandType.Create = "create"; + + CommandType.GetConfigurationInstance = "getConfigurationInstance"; + + CommandType.TakeAction = "takeAction"; + + CommandType.GetCompletedActions = "getCompletedActions"; + + CommandType.ModeChanged = "modeChanged"; + + CommandType.GetConfiguration = "getConfiguration"; + + CommandType.SetConfiguration = "setConfiguratoin"; + + CommandType.GetState = "getState"; + + CommandType.SetState = "setState"; + + CommandType.SendMessage = "sendMessage"; + })(Labs.CommandType || (Labs.CommandType = {})); + var CommandType = Labs.CommandType; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + (function (Core) { + /** + * Static class containing the different event types. + */ + var EventTypes = (function () { + function EventTypes() { + } + EventTypes.ModeChanged = "modeChanged"; + + EventTypes.Activate = "activate"; + + EventTypes.Deactivate = "deactivate"; + return EventTypes; + })(); + Core.EventTypes = EventTypes; + })(Labs.Core || (Labs.Core = {})); + var Core = Labs.Core; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + /** + * Type of message being sent over the wire + */ + (function (MessageType) { + MessageType[MessageType["Message"] = 0] = "Message"; + MessageType[MessageType["Completion"] = 1] = "Completion"; + MessageType[MessageType["Failure"] = 2] = "Failure"; + })(Labs.MessageType || (Labs.MessageType = {})); + var MessageType = Labs.MessageType; + + /** + * The message being sent + */ + var Message = (function () { + function Message(id, labId, type, payload) { + this.id = id; + this.labId = labId; + this.type = type; + this.payload = payload; + } + return Message; + })(); + Labs.Message = Message; + + var MessageProcessor = (function () { + function MessageProcessor(labId, targetOrigin, messageHandler) { + this._labId = labId; + this.isStarted = false; + this.nextMessageId = 0; + this.targetOrigin = targetOrigin; + this.messageHandler = messageHandler; + this.messageMap = {}; + } + MessageProcessor.prototype.throwIfNotStarted = function () { + if (!this.isStarted) { + throw "Processor has not been started"; + } + }; + + MessageProcessor.prototype.getNextMessageId = function () { + return this.nextMessageId++; + }; + + /// + /// Given a URI parses it and returns the origin to use in postMessage security checks + /// + MessageProcessor.prototype.parseOrigin = function (href) { + var parser = document.createElement('a'); + parser.href = href; + return parser.protocol + "//" + parser.host; + }; + + MessageProcessor.prototype.listener = function (event) { + var _this = this; + var response; + + // Get the message - we only listen to events going to our lab ID and that are valid JSON + var messageEvent = event; + var message; + try { + message = JSON.parse(messageEvent.data); + } catch (exception) { + return; + } + + if (message.labId !== this._labId) { + return; + } + + if (message.type === MessageType.Completion) { + response = this.messageMap[message.id]; + delete this.messageMap[message.id]; + + if (response.origin === messageEvent.source) { + response.callback(null, message.payload); + } + } else if (message.type === MessageType.Failure) { + response = this.messageMap[message.id]; + delete this.messageMap[message.id]; + + if (response.origin === messageEvent.source) { + response.callback({ error: message.payload }, null); + } + } else if (message.type == MessageType.Message) { + this.messageHandler(messageEvent.source, message.payload, function (err, data) { + if (err) { + var failureMessage = new Message(message.id, _this._labId, MessageType.Failure, data); + _this.postMessage(messageEvent.source, failureMessage); + } else { + var acknowledgementMessage = new Message(message.id, _this._labId, MessageType.Completion, data); + _this.postMessage(messageEvent.source, acknowledgementMessage); + } + }); + } else { + throw "Unknown message type"; + } + }; + + MessageProcessor.prototype.postMessage = function (targetWindow, message) { + if (!targetWindow) { + throw "Unknown target window"; + } + + targetWindow.postMessage(JSON.stringify(message), this.targetOrigin); + }; + + MessageProcessor.prototype.start = function () { + var _this = this; + if (this.isStarted) { + throw "Processor already running"; + } + + this.eventListener = function (event) { + _this.listener(event); + }; + window.addEventListener("message", this.eventListener); + this.isStarted = true; + }; + + MessageProcessor.prototype.stop = function () { + this.throwIfNotStarted(); + + window.removeEventListener("message", this.eventListener); + this.isStarted = false; + }; + + MessageProcessor.prototype.sendMessage = function (targetWindow, data, callback) { + this.throwIfNotStarted(); + + var nextId = this.getNextMessageId(); + var message = new Message(nextId, this._labId, MessageType.Message, data); + this.postMessage(targetWindow, message); + this.messageMap[nextId] = { + origin: targetWindow, + callback: callback + }; + }; + return MessageProcessor; + })(); + Labs.MessageProcessor = MessageProcessor; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsHostsCore.js.map + +var Labs; +(function (Labs) { + var InMemoryLabHost = (function () { + function InMemoryLabHost(version) { + this._labState = new Labs.InMemoryLabState(); + this._messages = []; + this._version = version; + } + // + // Retrieves the version of the lab host + // + InMemoryLabHost.prototype.getSupportedVersions = function () { + return [{ version: this._version }]; + }; + + // + // Initializes communication with the host + // + InMemoryLabHost.prototype.connect = function (versions, callback) { + var connectionResponse = { + initializationInfo: { + hostVersion: this._version + }, + hostVersion: { + major: 0, + minor: 1 + }, + userInfo: { + id: "TestUserId", + permissions: [ + Labs.Core.Permissions.Edit, + Labs.Core.Permissions.Take + ] + }, + applicationId: "TestAppId", + mode: Labs.Core.LabMode.Edit + }; + setTimeout(function () { + return callback(null, connectionResponse); + }, 0); + }; + + // + // Stops communication with the host + // + InMemoryLabHost.prototype.disconnect = function (callback) { + setTimeout(function () { + return callback(null, null); + }, 0); + }; + + // + // Adds an event handler for dealing with messages coming from the host. The resolved promsie + // will be returned back to the host + // + InMemoryLabHost.prototype.on = function (handler) { + }; + + // + // Sends a message to the host. The in memory host simply stores it and replies back. + // + InMemoryLabHost.prototype.sendMessage = function (type, options, callback) { + this._messages.push({ + type: type, + options: options, + response: null + }); + setTimeout(function () { + return callback(null, null); + }); + }; + + InMemoryLabHost.prototype.getMessages = function () { + return this._messages; + }; + + InMemoryLabHost.prototype.create = function (options, callback) { + setTimeout(function () { + return callback(null, null); + }, 0); + }; + + // + // Gets the current lab configuration from the host + // + InMemoryLabHost.prototype.getConfiguration = function (callback) { + var configuration = this._labState.getConfiguration(); + setTimeout(function () { + return callback(null, configuration); + }, 0); + }; + + // + // Sets a new lab configuration on the host + // + InMemoryLabHost.prototype.setConfiguration = function (configuration, callback) { + this._labState.setConfiguration(configuration); + setTimeout(function () { + return callback(null, null); + }, 0); + }; + + // + // Gets the current state of the lab for the user + // + InMemoryLabHost.prototype.getState = function (callback) { + var state = this._labState.getState(); + setTimeout(function () { + return callback(null, state); + }); + }; + + // + // Sets the state of the lab for the user + // + InMemoryLabHost.prototype.setState = function (state, callback) { + this._labState.setState(state); + setTimeout(function () { + return callback(null, null); + }, 0); + }; + + InMemoryLabHost.prototype.getConfigurationInstance = function (callback) { + var configurationInstance = this._labState.getConfigurationInstance(); + setTimeout(function () { + return callback(null, configurationInstance); + }, 0); + }; + + InMemoryLabHost.prototype.takeAction = function (type, options, result, callback) { + var translatedCallback = callback !== undefined ? callback : result; + var translatedResult = callback !== undefined ? result : null; + + var action = this._labState.takeAction(type, options, translatedResult); + setTimeout(function () { + return translatedCallback(null, action); + }, 0); + }; + + InMemoryLabHost.prototype.getActions = function (type, options, callback) { + var actions = this._labState.getActions(type, options); + setTimeout(function () { + return callback(null, actions); + }, 0); + }; + return InMemoryLabHost; + })(); + Labs.InMemoryLabHost = InMemoryLabHost; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + ; + + var InMemoryLabState = (function () { + function InMemoryLabState() { + this._configuration = null; + this._configurationInstance = null; + this._state = null; + this._actions = []; + this._nextId = 0; + this._componentInstances = {}; + } + InMemoryLabState.prototype.getConfiguration = function () { + return this._configuration; + }; + + InMemoryLabState.prototype.setConfiguration = function (configuration) { + this._configuration = configuration; + this._configurationInstance = null; + this._state = null; + this._actions = []; + this._componentInstances = {}; + }; + + InMemoryLabState.prototype.getState = function () { + return this._state; + }; + + InMemoryLabState.prototype.setState = function (state) { + this._state = state; + }; + + InMemoryLabState.prototype.getConfigurationInstance = function () { + if (!this._configurationInstance) { + this._configurationInstance = this.getConfigurationInstanceFromConfiguration(this._configuration); + } + + return this._configurationInstance; + }; + + InMemoryLabState.prototype.getConfigurationInstanceFromConfiguration = function (configuration) { + var _this = this; + if (!configuration) { + return null; + } + + var components = configuration.components.map(function (component) { + return _this.getAndStoreComponentInstanceFromComponent(component); + }); + return { + appVersion: configuration.appVersion, + components: components, + name: configuration.name, + timeline: configuration.timeline + }; + }; + + InMemoryLabState.prototype.getAndStoreComponentInstanceFromComponent = function (component) { + var instance = JSON.parse(JSON.stringify(component)); + var componentId = this._nextId++; + instance.componentId = componentId.toString(); + + if (component.type === Labs.Components.ChoiceComponentType) { + instance.type = Labs.Components.ChoiceComponentInstanceType; + } else if (component.type === Labs.Components.InputComponentType) { + instance.type = Labs.Components.InputComponentInstanceType; + } else if (component.type === Labs.Components.ActivityComponentType) { + instance.type = Labs.Components.ActivityComponentInstanceType; + } else if (component.type === Labs.Components.DynamicComponentType) { + instance.type = Labs.Components.DynamicComponentInstanceType; + } else { + throw "unknown type"; + } + + for (var key in instance.values) { + var values = instance.values[key]; + for (var i = 0; i < values.length; i++) { + var valueId = this._nextId++; + values[i].valueId = valueId.toString(); + } + } + + this._componentInstances[instance.componentId] = { + component: component, + instance: instance + }; + return instance; + }; + + InMemoryLabState.prototype.takeAction = function (type, options, result) { + return this.takeActionCore(type, options, result); + }; + + InMemoryLabState.prototype.takeActionCore = function (type, options, result) { + if (result === null) { + if (type === Labs.Core.Actions.CreateAttemptAction) { + var attemptId = this._nextId++; + var createResult = { + attemptId: attemptId.toString() + }; + + result = createResult; + } else if (type === Labs.Core.Actions.GetValueAction) { + var optionsAsGetValueOptions = options; + var getValueResult = { + value: this.findConfigurationValue(optionsAsGetValueOptions.componentId, optionsAsGetValueOptions.attemptId, optionsAsGetValueOptions.valueId) + }; + + result = getValueResult; + } else if (type === Labs.Core.Actions.CreateComponentAction) { + var createComponentOptions = options; + var createdInstance = this.getAndStoreComponentInstanceFromComponent(createComponentOptions.component); + var createComponentResult = { + componentInstance: createdInstance + }; + + result = createComponentResult; + } else if (type === Labs.Core.Actions.SubmitAnswerAction) { + // Currently assuming activity components only + var submissionId = this._nextId++; + var submitAnswerResult = { + submissionId: submissionId.toString(), + complete: true, + score: null + }; + result = submitAnswerResult; + } + } else { + if (type === Labs.Core.Actions.SubmitAnswerAction) { + var submissionId = this._nextId++; + var resultsAsSubmitResults = result; + resultsAsSubmitResults.submissionId = submissionId.toString(); + } + } + + // Store and return the completed action + var completedAction = { + type: type, + options: options, + result: result, + time: Date.now() + }; + this._actions.push(completedAction); + + return completedAction; + }; + + InMemoryLabState.prototype.findConfigurationValue = function (componentId, attemptId, valueId) { + var storedComponent = this._componentInstances[componentId]; + + if (storedComponent) { + for (var key in storedComponent.instance.values) { + var values = storedComponent.instance.values[key]; + for (var i = 0; i < values.length; i++) { + if (values[i].valueId === valueId) { + return storedComponent.component.values[key][i].value; + } + } + } + } + + throw "not found"; + }; + + InMemoryLabState.prototype.getAllActions = function () { + return this._actions; + }; + + InMemoryLabState.prototype.setActions = function (actions) { + this._actions = actions; + }; + + InMemoryLabState.prototype.getActions = function (type, options) { + var completedActions = []; + var i; + var completedAction; + + if (type === Labs.Core.GetActions.GetAttempt) { + var actionAsGetAttempt = options; + + for (i = 0; i < this._actions.length; i++) { + completedAction = this._actions[i]; + if ((completedAction.options).attemptId === actionAsGetAttempt.attemptId) { + completedActions.push(completedAction); + } + } + } else if (type === Labs.Core.GetActions.GetComponentActions) { + var actionAsGetComponentActions = options; + + for (i = 0; i < this._actions.length; i++) { + completedAction = this._actions[i]; + if (completedAction.type === actionAsGetComponentActions.action && (completedAction.options).componentId === actionAsGetComponentActions.componentId) { + completedActions.push(completedAction); + } + } + } else { + throw "Unknown get results action"; + } + + // Return the final results + return completedActions; + }; + return InMemoryLabState; + })(); + Labs.InMemoryLabState = InMemoryLabState; +})(Labs || (Labs = {})); +; + +var Office; + +var Labs; +(function (Labs) { + ; + + var Resolver = (function () { + function Resolver() { + var _this = this; + this._callbacks = []; + this._isResolved = false; + this.promise = { + then: function (callback) { + _this._callbacks.push(callback); + if (_this._isResolved) { + _this.fireCallbacks(); + } + } + }; + } + Resolver.prototype.resolve = function (value) { + this._isResolved = true; + this._resolvedValue = value; + this.fireCallbacks(); + }; + + Resolver.prototype.fireCallbacks = function () { + var _this = this; + this._callbacks.forEach(function (callback) { + callback(_this._resolvedValue); + }); + + this._callbacks = []; + }; + return Resolver; + })(); + Labs.Resolver = Resolver; + ; + + var OfficeJSLabHost = (function () { + function OfficeJSLabHost() { + var _this = this; + this._version = { version: { major: 0, minor: 1 } }; + var resolver = new Resolver(); + this._officeInitialized = resolver.promise; + + Office.initialize = function () { + // retrieve the configuration - this will tell us if we have been published or not - and then + // use this to determine which host to make use of + var labsSettings = Office.context.document.settings.get(OfficeJSLabHost.SettingsKeyName); + + if (labsSettings && labsSettings.published) { + _this._labHost = new Labs.PostMessageLabHost(labsSettings.publishedAppId, parent.parent, "*"); + } else { + _this._labHost = new Labs.RichClientOfficeJSLabsHost(labsSettings ? labsSettings.configuration : null, labsSettings ? labsSettings.hostVersion : null); + } + + // based on what happens here I think I want to split on which internal host I create + resolver.resolve(); + }; + } + OfficeJSLabHost.prototype.getSupportedVersions = function () { + return [this._version]; + }; + + OfficeJSLabHost.prototype.connect = function (versions, callback) { + var _this = this; + this._officeInitialized.then(function () { + _this._labHost.connect(versions, callback); + }); + }; + + OfficeJSLabHost.prototype.disconnect = function (callback) { + this._labHost.disconnect(callback); + }; + + OfficeJSLabHost.prototype.on = function (handler) { + this._labHost.on(handler); + }; + + OfficeJSLabHost.prototype.sendMessage = function (type, options, callback) { + this._labHost.sendMessage(type, options, callback); + }; + + OfficeJSLabHost.prototype.create = function (options, callback) { + this._labHost.create(options, callback); + }; + + OfficeJSLabHost.prototype.getConfiguration = function (callback) { + this._labHost.getConfiguration(callback); + }; + + OfficeJSLabHost.prototype.setConfiguration = function (configuration, callback) { + this._labHost.setConfiguration(configuration, callback); + }; + + OfficeJSLabHost.prototype.getConfigurationInstance = function (callback) { + this._labHost.getConfigurationInstance(callback); + }; + + OfficeJSLabHost.prototype.getState = function (callback) { + this._labHost.getState(callback); + }; + + OfficeJSLabHost.prototype.setState = function (state, callback) { + this._labHost.setState(state, callback); + }; + + OfficeJSLabHost.prototype.takeAction = function (type, options, result, callback) { + this._labHost.takeAction(type, options, result, callback); + }; + + OfficeJSLabHost.prototype.getActions = function (type, options, callback) { + this._labHost.getActions(type, options, callback); + }; + OfficeJSLabHost.SettingsKeyName = "__labs__"; + return OfficeJSLabHost; + })(); + Labs.OfficeJSLabHost = OfficeJSLabHost; +})(Labs || (Labs = {})); + +// Also set the default builder +Labs.DefaultHostBuilder = function () { + return new Labs.OfficeJSLabHost(); +}; +var Labs; +(function (Labs) { + var EventState; + (function (EventState) { + EventState[EventState["Reject"] = 0] = "Reject"; + EventState[EventState["Collecting"] = 1] = "Collecting"; + EventState[EventState["Firing"] = 2] = "Firing"; + })(EventState || (EventState = {})); + ; + + /** + * PostMessageLabHost - ILabHost that uses PostMessage for its communication mechanism + */ + var PostMessageLabHost = (function () { + function PostMessageLabHost(labId, targetWindow, targetOrigin) { + var _this = this; + this._handlers = []; + this._version = { version: { major: 0, minor: 1 } }; + this._state = EventState.Reject; + this._deferredEvents = []; + // Start the message processor and listen for messages + this._targetWindow = targetWindow; + this._messageProcessor = new Labs.MessageProcessor(labId, targetOrigin, function (origin, data, callback) { + if (origin == _this._targetWindow) { + // Use setTimeout to make sure ordering is preserved with + _this.handleEvent(data, callback); + } + }); + } + PostMessageLabHost.prototype.handleEvent = function (command, callback) { + if (this._state == EventState.Reject) { + callback("Message received prior to connection", null); + } else if (this._state == EventState.Collecting) { + this._deferredEvents.push({ + command: command, + callback: callback + }); + } else { + this.invokeEvent(null, command, callback); + } + }; + + PostMessageLabHost.prototype.invokeDeferredEvents = function (err) { + var _this = this; + this._deferredEvents.forEach(function (event) { + _this.invokeEvent(err, event.command, event.callback); + }); + this._deferredEvents = []; + }; + + PostMessageLabHost.prototype.invokeEvent = function (err, command, callback) { + if (!err) { + this._handlers.map(function (handler) { + handler(command.type, command.commandData); + }); + } + + callback(err, null); + }; + + PostMessageLabHost.prototype.getSupportedVersions = function () { + return [this._version]; + }; + + PostMessageLabHost.prototype.connect = function (versions, callback) { + var _this = this; + this._messageProcessor.start(); + this._state = EventState.Collecting; + + // send the initialize message + var initializeMessage = new Labs.Command(Labs.CommandType.Connect, this._version); + this._messageProcessor.sendMessage(this._targetWindow, initializeMessage, function (err, connectionResponse) { + if (connectionResponse.hostVersion.major !== _this._version.version.major) { + err = "Unsupported post message host"; + } + + setTimeout(function () { + // Fire deferred events after we make the callback. This will give the connection + // response time to add any handlers prior to them firing. + callback(err, connectionResponse); + + // And then invoke any deferred work + _this.invokeDeferredEvents(err); + _this._state = err ? EventState.Reject : EventState.Firing; + }, 0); + }); + }; + + PostMessageLabHost.prototype.disconnect = function (callback) { + var _this = this; + this._state = EventState.Reject; + var doneCommand = new Labs.Command(Labs.CommandType.Disconnect, null); + this._messageProcessor.sendMessage(this._targetWindow, doneCommand, function (err, data) { + _this._messageProcessor.stop(); + callback(err, data); + }); + }; + + PostMessageLabHost.prototype.on = function (handler) { + this._handlers.push(handler); + }; + + PostMessageLabHost.prototype.sendMessage = function (type, options, callback) { + var commandData = { + type: type, + options: options + }; + + var sendMessageCommand = new Labs.Command(Labs.CommandType.SendMessage, commandData); + this.sendCommand(sendMessageCommand, callback); + }; + + PostMessageLabHost.prototype.create = function (options, callback) { + var createCommand = new Labs.Command(Labs.CommandType.Create, options); + this.sendCommand(createCommand, callback); + }; + + // + // Gets the current lab configuration from the host + // + PostMessageLabHost.prototype.getConfiguration = function (callback) { + var getConfigurationCommand = new Labs.Command(Labs.CommandType.GetConfiguration); + this.sendCommand(getConfigurationCommand, callback); + }; + + // + // Sets a new lab configuration on the host + // + PostMessageLabHost.prototype.setConfiguration = function (configuration, callback) { + var setConfigurationCommand = new Labs.Command(Labs.CommandType.SetConfiguration, configuration); + this.sendCommand(setConfigurationCommand, callback); + }; + + PostMessageLabHost.prototype.getConfigurationInstance = function (callback) { + var getConfigurationInstanceCommand = new Labs.Command(Labs.CommandType.GetConfigurationInstance); + this.sendCommand(getConfigurationInstanceCommand, callback); + }; + + // + // Gets the current state of the lab for the user + // + PostMessageLabHost.prototype.getState = function (callback) { + var getStateCommand = new Labs.Command(Labs.CommandType.GetState); + this.sendCommand(getStateCommand, callback); + }; + + // + // Sets the state of the lab for the user + // + PostMessageLabHost.prototype.setState = function (state, callback) { + var setStateCommand = new Labs.Command(Labs.CommandType.SetState, state); + this.sendCommand(setStateCommand, callback); + }; + + PostMessageLabHost.prototype.takeAction = function (type, options, result, callback) { + var commandData = { + type: type, + options: options, + result: callback !== undefined ? result : null + }; + + var takeActionCommand = new Labs.Command(Labs.CommandType.TakeAction, commandData); + this.sendCommand(takeActionCommand, callback !== undefined ? callback : result); + }; + + PostMessageLabHost.prototype.getActions = function (type, options, callback) { + var commandData = { + type: type, + options: options + }; + + var getCompletedActionsCommand = new Labs.Command(Labs.CommandType.GetCompletedActions, commandData); + this.sendCommand(getCompletedActionsCommand, callback); + }; + + PostMessageLabHost.prototype.sendCommand = function (command, callback) { + this._messageProcessor.sendMessage(this._targetWindow, command, callback); + }; + return PostMessageLabHost; + })(); + Labs.PostMessageLabHost = PostMessageLabHost; +})(Labs || (Labs = {})); +var Labs; +(function (Labs) { + var RichClientOfficeJSLabsHost = (function () { + function RichClientOfficeJSLabsHost(configuration, createdHostVersion) { + var _this = this; + this._handlers = []; + this._version = { version: { major: 0, minor: 1 } }; + this._labState = new Labs.InMemoryLabState(); + this._labState.setConfiguration(configuration); + this._createdHostVersion = createdHostVersion; + + // Get the current active view and pass it to the initialization method + var activeViewResolver = new Labs.Resolver(); + Office.context.document.getActiveViewAsync(function (result) { + _this._activeMode = _this.getLabModeFromActiveView(result.value); + activeViewResolver.resolve(result.value); + }); + this._activeViewP = activeViewResolver.promise; + + // And also listen for updates + Office.context.document.addHandlerAsync("activeViewChanged", function (args) { + _this._activeMode = _this.getLabModeFromActiveView(args.activeView); + + _this._handlers.forEach(function (handler) { + handler(Labs.CommandType.ModeChanged, { mode: Labs.Core.LabMode[_this._activeMode] }); + }); + }); + } + RichClientOfficeJSLabsHost.prototype.getLabModeFromActiveView = function (view) { + return view === 'edit' ? Labs.Core.LabMode.Edit : Labs.Core.LabMode.View; + }; + + RichClientOfficeJSLabsHost.prototype.getSupportedVersions = function () { + return [this._version]; + }; + + RichClientOfficeJSLabsHost.prototype.connect = function (versions, callback) { + var _this = this; + // verify versions are supported + this._activeViewP.then(function () { + var connectionResponse = { + initializationInfo: { + hostVersion: _this._createdHostVersion + }, + hostVersion: { + major: 0, + minor: 1 + }, + userInfo: { + id: "TestUserId", + permissions: [ + Labs.Core.Permissions.Edit, + Labs.Core.Permissions.Take + ] + }, + applicationId: "TestAppId", + mode: _this._activeMode + }; + + setTimeout(function () { + return callback(null, connectionResponse); + }, 0); + }); + }; + + RichClientOfficeJSLabsHost.prototype.disconnect = function (callback) { + setTimeout(function () { + return callback(null, null); + }, 0); + }; + + RichClientOfficeJSLabsHost.prototype.on = function (handler) { + this._handlers.push(handler); + }; + + RichClientOfficeJSLabsHost.prototype.sendMessage = function (type, options, callback) { + if (type === Labs.TimelineNextMessageType) { + var nextSlide = Office.Index.Next; + Office.context.document.goToByIdAsync(nextSlide, Office.GoToType.Index, function (asyncResult) { + var error = null; + if (asyncResult.status == Office.AsyncResultStatus.Failed) { + error = asyncResult.error; + } + + setTimeout(function () { + return callback(error, null); + }, 0); + }); + } else { + setTimeout(function () { + return callback("unknown message", null); + }, 0); + } + }; + + RichClientOfficeJSLabsHost.prototype.create = function (options, callback) { + // Store the options in the config settings. replace anything that is already there + this._createdHostVersion = this._version.version; + this.updateStoredLabsState(callback); + }; + + RichClientOfficeJSLabsHost.prototype.getConfiguration = function (callback) { + var _this = this; + setTimeout(function () { + return callback(null, _this._labState.getConfiguration()); + }, 0); + }; + + RichClientOfficeJSLabsHost.prototype.setConfiguration = function (configuration, callback) { + this._labState.setConfiguration(configuration); + this.updateStoredLabsState(callback); + }; + + RichClientOfficeJSLabsHost.prototype.updateStoredLabsState = function (callback) { + var settings = { + configuration: this._labState.getConfiguration(), + hostVersion: this._createdHostVersion + }; + + Office.context.document.settings.set(Labs.OfficeJSLabHost.SettingsKeyName, settings); + Office.context.document.settings.saveAsync(function (asyncResult) { + setTimeout(function () { + return callback(asyncResult.status === Office.AsyncResultStatus.Failed ? asyncResult.status : null, null); + }, 0); + }); + }; + + RichClientOfficeJSLabsHost.prototype.getConfigurationInstance = function (callback) { + var _this = this; + setTimeout(function () { + return callback(null, _this._labState.getConfigurationInstance()); + }); + }; + + RichClientOfficeJSLabsHost.prototype.getState = function (callback) { + var _this = this; + setTimeout(function () { + return callback(null, _this._labState.getState()); + }); + }; + + RichClientOfficeJSLabsHost.prototype.setState = function (state, callback) { + this._labState.setState(state); + setTimeout(function () { + return callback(null, null); + }); + }; + + RichClientOfficeJSLabsHost.prototype.takeAction = function (type, options, result, callback) { + var translatedCallback = callback !== undefined ? callback : result; + var translatedResult = callback !== undefined ? result : null; + + var action = this._labState.takeAction(type, options, translatedResult); + setTimeout(function () { + return translatedCallback(null, action); + }); + }; + + RichClientOfficeJSLabsHost.prototype.getActions = function (type, options, callback) { + var _this = this; + setTimeout(function () { + return callback(null, _this._labState.getActions(type, options)); + }); + }; + return RichClientOfficeJSLabsHost; + })(); + Labs.RichClientOfficeJSLabsHost = RichClientOfficeJSLabsHost; +})(Labs || (Labs = {})); +//# sourceMappingURL=LabsHosts.js.map + +var LabsServer; +(function (LabsServer) { + var LabHost = (function () { + function LabHost(appId, processor) { + this._active = false; + this._connected = false; + this._targetWindow = null; + this._isStarted = false; + this._appId = appId; + this._processor = processor; + } + LabHost.prototype.handleEvent = function (origin, data, callback) { + var _this = this; + var command = data; + var handledP = null; + + if (command.type === Labs.CommandType.Connect) { + handledP = this._processor.handleConnect(command.commandData); + } else if (!this._connected || (this._targetWindow !== origin)) { + var deferred = $.Deferred(); + deferred.reject({ message: "Connection has not been established" }); + handledP = deferred.promise(); + } else { + switch (command.type) { + case Labs.CommandType.Disconnect: + handledP = this._processor.handleDisconnect(command.commandData); + break; + + case Labs.CommandType.Create: + handledP = this._processor.handleCreate(command.commandData); + break; + + case Labs.CommandType.GetConfigurationInstance: + handledP = this._processor.handleGetConfigurationInstance(); + break; + + case Labs.CommandType.TakeAction: + handledP = this._processor.handleTakeAction(command.commandData); + break; + + case Labs.CommandType.GetCompletedActions: + handledP = this._processor.handleGetActions(command.commandData); + break; + + case Labs.CommandType.GetState: + handledP = this._processor.handleGetState(); + break; + + case Labs.CommandType.SetState: + handledP = this._processor.handleSetState(command.commandData); + break; + + case Labs.CommandType.GetConfiguration: + handledP = this._processor.handleGetConfiguration(); + break; + + case Labs.CommandType.SetConfiguration: + handledP = this._processor.handleSetConfiguration(command.commandData); + break; + + case Labs.CommandType.SendMessage: + handledP = this._processor.handleSendMessage(command.commandData); + break; + + default: + var deferred = $.Deferred(); + deferred.reject({ message: "Unknown Command" }); + handledP = deferred.promise(); + break; + } + } + + handledP.then(function (result) { + callback(null, result); + + switch (command.type) { + case Labs.CommandType.Connect: + _this._targetWindow = origin; + _this._connected = true; + _this.sendActivateMessage(_this._active); + break; + + case Labs.CommandType.Disconnect: + _this._targetWindow = null; + _this._connected = false; + break; + } + }, function (err) { + callback(err, null); + }); + }; + + LabHost.prototype.sendMessage = function (data) { + if (!this._targetWindow) { + throw "No target connected"; + } + + var deferred = $.Deferred(); + this._messageProcessor.sendMessage(this._targetWindow, data, function (err, sendMessageData) { + if (err) { + deferred.fail(err); + } else { + deferred.resolve(sendMessageData); + } + }); + + return deferred.promise(); + }; + + LabHost.prototype.start = function () { + var _this = this; + if (this._isStarted) { + throw "LabHost already started"; + } + this._isStarted = true; + + this._messageProcessor = new Labs.MessageProcessor(this._appId, "*", function (origin, data, callback) { + _this.handleEvent(origin, data, callback); + }); + this._messageProcessor.start(); + }; + + LabHost.prototype.stop = function () { + if (!this._isStarted) { + throw "LabHost is not running"; + } + this._isStarted = false; + + this._messageProcessor.stop(); + }; + + LabHost.prototype.setActive = function (active) { + this._active = active; + if (this._connected) { + this.sendActivateMessage(active); + } + }; + + LabHost.prototype.sendActivateMessage = function (active) { + this.sendMessage(new Labs.Command(active ? Labs.Core.EventTypes.Activate : Labs.Core.EventTypes.Deactivate, null)); + }; + return LabHost; + })(); + LabsServer.LabHost = LabHost; +})(LabsServer || (LabsServer = {})); +//# sourceMappingURL=LabsServer.js.map diff --git a/v3/office-mix-labshost/README b/v3/office-mix-labshost/README new file mode 100644 index 000000000..79b02b621 --- /dev/null +++ b/v3/office-mix-labshost/README @@ -0,0 +1,10 @@ +Taken from: https://labsjs.blob.core.windows.net/sdk/LabsJS-1.0.4/labs.html + +To test locally, run: + +cd v3/ +python bottle_server.py + +and visit + +http://localhost:8080/office-mix-labshost/labshost.html?lab=http://localhost:8080/opt-office-mix.html?PostMessageLabHost diff --git a/v3/office-mix-labshost/labshost.html b/v3/office-mix-labshost/labshost.html new file mode 100644 index 000000000..e18460056 --- /dev/null +++ b/v3/office-mix-labshost/labshost.html @@ -0,0 +1,94 @@ + + + + + + + Labs.js Host + + + + + +
    +
    + +

    Mode

    +
    + + +
    + +

    Host Version

    + + + +

    Configuration

    + +
    + + + +

    Actions

    + + + +

    Lab State

    + + +

    State

    +
    + + +
    +
    + +
    +

    Lab

    +
    + + +
    + +
    + +
    +
    + + +
    +

    Console

    +
      +
    • +
    +
    +
    + + + + + + + + + + diff --git a/v3/office-mix-labshost/labshost.js b/v3/office-mix-labshost/labshost.js new file mode 100644 index 000000000..cb225f701 --- /dev/null +++ b/v3/office-mix-labshost/labshost.js @@ -0,0 +1,169 @@ +var LabsHostViewModel = (function () { + function LabsHostViewModel(mode, initialLab) { + var _this = this; + this._version = { major: 0, minor: 1 }; + this._labState = new Labs.InMemoryLabState(); + this.attemptMap = {}; + this._nextId = 0; + this.active = ko.observable(false); + this.mode = ko.observable(mode); + this.consoleEntries = ko.observableArray(); + this.createHostVersion = ko.observable(); + + this.labUriEntry = ko.observable(initialLab); + this.labUri = initialLab ? ko.observable(initialLab) : ko.observable(); + this.actions = ko.observable(JSON.stringify([])); + this.results = ko.computed(function () { + var actions = _this.actions(); + return JSON.parse(actions); + }); + + this.configuration = ko.observable(null); + this.configurationInstance = ko.observable(null); + this.state = ko.observable(null); + + this.actions.subscribe(function (newActions) { + _this._labState.setActions(JSON.parse(newActions)); + }); + + this.state.subscribe(function (newState) { + _this._labState.setState(JSON.parse(newState)); + }); + + this.configuration.subscribe(function (newConfiguration) { + _this._labState.setConfiguration(JSON.parse(newConfiguration)); + _this.configurationInstance(JSON.stringify(_this._labState.getConfigurationInstance())); + }); + + this._server = new LabsServer.LabHost("test", this); + this._server.start(); + } + LabsHostViewModel.prototype.loadLab = function () { + this.log("Loading: " + this.labUriEntry()); + this.labUri(this.labUriEntry()); + }; + + LabsHostViewModel.prototype.setEditMode = function () { + var _this = this; + var editModeString = Labs.Core.LabMode[Labs.Core.LabMode.Edit]; + + if (this.mode() !== editModeString) { + this.mode(Labs.Core.LabMode[Labs.Core.LabMode.Edit]); + this.log("Setting Edit Mode"); + var promise = this._server.sendMessage(new Labs.Command(Labs.CommandType.ModeChanged, { mode: editModeString })); + promise.done(function () { + _this.log("Mode Set"); + }); + } + }; + + LabsHostViewModel.prototype.setActive = function () { + if (!this.active()) { + this.active(true); + this._server.setActive(true); + } + }; + + LabsHostViewModel.prototype.setDeactive = function () { + if (this.active()) { + this.active(false); + this._server.setActive(false); + } + }; + + LabsHostViewModel.prototype.setViewMode = function () { + var _this = this; + var viewModeString = Labs.Core.LabMode[Labs.Core.LabMode.View]; + + if (this.mode() !== viewModeString) { + this.mode(viewModeString); + this.log("Setting View Mode"); + var promise = this._server.sendMessage(new Labs.Command(Labs.CommandType.ModeChanged, { mode: viewModeString })); + promise.done(function () { + _this.log("Mode Set"); + }); + } + }; + + LabsHostViewModel.prototype.log = function (entry) { + this.consoleEntries.push(entry); + }; + + LabsHostViewModel.prototype.handleConnect = function (versionInfo) { + var hostVersion = this.createHostVersion() ? JSON.parse(this.createHostVersion()) : null; + + var connectionResponse = { + initializationInfo: { + hostVersion: hostVersion + }, + hostVersion: this._version, + userInfo: { + id: "TestUserId", + permissions: [ + Labs.Core.Permissions.Edit, + Labs.Core.Permissions.Take + ] + }, + applicationId: "TestAppId", + mode: Labs.Core.LabMode[this.mode()] + }; + + return $.when(connectionResponse); + }; + + LabsHostViewModel.prototype.handleDisconnect = function (completionStatus) { + return $.when(); + }; + + LabsHostViewModel.prototype.handleGetConfiguration = function () { + return $.when(this._labState.getConfiguration()); + }; + + LabsHostViewModel.prototype.handleSetConfiguration = function (configuration) { + this._labState.setConfiguration(configuration); + this.configuration(JSON.stringify(configuration)); + + this.state(this._labState.getState()); + this.actions(JSON.stringify(this._labState.getAllActions())); + this.configurationInstance(JSON.stringify(this._labState.getConfigurationInstance())); + + return $.when(); + }; + + LabsHostViewModel.prototype.handleGetState = function () { + return $.when(this._labState.getState()); + }; + + LabsHostViewModel.prototype.handleSetState = function (state) { + this._labState.setState(state); + this.state(JSON.stringify(state)); + return $.when(); + }; + + LabsHostViewModel.prototype.handleCreate = function (options) { + this.createHostVersion(JSON.stringify(this._version)); + return $.when(); + }; + + LabsHostViewModel.prototype.handleGetConfigurationInstance = function () { + return $.when(this._labState.getConfigurationInstance()); + }; + + LabsHostViewModel.prototype.handleTakeAction = function (commandData) { + var completedAction = this._labState.takeAction(commandData.type, commandData.options, commandData.result); + this.actions(JSON.stringify(this._labState.getAllActions())); + return $.when(completedAction); + }; + + LabsHostViewModel.prototype.handleGetActions = function (commandData) { + var completedActions = this._labState.getActions(commandData.type, commandData.options); + return $.when(completedActions); + }; + + LabsHostViewModel.prototype.handleSendMessage = function (messageData) { + this.log(JSON.stringify(messageData)); + return $.when(); + }; + return LabsHostViewModel; +})(); +//# sourceMappingURL=labshost.js.map diff --git a/v3/office-mix-labshost/labshost.js.map b/v3/office-mix-labshost/labshost.js.map new file mode 100644 index 000000000..e9325d2f3 --- /dev/null +++ b/v3/office-mix-labshost/labshost.js.map @@ -0,0 +1 @@ +{"version":3,"file":"labshost.js","sourceRoot":"","sources":["labshost.ts"],"names":["LabsHostViewModel","LabsHostViewModel.constructor","","","","","LabsHostViewModel.loadLab","LabsHostViewModel.setEditMode","","LabsHostViewModel.setActive","LabsHostViewModel.setDeactive","LabsHostViewModel.setViewMode","","LabsHostViewModel.log","LabsHostViewModel.handleConnect","LabsHostViewModel.handleDisconnect","LabsHostViewModel.handleGetConfiguration","LabsHostViewModel.handleSetConfiguration","LabsHostViewModel.handleGetState","LabsHostViewModel.handleSetState","LabsHostViewModel.handleCreate","LabsHostViewModel.handleGetConfigurationInstance","LabsHostViewModel.handleTakeAction","LabsHostViewModel.handleGetActions","LabsHostViewModel.handleSendMessage"],"mappings":"AAIA;IAmBIA,2BAAYA,IAAYA,EAAEA,UAAkBA;QAA5CC,iBAiCCA;QAxCDA,KAAQA,QAAQA,GAAGA,EAAEA,KAAKA,EAAEA,CAACA,EAAEA,KAAKA,EAAEA,CAACA,EAAEA,CAACA;QAC1CA,KAAQA,SAASA,GAA0BA,IAAIA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA,CAACA;QAEvEA,KAAQA,UAAUA,GAAQA,EAAEA,CAACA;QAE7BA,KAAQA,OAAOA,GAAGA,CAACA,CAACA;QAGhBA,IAAIA,CAACA,MAAMA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,KAAKA,CAACA,CAACA;QACnCA,IAAIA,CAACA,IAAIA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;QAChCA,IAAIA,CAACA,cAAcA,GAAGA,EAAEA,CAACA,eAAeA,CAACA,CAACA,CAACA;QAC3CA,IAAIA,CAACA,iBAAiBA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,CAACA,CAACA;;QAEzCA,IAAIA,CAACA,WAAWA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,UAAUA,CAACA,CAACA;QAC7CA,IAAIA,CAACA,MAAMA,GAAGA,UAAUA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,UAAUA,CAACA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,CAACA,CAACA;QACvEA,IAAIA,CAACA,OAAOA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,IAAIA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,CAACA;QACjDA,IAAIA,CAACA,OAAOA,GAAGA,EAAEA,CAACA,QAAQA,CAACA;YACvBC,IAAIA,OAAOA,GAAGA,KAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA;YAC7BA,OAAOA,IAAIA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA;QAC/BA,CAACA,CAACD,CAACA;;QAEHA,IAAIA,CAACA,aAAaA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;QACzCA,IAAIA,CAACA,qBAAqBA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;QACjDA,IAAIA,CAACA,KAAKA,GAAGA,EAAEA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;;QAEjCA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,UAACA,UAAUA;YAC9BE,KAAIA,CAACA,SAASA,CAACA,UAAUA,CAACA,IAAIA,CAACA,KAAKA,CAACA,UAAUA,CAACA,CAACA,CAACA;QACtDA,CAACA,CAACF,CAACA;;QAEHA,IAAIA,CAACA,KAAKA,CAACA,SAASA,CAACA,UAACA,QAAQA;YAC1BG,KAAIA,CAACA,SAASA,CAACA,QAAQA,CAACA,IAAIA,CAACA,KAAKA,CAACA,QAAQA,CAACA,CAACA,CAACA;QAClDA,CAACA,CAACH,CAACA;;QAEHA,IAAIA,CAACA,aAAaA,CAACA,SAASA,CAACA,UAACA,gBAAgBA;YAC1CI,KAAIA,CAACA,SAASA,CAACA,gBAAgBA,CAACA,IAA+BA,CAACA,KAAKA,CAACA,gBAAgBA,CAACA,CAACA,CAACA;YACzFA,KAAIA,CAACA,qBAAqBA,CAACA,IAAIA,CAACA,SAASA,CAACA,KAAIA,CAACA,SAASA,CAACA,wBAAwBA,CAACA,CAACA,CAACA,CAACA,CAACA;QAC1FA,CAACA,CAACJ,CAACA;;QAEHA,IAAIA,CAACA,OAAOA,GAAGA,IAAIA,UAAUA,CAACA,OAAOA,CAACA,MAAMA,EAAEA,IAAIA,CAACA,CAACA;QACpDA,IAAIA,CAACA,OAAOA,CAACA,KAAKA,CAACA,CAACA,CAACA;IACzBA,CAACA;IAEDD,sCAAAA;QACIM,IAAIA,CAACA,GAAGA,CAACA,WAAWA,GAAGA,IAAIA,CAACA,WAAWA,CAACA,CAACA,CAACA,CAACA;QAC3CA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,WAAWA,CAACA,CAACA,CAACA,CAACA;IACpCA,CAACA;;IAEDN,0CAAAA;QAAAO,iBAWCA;QAVGA,IAAIA,cAAcA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,CAACA;;QAE/DA,IAAIA,IAAIA,CAACA,IAAIA,CAACA,CAACA,KAAKA,cAAcA,CAAEA;YAChCA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,CAACA,CAACA;YACrDA,IAAIA,CAACA,GAAGA,CAACA,mBAAmBA,CAACA,CAACA;YAC9BA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,WAAWA,CAACA,WAAWA,EAAEA,EAAEA,IAAIA,EAAEA,cAAcA,EAAEA,CAACA,CAACA,CAACA;YACjHA,OAAOA,CAACA,IAAIA,CAACA;gBACTC,KAAIA,CAACA,GAAGA,CAACA,UAAUA,CAACA,CAACA;YACzBA,CAACA,CAACD,CAACA;SACNA;IACLA,CAACA;;IAEDP,wCAAAA;QACIS,IAAIA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAAEA;YAChBA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,CAACA;YAClBA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,IAAIA,CAACA,CAACA;SAChCA;IACLA,CAACA;;IAEDT,0CAAAA;QACIU,IAAIA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAAEA;YACfA,IAAIA,CAACA,MAAMA,CAACA,KAAKA,CAACA,CAACA;YACnBA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,KAAKA,CAACA,CAACA;SACjCA;IACLA,CAACA;;IAEDV,0CAAAA;QAAAW,iBAWCA;QAVGA,IAAIA,cAAcA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,CAACA;;QAE/DA,IAAIA,IAAIA,CAACA,IAAIA,CAACA,CAACA,KAAKA,cAAcA,CAAEA;YAChCA,IAAIA,CAACA,IAAIA,CAACA,cAAcA,CAACA,CAACA;YAC1BA,IAAIA,CAACA,GAAGA,CAACA,mBAAmBA,CAACA,CAACA;YAC9BA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,WAAWA,CAACA,WAAWA,EAAEA,EAAEA,IAAIA,EAAEA,cAAcA,EAAEA,CAACA,CAACA,CAACA;YACjHA,OAAOA,CAACA,IAAIA,CAACA;gBACTC,KAAIA,CAACA,GAAGA,CAACA,UAAUA,CAACA,CAACA;YACzBA,CAACA,CAACD,CAACA;SACNA;IACLA,CAACA;;IAEDX,kCAAAA,UAAIA,KAAaA;QACba,IAAIA,CAACA,cAAcA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;IACpCA,CAACA;;IAEDb,4CAAAA,UAAcA,WAA0CA;QACpDc,IAAIA,WAAWA,GAAGA,IAAIA,CAACA,iBAAiBA,CAACA,CAACA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,iBAAiBA,CAACA,CAACA,CAACA,GAAGA,IAAIA,CAACA;;QAGzFA,IAAIA,kBAAkBA,GAAkCA;YACpDA,kBAAkBA,EAAEA;gBAChBA,WAAWA,EAAEA,WAAWA;aAC3BA;YACDA,WAAWA,EAAEA,IAAIA,CAACA,QAAQA;YAC1BA,QAAQA,EAAEA;gBACNA,EAAEA,EAAEA,YAAYA;gBAChBA,WAAWA,EAAEA;oBACTA,IAAIA,CAACA,IAAIA,CAACA,WAAWA,CAACA,IAAIA;oBAC1BA,IAAIA,CAACA,IAAIA,CAACA,WAAWA,CAACA,IAAIA;iBAACA;aAClCA;YACDA,aAAaA,EAAEA,WAAWA;YAC1BA,IAAIA,EAAEA,IAAIA,CAACA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;SACvCA,CAACA;;QAEFA,OAAOA,CAACA,CAACA,IAAIA,CAACA,kBAAkBA,CAACA,CAACA;IACtCA,CAACA;;IAEDd,+CAAAA,UAAiBA,gBAA6CA;QAC1De,OAAOA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACpBA,CAACA;;IAEDf,qDAAAA;QACIgB,OAAOA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,SAASA,CAACA,gBAAgBA,CAACA,CAACA,CAACA,CAACA;IACrDA,CAACA;;IAEDhB,qDAAAA,UAAuBA,aAAuCA;QAC1DiB,IAAIA,CAACA,SAASA,CAACA,gBAAgBA,CAACA,aAAaA,CAACA,CAACA;QAC/CA,IAAIA,CAACA,aAAaA,CAACA,IAAIA,CAACA,SAASA,CAACA,aAAaA,CAACA,CAACA,CAACA;;QAGlDA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,SAASA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;QACtCA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,SAASA,CAACA,aAAaA,CAACA,CAACA,CAACA,CAACA,CAACA;QAC7DA,IAAIA,CAACA,qBAAqBA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,SAASA,CAACA,wBAAwBA,CAACA,CAACA,CAACA,CAACA,CAACA;;QAEtFA,OAAOA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACpBA,CAACA;;IAEDjB,6CAAAA;QACIkB,OAAOA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,SAASA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA;IAC7CA,CAACA;;IAEDlB,6CAAAA,UAAeA,KAAUA;QACrBmB,IAAIA,CAACA,SAASA,CAACA,QAAQA,CAACA,KAAKA,CAACA,CAACA;QAC/BA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,SAASA,CAACA,KAAKA,CAACA,CAACA,CAACA;QAClCA,OAAOA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACpBA,CAACA;;IAEDnB,2CAAAA,UAAaA,OAAsCA;QAC/CoB,IAAIA,CAACA,iBAAiBA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;QACtDA,OAAOA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACpBA,CAACA;;IAEDpB,6DAAAA;QACIqB,OAAOA,CAACA,CAACA,IAAIA,CAACA,IAAIA,CAACA,SAASA,CAACA,wBAAwBA,CAACA,CAACA,CAACA,CAACA;IAC7DA,CAACA;;IAEDrB,+CAAAA,UAAiBA,WAAuCA;QACpDsB,IAAIA,eAAeA,GAAGA,IAAIA,CAACA,SAASA,CAACA,UAAUA,CAACA,WAAWA,CAACA,IAAIA,EAAEA,WAAWA,CAACA,OAAOA,EAAEA,WAAWA,CAACA,MAAMA,CAACA,CAACA;QAC3GA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,SAASA,CAACA,aAAaA,CAACA,CAACA,CAACA,CAACA,CAACA;QAC7DA,OAAOA,CAACA,CAACA,IAAIA,CAACA,eAAeA,CAACA,CAACA;IACnCA,CAACA;;IAEDtB,+CAAAA,UAAiBA,WAAuCA;QACpDuB,IAAIA,gBAAgBA,GAAGA,IAAIA,CAACA,SAASA,CAACA,UAAUA,CAACA,WAAWA,CAACA,IAAIA,EAAEA,WAAWA,CAACA,OAAOA,CAACA,CAACA;QACxFA,OAAOA,CAACA,CAACA,IAAIA,CAACA,gBAAgBA,CAACA,CAACA;IACpCA,CAACA;;IAEDvB,gDAAAA,UAAkBA,WAAwCA;QACtDwB,IAAIA,CAACA,GAAGA,CAACA,IAAIA,CAACA,SAASA,CAACA,WAAWA,CAACA,CAACA,CAACA;QACtCA,OAAOA,CAACA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACpBA,CAACA;IACLxB;AAACA,CAAAA,IAAA"} \ No newline at end of file diff --git a/v3/office-mix-labshost/underscore.js b/v3/office-mix-labshost/underscore.js new file mode 100644 index 000000000..ca61fdc3a --- /dev/null +++ b/v3/office-mix-labshost/underscore.js @@ -0,0 +1,1344 @@ +// Underscore.js 1.6.0 +// http://underscorejs.org +// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Establish the object that gets returned to break out of a loop iteration. + var breaker = {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + concat = ArrayProto.concat, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeForEach = ArrayProto.forEach, + nativeMap = ArrayProto.map, + nativeReduce = ArrayProto.reduce, + nativeReduceRight = ArrayProto.reduceRight, + nativeFilter = ArrayProto.filter, + nativeEvery = ArrayProto.every, + nativeSome = ArrayProto.some, + nativeIndexOf = ArrayProto.indexOf, + nativeLastIndexOf = ArrayProto.lastIndexOf, + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object via a string identifier, + // for Closure Compiler "advanced" mode. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.6.0'; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles objects with the built-in `forEach`, arrays, and raw objects. + // Delegates to **ECMAScript 5**'s native `forEach` if available. + var each = _.each = _.forEach = function(obj, iterator, context) { + if (obj == null) return obj; + if (nativeForEach && obj.forEach === nativeForEach) { + obj.forEach(iterator, context); + } else if (obj.length === +obj.length) { + for (var i = 0, length = obj.length; i < length; i++) { + if (iterator.call(context, obj[i], i, obj) === breaker) return; + } + } else { + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return; + } + } + return obj; + }; + + // Return the results of applying the iterator to each element. + // Delegates to **ECMAScript 5**'s native `map` if available. + _.map = _.collect = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); + each(obj, function(value, index, list) { + results.push(iterator.call(context, value, index, list)); + }); + return results; + }; + + var reduceError = 'Reduce of empty array with no initial value'; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. + _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { + var initial = arguments.length > 2; + if (obj == null) obj = []; + if (nativeReduce && obj.reduce === nativeReduce) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); + } + each(obj, function(value, index, list) { + if (!initial) { + memo = value; + initial = true; + } else { + memo = iterator.call(context, memo, value, index, list); + } + }); + if (!initial) throw new TypeError(reduceError); + return memo; + }; + + // The right-associative version of reduce, also known as `foldr`. + // Delegates to **ECMAScript 5**'s native `reduceRight` if available. + _.reduceRight = _.foldr = function(obj, iterator, memo, context) { + var initial = arguments.length > 2; + if (obj == null) obj = []; + if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); + } + var length = obj.length; + if (length !== +length) { + var keys = _.keys(obj); + length = keys.length; + } + each(obj, function(value, index, list) { + index = keys ? keys[--length] : --length; + if (!initial) { + memo = obj[index]; + initial = true; + } else { + memo = iterator.call(context, memo, obj[index], index, list); + } + }); + if (!initial) throw new TypeError(reduceError); + return memo; + }; + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var result; + any(obj, function(value, index, list) { + if (predicate.call(context, value, index, list)) { + result = value; + return true; + } + }); + return result; + }; + + // Return all the elements that pass a truth test. + // Delegates to **ECMAScript 5**'s native `filter` if available. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + if (obj == null) return results; + if (nativeFilter && obj.filter === nativeFilter) return obj.filter(predicate, context); + each(obj, function(value, index, list) { + if (predicate.call(context, value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, function(value, index, list) { + return !predicate.call(context, value, index, list); + }, context); + }; + + // Determine whether all of the elements match a truth test. + // Delegates to **ECMAScript 5**'s native `every` if available. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate || (predicate = _.identity); + var result = true; + if (obj == null) return result; + if (nativeEvery && obj.every === nativeEvery) return obj.every(predicate, context); + each(obj, function(value, index, list) { + if (!(result = result && predicate.call(context, value, index, list))) return breaker; + }); + return !!result; + }; + + // Determine if at least one element in the object matches a truth test. + // Delegates to **ECMAScript 5**'s native `some` if available. + // Aliased as `any`. + var any = _.some = _.any = function(obj, predicate, context) { + predicate || (predicate = _.identity); + var result = false; + if (obj == null) return result; + if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context); + each(obj, function(value, index, list) { + if (result || (result = predicate.call(context, value, index, list))) return breaker; + }); + return !!result; + }; + + // Determine if the array or object contains a given value (using `===`). + // Aliased as `include`. + _.contains = _.include = function(obj, target) { + if (obj == null) return false; + if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; + return any(obj, function(value) { + return value === target; + }); + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + return (isFunc ? method : value[method]).apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matches(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matches(attrs)); + }; + + // Return the maximum element or (element-based computation). + // Can't optimize arrays of integers longer than 65,535 elements. + // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797) + _.max = function(obj, iterator, context) { + if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { + return Math.max.apply(Math, obj); + } + var result = -Infinity, lastComputed = -Infinity; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + if (computed > lastComputed) { + result = value; + lastComputed = computed; + } + }); + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iterator, context) { + if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { + return Math.min.apply(Math, obj); + } + var result = Infinity, lastComputed = Infinity; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + if (computed < lastComputed) { + result = value; + lastComputed = computed; + } + }); + return result; + }; + + // Shuffle an array, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var rand; + var index = 0; + var shuffled = []; + each(obj, function(value) { + rand = _.random(index++); + shuffled[index - 1] = shuffled[rand]; + shuffled[rand] = value; + }); + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (obj.length !== +obj.length) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // An internal function to generate lookup iterators. + var lookupIterator = function(value) { + if (value == null) return _.identity; + if (_.isFunction(value)) return value; + return _.property(value); + }; + + // Sort the object's values by a criterion produced by an iterator. + _.sortBy = function(obj, iterator, context) { + iterator = lookupIterator(iterator); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iterator.call(context, value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iterator, context) { + var result = {}; + iterator = lookupIterator(iterator); + each(obj, function(value, index) { + var key = iterator.call(context, value, index, obj); + behavior(result, key, value); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, key, value) { + _.has(result, key) ? result[key].push(value) : result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, key, value) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, key) { + _.has(result, key) ? result[key]++ : result[key] = 1; + }); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iterator, context) { + iterator = lookupIterator(iterator); + var value = iterator.call(context, obj); + var low = 0, high = array.length; + while (low < high) { + var mid = (low + high) >>> 1; + iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid; + } + return low; + }; + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (obj.length === +obj.length) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return (obj.length === +obj.length) ? obj.length : _.keys(obj).length; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if ((n == null) || guard) return array[0]; + if (n < 0) return []; + return slice.call(array, 0, n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. The **guard** check allows it to work with + // `_.map`. + _.initial = function(array, n, guard) { + return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. The **guard** check allows it to work with `_.map`. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if ((n == null) || guard) return array[array.length - 1]; + return slice.call(array, Math.max(array.length - n, 0)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. The **guard** + // check allows it to work with `_.map`. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, (n == null) || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, output) { + if (shallow && _.every(input, _.isArray)) { + return concat.apply(output, input); + } + each(input, function(value) { + if (_.isArray(value) || _.isArguments(value)) { + shallow ? push.apply(output, value) : flatten(value, shallow, output); + } else { + output.push(value); + } + }); + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, []); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Split an array into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(array, predicate, context) { + predicate = lookupIterator(predicate); + var pass = [], fail = []; + each(array, function(elem) { + (predicate.call(context, elem) ? pass : fail).push(elem); + }); + return [pass, fail]; + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iterator, context) { + if (_.isFunction(isSorted)) { + context = iterator; + iterator = isSorted; + isSorted = false; + } + var initial = iterator ? _.map(array, iterator, context) : array; + var results = []; + var seen = []; + each(initial, function(value, index) { + if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) { + seen.push(value); + results.push(array[index]); + } + }); + return results; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(_.flatten(arguments, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var rest = slice.call(arguments, 1); + return _.filter(_.uniq(array), function(item) { + return _.every(rest, function(other) { + return _.contains(other, item); + }); + }); + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = concat.apply(ArrayProto, slice.call(arguments, 1)); + return _.filter(array, function(value){ return !_.contains(rest, value); }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + var length = _.max(_.pluck(arguments, 'length').concat(0)); + var results = new Array(length); + for (var i = 0; i < length; i++) { + results[i] = _.pluck(arguments, '' + i); + } + return results; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + if (list == null) return {}; + var result = {}; + for (var i = 0, length = list.length; i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), + // we need this function. Return the position of the first occurrence of an + // item in an array, or -1 if the item is not included in the array. + // Delegates to **ECMAScript 5**'s native `indexOf` if available. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = function(array, item, isSorted) { + if (array == null) return -1; + var i = 0, length = array.length; + if (isSorted) { + if (typeof isSorted == 'number') { + i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted); + } else { + i = _.sortedIndex(array, item); + return array[i] === item ? i : -1; + } + } + if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted); + for (; i < length; i++) if (array[i] === item) return i; + return -1; + }; + + // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. + _.lastIndexOf = function(array, item, from) { + if (array == null) return -1; + var hasIndex = from != null; + if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) { + return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item); + } + var i = (hasIndex ? from : array.length); + while (i--) if (array[i] === item) return i; + return -1; + }; + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (arguments.length <= 1) { + stop = start || 0; + start = 0; + } + step = arguments[2] || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var idx = 0; + var range = new Array(length); + + while(idx < length) { + range[idx++] = start; + start += step; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Reusable constructor function for prototype setting. + var ctor = function(){}; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + var args, bound; + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError; + args = slice.call(arguments, 2); + return bound = function() { + if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); + ctor.prototype = func.prototype; + var self = new ctor; + ctor.prototype = null; + var result = func.apply(self, args.concat(slice.call(arguments))); + if (Object(result) === result) return result; + return self; + }; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + return function() { + var position = 0; + var args = boundArgs.slice(); + for (var i = 0, length = args.length; i < length; i++) { + if (args[i] === _) args[i] = arguments[position++]; + } + while (position < arguments.length) args.push(arguments[position++]); + return func.apply(this, args); + }; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var funcs = slice.call(arguments, 1); + if (funcs.length === 0) throw new Error('bindAll must be passed function names'); + each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memo = {}; + hasher || (hasher = _.identity); + return function() { + var key = hasher.apply(this, arguments); + return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); + }; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ return func.apply(null, args); }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = function(func) { + return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); + }; + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + options || (options = {}); + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + if (last < wait) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) { + timeout = setTimeout(later, wait); + } + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = function(func) { + var ran = false, memo; + return function() { + if (ran) return memo; + ran = true; + memo = func.apply(this, arguments); + func = null; + return memo; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var funcs = arguments; + return function() { + var args = arguments; + for (var i = funcs.length - 1; i >= 0; i--) { + args = [funcs[i].apply(this, args)]; + } + return args[0]; + }; + }; + + // Returns a function that will only be executed after being called N times. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Object Functions + // ---------------- + + // Retrieve the names of an object's properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = new Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = new Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = function(obj) { + each(slice.call(arguments, 1), function(source) { + if (source) { + for (var prop in source) { + obj[prop] = source[prop]; + } + } + }); + return obj; + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(obj) { + var copy = {}; + var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); + each(keys, function(key) { + if (key in obj) copy[key] = obj[key]; + }); + return copy; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj) { + var copy = {}; + var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); + for (var key in obj) { + if (!_.contains(keys, key)) copy[key] = obj[key]; + } + return copy; + }; + + // Fill in a given object with default properties. + _.defaults = function(obj) { + each(slice.call(arguments, 1), function(source) { + if (source) { + for (var prop in source) { + if (obj[prop] === void 0) obj[prop] = source[prop]; + } + } + }); + return obj; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a == 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className != toString.call(b)) return false; + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') return false; + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) return bStack[length] == b; + } + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) && + _.isFunction(bCtor) && (bCtor instanceof bCtor)) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0, result = true; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack))) break; + } + } + } else { + // Deep compare objects. + for (var key in a) { + if (_.has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (_.has(b, key) && !(size--)) break; + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return result; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b, [], []); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; + for (var key in obj) if (_.has(obj, key)) return false; + return true; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) == '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + return obj === Object(obj); + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. + each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) == '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return !!(obj && _.has(obj, 'callee')); + }; + } + + // Optimize `isFunction` if appropriate. + if (typeof (/./) !== 'function') { + _.isFunction = function(obj) { + return typeof obj === 'function'; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj != +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iterators. + _.identity = function(value) { + return value; + }; + + _.constant = function(value) { + return function () { + return value; + }; + }; + + _.property = function(key) { + return function(obj) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of `key:value` pairs. + _.matches = function(attrs) { + return function(obj) { + if (obj === attrs) return true; //avoid comparing an object to itself. + for (var key in attrs) { + if (attrs[key] !== obj[key]) + return false; + } + return true; + } + }; + + // Run a function **n** times. + _.times = function(n, iterator, context) { + var accum = Array(Math.max(0, n)); + for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { return new Date().getTime(); }; + + // List of HTML entities for escaping. + var entityMap = { + escape: { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + } + }; + entityMap.unescape = _.invert(entityMap.escape); + + // Regexes containing the keys and values listed immediately above. + var entityRegexes = { + escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'), + unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g') + }; + + // Functions for escaping and unescaping strings to/from HTML interpolation. + _.each(['escape', 'unescape'], function(method) { + _[method] = function(string) { + if (string == null) return ''; + return ('' + string).replace(entityRegexes[method], function(match) { + return entityMap[method][match]; + }); + }; + }); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property) { + if (object == null) return void 0; + var value = object[property]; + return _.isFunction(value) ? value.call(object) : value; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result.call(this, func.apply(_, args)); + }; + }); + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + _.template = function(text, data, settings) { + var render; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = new RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset) + .replace(escaper, function(match) { return '\\' + escapes[match]; }); + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } + if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } + if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + index = offset + match.length; + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + "return __p;\n"; + + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + if (data) return render(data, _); + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled function source as a convenience for precompilation. + template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function, which will delegate to the wrapper. + _.chain = function(obj) { + return _(obj).chain(); + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(obj) { + return this._chain ? _(obj).chain() : obj; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0]; + return result.call(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result.call(this, method.apply(this._wrapped, arguments)); + }; + }); + + _.extend(_.prototype, { + + // Start chaining a wrapped Underscore object. + chain: function() { + this._chain = true; + return this; + }, + + // Extracts the result from a wrapped and chained object. + value: function() { + return this._wrapped; + } + + }); + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}).call(this); diff --git a/v3/opt-annotations.png b/v3/opt-annotations.png new file mode 100644 index 000000000..9fff3305d Binary files /dev/null and b/v3/opt-annotations.png differ diff --git a/v3/opt-ipy-server.py b/v3/opt-ipy-server.py new file mode 100755 index 000000000..33dff6e7c --- /dev/null +++ b/v3/opt-ipy-server.py @@ -0,0 +1,105 @@ +# Adapted from https://github.com/facebook/tornado/tree/master/demos/websocket + +import logging +import tornado.ioloop +import tornado.options +import tornado.web +import tornado.websocket +import os.path + +from tornado.options import define, options + +import json + + +define("port", default=8888, help="run on the given port", type=int) + + +class Application(tornado.web.Application): + # singleton + current_full_trace = None + + def __init__(self): + handlers = [ + (r"/js/(.*)", + tornado.web.StaticFileHandler, + {"path": os.path.join(os.path.dirname(__file__), 'js/')}), + (r"/css/(.*)", + tornado.web.StaticFileHandler, + {"path": os.path.join(os.path.dirname(__file__), 'css/')}), + (r"/", MainHandler), + (r"/chatsocket", ChatSocketHandler), + # respond to HTTP POST requests: + (r"/wholetrace", WholeTraceHandler), + (r"/difftrace", DiffTraceHandler), + (r"/clear", ClearHandler), + ] + tornado.web.Application.__init__(self, handlers) + + +class MainHandler(tornado.web.RequestHandler): + def get(self): + self.render("opt-ipy.html") + + +class WholeTraceHandler(tornado.web.RequestHandler): + def post(self): + message = self.request.body + dat = json.loads(message.decode()) + Application.current_full_trace = dat + + js_msg=dict(payload=Application.current_full_trace, type='wholetrace') + ChatSocketHandler.send_updates(json.dumps(js_msg)) + + +class DiffTraceHandler(tornado.web.RequestHandler): + def post(self): + # TODO: implement me using, say, + # https://code.google.com/p/google-diff-match-patch/ + pass + + +class ClearHandler(tornado.web.RequestHandler): + def post(self): + Application.current_full_trace = None + js_msg=dict(type='clear') + ChatSocketHandler.send_updates(json.dumps(js_msg)) + + +class ChatSocketHandler(tornado.websocket.WebSocketHandler): + waiters = set() + + def allow_draft76(self): + # for iOS 5.0 Safari + return True + + def open(self): + ChatSocketHandler.waiters.add(self) + # when a new connection is made, send the entire trace to only + # THIS browser + if Application.current_full_trace: + js_msg=dict(payload=Application.current_full_trace, type='wholetrace') + self.write_message(json.dumps(js_msg)) + + def on_close(self): + ChatSocketHandler.waiters.remove(self) + + @classmethod + def send_updates(cls, chat): + #logging.info("sending message to %d waiters", len(cls.waiters)) + for waiter in cls.waiters: + try: + waiter.write_message(chat) + except: + logging.error("Error sending message", exc_info=True) + + +def main(): + tornado.options.parse_command_line() + app = Application() + app.listen(options.port) + tornado.ioloop.IOLoop.instance().start() + + +if __name__ == "__main__": + main() diff --git a/v3/opt-ipy.html b/v3/opt-ipy.html new file mode 100644 index 000000000..ebad12520 --- /dev/null +++ b/v3/opt-ipy.html @@ -0,0 +1,62 @@ + + + + + Online Python Tutor: interactive mode + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + diff --git a/v3/opt-ipy.py b/v3/opt-ipy.py new file mode 100644 index 000000000..b8d853539 --- /dev/null +++ b/v3/opt-ipy.py @@ -0,0 +1,192 @@ +# Online Python Tutor extension for the IPython shell +# by Philip Guo (philip@pgbovine.net) +# August 2013 + +# When this extension is loaded, you can type code into the IPython +# prompt and visualize its execution in a web browser. +# +# This extension also defines a '%clear' magic command to clear the +# user's global environment and accompanying visualization. + +# One-minute video demo: +# http://www.youtube.com/watch?v=Q3oarDuZPL0 + +# Prerequisites: +# - IPython shell (http://ipython.org/, tested on 0.13.1 and 1.0.dev) +# - tornado Web server (http://www.tornadoweb.org/) +# +# One easy way to set up these prerequisites is by installing the +# free Enthought Python Distribution: +# https://www.enthought.com/products/epd/free/ + +# Instructions: +# +# 1. Start a local web server +# +# python opt-ipy-server.py +# +# 2. Load this URL in your browser: +# +# http://localhost:8888/ +# +# 3. Start the IPython shell in this directory by running: +# +# ipython +# +# 4. Load this extension by running: +# +# %load_ext opt-ipy +# +# At this point, as soon as you execute a Python statement in the +# IPython shell, it should immediately be visualized in your browser. + + +# If you're hosting the server remotely, then change this address: +SERVER_ADDR = "http://localhost:8888/" + +assert SERVER_ADDR[-1] == '/' + + +import sys, json +import pg_logger + +# TODO: use the 'six' library to smooth out py2 and py3 differences +is_python3 = (sys.version_info[0] == 3) + + +viewitems = None +urlopen = None +if is_python3: + import urllib + urlopen = urllib.request.urlopen + viewitems = lambda x: x.items() + +else: + import urllib2 + urlopen = urllib2.urlopen + viewitems = lambda x: x.iteritems() + + + +# Standardize display of floats to 3 significant figures +# +# Trick from: +# http://stackoverflow.com/questions/1447287/format-floats-with-standard-json-module +json.encoder.FLOAT_REPR = lambda f: ('%.3f' % f) + +#INDENT_LEVEL = 2 # human-readable +INDENT_LEVEL = None # compact + +# TODO: support incremental pushes to the OPT frontend for efficiency +# and better "snappiness" +# +# I think the easiest way to do diffs is to set INDENT_LEVEL = 2 above +# and then simply send the diff of the JSON string to the server. +# It's WAY TOO COMPLICATED to try implementing semantic diffs of the +# OPT trace ourselves, since there are too many corner cases. +# +# text diffs are an elegant solution :) +# +# https://code.google.com/p/google-diff-match-patch/ + + +class OptHistory(object): + def __init__(self): + self.executed_stmts = [] + + def pop_last(self): + self.executed_stmts.pop() + + def get_code(self): + return '\n'.join(self.executed_stmts) + + def run_str_and_broadcast(self, stmt_str): + ''' + Run stmt_str and transmit trace to server + ''' + self.executed_stmts.append(stmt_str) + + opt_trace = pg_logger.exec_script_str_local(self.get_code(), [], False, False, + lambda cod, trace: trace) + + last_evt = opt_trace[-1]['event'] + if last_evt == 'exception': + epic_fail = True + else: + assert last_evt == 'return' + epic_fail = False + + trace_dict = dict(code=self.get_code(), trace=opt_trace) + json_output = json.dumps(trace_dict, indent=INDENT_LEVEL) + + # if this statement ended in an exception, delete it from the + # history and pretend it never happened + if epic_fail: + self.pop_last() + + urlopen(SERVER_ADDR + 'wholetrace', json_output.encode()) + + +# called right before a statement gets executed +def opt_pre_run_code_hook(self): + # when you run multiple statements on one line using a semicolon: + # e.g., "print x; print y", this function will fire multiple times. + # we want to avoid duplicates! + last_cmd = self.history_manager.input_hist_parsed[-1] + last_cmd_index = len(self.history_manager.input_hist_parsed) - 1 + + # also don't intercept special ipython commands + if 'get_ipython().' in last_cmd: + return + + if self.meta.last_cmd_index == last_cmd_index: + assert self.meta.last_cmd == last_cmd + return # punt!!! + + self.meta.last_cmd = last_cmd + self.meta.last_cmd_index = last_cmd_index + + self.meta.opt_history.run_str_and_broadcast(last_cmd) + + +# clear global namespace and reset history +def opt_clear(self, params): + ip = get_ipython() + + filtered_user_ns = set() + for k, v in viewitems(ip.user_ns): + if k[0] == '_': + continue + if k in ('In', 'Out', 'help', 'quit', 'exit', 'get_ipython'): + continue + filtered_user_ns.add(k) + + for k in filtered_user_ns: + del ip.user_ns[k] + + ip.meta.opt_history = OptHistory() # just create a new one! + + urlopen(SERVER_ADDR + 'clear', 'blub'.encode()) # need a non-empty POST body + + +def load_ipython_extension(ipython): + # The `ipython` argument is the currently active `InteractiveShell` + # instance, which can be used in any way. This allows you to register + # new magics or aliases, for example. + + ipython.meta.opt_history = OptHistory() + + ipython.meta.last_cmd = None + ipython.meta.last_cmd_index = -1 # set to an impossible initial value + + # NB: spelling might be different in older IPython versions + ipython.set_hook('pre_run_code_hook', opt_pre_run_code_hook) + ipython.define_magic('clear', opt_clear) + + print("Online Python Tutor extension loaded!") + + +def unload_ipython_extension(ipython): + # If you want your extension to be unloadable, put that logic here. + pass + diff --git a/v3/opt-logo-32x32.png b/v3/opt-logo-32x32.png new file mode 100644 index 000000000..243f39a43 Binary files /dev/null and b/v3/opt-logo-32x32.png differ diff --git a/v3/opt-logo-96x96.png b/v3/opt-logo-96x96.png new file mode 100644 index 000000000..ffb1d77f2 Binary files /dev/null and b/v3/opt-logo-96x96.png differ diff --git a/v3/opt-office-mix.html b/v3/opt-office-mix.html new file mode 100644 index 000000000..9761b76ea --- /dev/null +++ b/v3/opt-office-mix.html @@ -0,0 +1,141 @@ + + + + + + + Online Python Tutor - Visualize Python, Java, JavaScript, and TypeScript code execution + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    Write code in + + + +
    + +
    +
    + + + +

    + Create test cases +

    + +
    + +
    + + +
    +
    + + + + + diff --git a/v3/opt-v3-cs61a-embed-small.png b/v3/opt-v3-cs61a-embed-small.png new file mode 100644 index 000000000..b60f3b042 Binary files /dev/null and b/v3/opt-v3-cs61a-embed-small.png differ diff --git a/v3/opt-v3-cs61a-embed.png b/v3/opt-v3-cs61a-embed.png new file mode 100644 index 000000000..c0ffcbd54 Binary files /dev/null and b/v3/opt-v3-cs61a-embed.png differ diff --git a/v3/opt_togetherjs/Makefile b/v3/opt_togetherjs/Makefile new file mode 100644 index 000000000..7fbd607ad --- /dev/null +++ b/v3/opt_togetherjs/Makefile @@ -0,0 +1,7 @@ +# --host 0.0.0.0 is required to make the server PUBLIC-FACING! + +all: + jshint server.js && node server.js --host 0.0.0.0 --port 30035 + +prod: + jshint server.js && forever -l togetherjs_server.log server.js --host 0.0.0.0 --port 30035 diff --git a/v3/opt_togetherjs/README.txt b/v3/opt_togetherjs/README.txt new file mode 100644 index 000000000..a67db9cc0 --- /dev/null +++ b/v3/opt_togetherjs/README.txt @@ -0,0 +1,6 @@ +server.js is forked from TogetherJS togetherjs/hub/server.js on +2014-05-08 and augmented with extra logging and an admin interface + +To run both locally and online, use: + +node server.js --host 0.0.0.0 --port 30035 diff --git a/v3/opt_togetherjs/server.js b/v3/opt_togetherjs/server.js new file mode 100644 index 000000000..5a6a8d77d --- /dev/null +++ b/v3/opt_togetherjs/server.js @@ -0,0 +1,520 @@ +// 2014-05-08 Philip Guo forked this code from TogetherJS +// togetherjs/hub/server.js and started making modifications marked by +// 'pgbovine' in comments + +// Try to run with the following options to (hopefully!) prevent it from +// mysteriously crashing and failing to restart (use --spinSleepTime to +// wait a bit longer before attempting to restart it upon a crash) +// +// forever -a -l togetherjs.log --spinSleepTime 30000 -o togetherjs.out -e togetherjs.err start /home/pgbovine/OnlinePythonTutor/v3/opt_togetherjs/server.js --host 0.0.0.0 --port 30035 + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// New Relic Server monitoring support +if ( process.env.NEW_RELIC_HOME ) { + require("newrelic"); +} + +var SAMPLE_STATS_INTERVAL = 60*1000; // 1 minute +var SAMPLE_LOAD_INTERVAL = 5*60*1000; // 5 minutes +var EMPTY_ROOM_LOG_TIMEOUT = 3*60*1000; // 3 minutes + +var WebSocketServer = require('websocket').server; +var WebSocketRouter = require('websocket').router; +var http = require('http'); +var parseUrl = require('url').parse; +var fs = require('fs'); + +// FIXME: not sure what logger to use +//var logger = require('../../lib/logger'); + +// LOG_LEVEL values: +// 0: show everything (including debug) +// 1: don't show debug, do show logger.log +// 2: don't show logger.log and debug, do show logger.info (and STATS) +// 3: don't show info, do show warn +// 4: don't show warn, do show error +// 5: don't show anything +// Stats are at level 2 + +var thisSource = "// What follows is the source for the server.\n" + + "// Obviously we can't prove this is the actual source, but if it isn't then we're \n" + + "// a bunch of lying liars, so at least you have us on record.\n\n" + + fs.readFileSync(__filename); + +var Logger = function (level, filename, stdout) { + this.level = level; + this.filename = filename; + this.stdout = !!stdout; + this._open(); + process.on("SIGUSR2", (function () { + this._open(); + }).bind(this)); +}; + +Logger.prototype = { + + write: function () { + if (this.stdout) { + console.log.apply(console, arguments); + } + if (this.file) { + var s = []; + for (var i=0; i EMPTY_ROOM_LOG_TIMEOUT) { + logStats(id, connectionStats[id]); + delete connectionStats[id]; + continue; + } + var totalClients = countClients(connectionStats[id].clients); + var connections = 0; + if (allConnections[id]) { + connections = allConnections[id].length; + } + connectionStats[id].sample.push({ + time: Date.now(), + totalClients: totalClients, + connections: connections + }); + } +}, SAMPLE_STATS_INTERVAL); + +setInterval(function () { + var load = getLoad(); + load.time = Date.now(); + logger.info("LOAD", JSON.stringify(load)); +}, SAMPLE_LOAD_INTERVAL); + +function getLoad() { + var sessions = 0; + var connections = 0; + var empty = 0; + var solo = 0; + for (var id in allConnections) { + if (allConnections[id].length) { + sessions++; + connections += allConnections[id].length; + if (allConnections[id].length == 1) { + solo++; + } + } else { + empty++; + } + } + return { + sessions: sessions, + connections: connections, + empty: empty, + solo: solo + }; +} + +function countClients(clients) { + var n = 0; + for (var clientId in clients) { + n++; + } + return n; +} + +function logStats(id, stats) { + logger.info("STATS", JSON.stringify({ + id: id, + created: stats.created, + sample: stats.sample, + totalClients: countClients(stats.clients), + totalMessageChars: stats.totalMessageChars, + totalMessages: stats.totalMessages, + domain: stats.firstDomain || null, + domainCount: countClients(stats.domains), + urls: countClients(stats.urls) + })); +} + +if (require.main == module) { + var ops = require('optimist') + .usage("Usage: $0 [--port 8080] [--host=localhost] [--log=filename] [--log-level=N]") + .describe("port", "The port to server on (default $HUB_SERVER_PORT, $PORT, $VCAP_APP_PORT, or 8080") + .describe("host", "The interface to serve on (default $HUB_SERVER_HOST, $HOST, $VCAP_APP_HOST, 127.0.0.1). Use 0.0.0.0 to make it public") + .describe("log-level", "The level of logging to do, from 0 (very verbose) to 5 (nothing) (default $LOG_LEVEL or 0)") + .describe("log", "A file to log to (default stdout)") + .describe("stdout", "Log to both stdout and the log file"); + var port = ops.argv.port || process.env.HUB_SERVER_PORT || process.env.VCAP_APP_PORT || + process.env.PORT || 8080; + var host = ops.argv.host || process.env.HUB_SERVER_HOST || process.env.VCAP_APP_HOST || + process.env.HOST || '127.0.0.1'; + var logLevel = 5; // pgbovine -- set default to no logging for simplicity + var stdout = ops.argv.stdout || !ops.argv.log; + if (ops.argv['log-level']) { + logLevel = parseInt(ops.argv['log-level'], 10); + } + logger = new Logger(logLevel, ops.argv.log, stdout); + if (ops.argv.h || ops.argv.help) { + console.log(ops.help()); + process.exit(); + } else { + startServer(port, host); + } +} + +exports.startServer = startServer; + + +// pgbovine - logging infrastructure + +function createLogEntry(req, event_type) { + obj = {}; + + // Webfaction forwards IP addresses via proxy, so use this ... + // http://stackoverflow.com/questions/8107856/how-can-i-get-the-users-ip-address-using-node-js + var ip = req.remoteAddress /* check this FIRST since it's for WebSockets */ || + req.headers['x-forwarded-for'] || + req.connection.remoteAddress || + req.socket.remoteAddress || + req.connection.socket.remoteAddress; + + obj.ip = ip; + obj.date = (new Date()).toISOString(); + if (event_type) { + obj.type = event_type; + } + + return obj; +} + + +// pgbovine - TogetherJS administrator hub + +var pgLogFile = null; + +var MAX_LOG_SIZE = 10000; +var curLogSize = 0; + +function pgLogWrite(logObj) { + var s = JSON.stringify(logObj); + //console.log(s); // debug + + // rotate log every MAX_LOG_SIZE entries + if (!pgLogFile || curLogSize >= MAX_LOG_SIZE) { + if (pgLogFile) { + pgLogFile.end(); + } + var filename = 'log_' + logObj.date + '.json'; + var pathname = require('path').resolve(__dirname, filename); + pgLogFile = fs.createWriteStream(pathname, + {flags: 'w', + mode: parseInt('644', 8), + encoding: "UTF-8"}); + curLogSize = 0; + } + + // I think this write is buffered in memory, so it's safe to do + // multiple "concurrent" writes since it will all be buffered + // http://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback + pgLogFile.write(s + '\n'); + curLogSize++; +} + +// end pgbovine diff --git a/v3/pg_encoder.py b/v3/pg_encoder.py new file mode 100644 index 000000000..7cf0c8ed7 --- /dev/null +++ b/v3/pg_encoder.py @@ -0,0 +1,377 @@ +# Online Python Tutor +# https://github.com/pgbovine/OnlinePythonTutor/ +# +# Copyright (C) Philip J. Guo (philip@pgbovine.net) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# Thanks to John DeNero for making the encoder work on both Python 2 and 3 + + +# Given an arbitrary piece of Python data, encode it in such a manner +# that it can be later encoded into JSON. +# http://json.org/ +# +# We use this function to encode run-time traces of data structures +# to send to the front-end. +# +# Format: +# Primitives: +# * None, int, long, float, str, bool - unchanged +# (json.dumps encodes these fine verbatim, except for inf, -inf, and nan) +# +# exceptions: float('inf') -> ['SPECIAL_FLOAT', 'Infinity'] +# float('-inf') -> ['SPECIAL_FLOAT', '-Infinity'] +# float('nan') -> ['SPECIAL_FLOAT', 'NaN'] +# x == int(x) -> ['SPECIAL_FLOAT', '%.1f' % x] +# (this way, 3.0 prints as '3.0' and not as 3, which looks like an int) +# +# If render_heap_primitives is True, then primitive values are rendered +# on the heap as ['HEAP_PRIMITIVE', , ] +# +# (for SPECIAL_FLOAT values, is a list like ['SPECIAL_FLOAT', 'Infinity']) +# +# Compound objects: +# * list - ['LIST', elt1, elt2, elt3, ..., eltN] +# * tuple - ['TUPLE', elt1, elt2, elt3, ..., eltN] +# * set - ['SET', elt1, elt2, elt3, ..., eltN] +# * dict - ['DICT', [key1, value1], [key2, value2], ..., [keyN, valueN]] +# * instance - ['INSTANCE', class name, [attr1, value1], [attr2, value2], ..., [attrN, valueN]] +# * instance with __str__ defined - ['INSTANCE_PPRINT', class name, <__str__ value>] +# * class - ['CLASS', class name, [list of superclass names], [attr1, value1], [attr2, value2], ..., [attrN, valueN]] +# * function - ['FUNCTION', function name, parent frame ID (for nested functions)] +# * module - ['module', module name] +# * other - [, string representation of object] +# * compound object reference - ['REF', target object's unique_id] +# +# the unique_id is derived from id(), which allows us to capture aliasing + + +# number of significant digits for floats +FLOAT_PRECISION = 4 + + +from collections import defaultdict +import re, types +import sys +import math +typeRE = re.compile("") +classRE = re.compile("") + +import inspect + +# TODO: maybe use the 'six' library to smooth over Py2 and Py3 incompatibilities? +is_python3 = (sys.version_info[0] == 3) +if is_python3: + # avoid name errors (GROSS!) + long = int + unicode = str + + +def is_class(dat): + """Return whether dat is a class.""" + if is_python3: + return isinstance(dat, type) + else: + return type(dat) in (types.ClassType, types.TypeType) + + +def is_instance(dat): + """Return whether dat is an instance of a class.""" + if is_python3: + return type(dat) not in PRIMITIVE_TYPES and \ + isinstance(type(dat), type) and \ + not isinstance(dat, type) + else: + # ugh, classRE match is a bit of a hack :( + return type(dat) == types.InstanceType or classRE.match(str(type(dat))) + + +def get_name(obj): + """Return the name of an object.""" + return obj.__name__ if hasattr(obj, '__name__') else get_name(type(obj)) + + +PRIMITIVE_TYPES = (int, long, float, str, unicode, bool, type(None)) + +def encode_primitive(dat): + t = type(dat) + if t is float: + if math.isinf(dat): + if dat > 0: + return ['SPECIAL_FLOAT', 'Infinity'] + else: + return ['SPECIAL_FLOAT', '-Infinity'] + elif math.isnan(dat): + return ['SPECIAL_FLOAT', 'NaN'] + else: + # render floats like 3.0 as '3.0' and not as 3 + if dat == int(dat): + return ['SPECIAL_FLOAT', '%.1f' % dat] + else: + return round(dat, FLOAT_PRECISION) + elif t is str and (not is_python3): + # hack only for Python 2 strings ... always turn into unicode + # and display '?' when it's not valid unicode + return dat.decode('utf-8', 'replace') + else: + # return all other primitives verbatim + return dat + + +# grab a line number like ' ' or ' ' +def create_lambda_line_number(codeobj, line_to_lambda_code): + try: + lambda_lineno = codeobj.co_firstlineno + lst = line_to_lambda_code[lambda_lineno] + ind = lst.index(codeobj) + # add a suffix for all subsequent lambdas on a line beyond the first + # (nix this for now because order isn't guaranteed when you have + # multiple lambdas on the same line) + ''' + if ind > 0: + lineno_str = str(lambda_lineno) + chr(ord('a') + ind) + else: + lineno_str = str(lambda_lineno) + ''' + lineno_str = str(lambda_lineno) + return ' ' + except: + return '' + + +# Note that this might BLOAT MEMORY CONSUMPTION since we're holding on +# to every reference ever created by the program without ever releasing +# anything! +class ObjectEncoder: + def __init__(self, render_heap_primitives): + # Key: canonicalized small ID + # Value: encoded (compound) heap object + self.encoded_heap_objects = {} + + self.render_heap_primitives = render_heap_primitives + + self.id_to_small_IDs = {} + self.cur_small_ID = 1 + + # wow, creating unique identifiers for lambdas is quite annoying, + # especially if we want to properly differentiate: + # 1.) multiple lambdas defined on the same line, and + # 2.) the same lambda code defined multiple times on different lines + # + # However, it gets confused when there are multiple identical + # lambdas on the same line, like: + # f(lambda x:x*x, lambda y:y*y, lambda x:x*x) + + # (assumes everything is in one file) + # Key: line number + # Value: list of the code objects of lambdas defined + # on that line in the order they were defined + self.line_to_lambda_code = defaultdict(list) + + + def get_heap(self): + return self.encoded_heap_objects + + + def reset_heap(self): + # VERY IMPORTANT to reassign to an empty dict rather than just + # clearing the existing dict, since get_heap() could have been + # called earlier to return a reference to a previous heap state + self.encoded_heap_objects = {} + + def set_function_parent_frame_ID(self, ref_obj, enclosing_frame_id): + assert ref_obj[0] == 'REF' + func_obj = self.encoded_heap_objects[ref_obj[1]] + assert func_obj[0] == 'FUNCTION' + func_obj[-1] = enclosing_frame_id + + + # return either a primitive object or an object reference; + # and as a side effect, update encoded_heap_objects + def encode(self, dat, get_parent): + """Encode a data value DAT using the GET_PARENT function for parent ids.""" + # primitive type + if not self.render_heap_primitives and type(dat) in PRIMITIVE_TYPES: + return encode_primitive(dat) + # compound type - return an object reference and update encoded_heap_objects + else: + my_id = id(dat) + + try: + my_small_id = self.id_to_small_IDs[my_id] + except KeyError: + my_small_id = self.cur_small_ID + self.id_to_small_IDs[my_id] = self.cur_small_ID + self.cur_small_ID += 1 + + del my_id # to prevent bugs later in this function + + ret = ['REF', my_small_id] + + # punt early if you've already encoded this object + if my_small_id in self.encoded_heap_objects: + return ret + + + # major side-effect! + new_obj = [] + self.encoded_heap_objects[my_small_id] = new_obj + + typ = type(dat) + + if typ == list: + new_obj.append('LIST') + for e in dat: + new_obj.append(self.encode(e, get_parent)) + elif typ == tuple: + new_obj.append('TUPLE') + for e in dat: + new_obj.append(self.encode(e, get_parent)) + elif typ == set: + new_obj.append('SET') + for e in dat: + new_obj.append(self.encode(e, get_parent)) + elif typ == dict: + new_obj.append('DICT') + for (k, v) in dat.items(): + # don't display some built-in locals ... + if k not in ('__module__', '__return__', '__locals__'): + new_obj.append([self.encode(k, get_parent), self.encode(v, get_parent)]) + elif typ in (types.FunctionType, types.MethodType): + if is_python3: + argspec = inspect.getfullargspec(dat) + else: + argspec = inspect.getargspec(dat) + + printed_args = [e for e in argspec.args] + if argspec.varargs: + printed_args.append('*' + argspec.varargs) + + if is_python3: + if argspec.varkw: + printed_args.append('**' + argspec.varkw) + if argspec.kwonlyargs: + printed_args.extend(argspec.kwonlyargs) + else: + if argspec.keywords: + printed_args.append('**' + argspec.keywords) + + func_name = get_name(dat) + + pretty_name = func_name + + # sometimes might fail for, say, , so just ignore + # failures for now ... + try: + pretty_name += '(' + ', '.join(printed_args) + ')' + except TypeError: + pass + + # put a line number suffix on lambdas to more uniquely identify + # them, since they don't have names + if func_name == '': + cod = (dat.__code__ if is_python3 else dat.func_code) # ugh! + lst = self.line_to_lambda_code[cod.co_firstlineno] + if cod not in lst: + lst.append(cod) + pretty_name += create_lambda_line_number(cod, + self.line_to_lambda_code) + + encoded_val = ['FUNCTION', pretty_name, None] + if get_parent: + enclosing_frame_id = get_parent(dat) + encoded_val[2] = enclosing_frame_id + new_obj.extend(encoded_val) + elif typ is types.BuiltinFunctionType: + pretty_name = get_name(dat) + '(...)' + new_obj.extend(['FUNCTION', pretty_name, None]) + elif is_class(dat) or is_instance(dat): + self.encode_class_or_instance(dat, new_obj) + elif typ is types.ModuleType: + new_obj.extend(['module', dat.__name__]) + elif typ in PRIMITIVE_TYPES: + assert self.render_heap_primitives + new_obj.extend(['HEAP_PRIMITIVE', type(dat).__name__, encode_primitive(dat)]) + else: + typeStr = str(typ) + m = typeRE.match(typeStr) + + if not m: + m = classRE.match(typeStr) + + assert m, typ + + if is_python3: + encoded_dat = str(dat) + else: + # ugh, for bytearray() in Python 2, str() returns + # non-JSON-serializable characters, so need to decode: + encoded_dat = str(dat).decode('utf-8', 'replace') + new_obj.extend([m.group(1), encoded_dat]) + + return ret + + + def encode_class_or_instance(self, dat, new_obj): + """Encode dat as a class or instance.""" + if is_instance(dat): + if hasattr(dat, '__class__'): + # common case ... + class_name = get_name(dat.__class__) + else: + # super special case for something like + # "from datetime import datetime_CAPI" in Python 3.2, + # which is some weird 'PyCapsule' type ... + # http://docs.python.org/release/3.1.5/c-api/capsule.html + class_name = get_name(type(dat)) + + if hasattr(dat, '__str__') and \ + (not dat.__class__.__str__ is object.__str__): # make sure it's not the lame default __str__ + # N.B.: when objects are being constructed, this call + # might fail since not all fields have yet been populated + try: + pprint_str = str(dat) + except: + pprint_str = '' + + new_obj.extend(['INSTANCE_PPRINT', class_name, pprint_str]) + return # bail early + else: + new_obj.extend(['INSTANCE', class_name]) + # don't traverse inside modules, or else risk EXPLODING the visualization + if class_name == 'module': + return + else: + superclass_names = [e.__name__ for e in dat.__bases__ if e is not object] + new_obj.extend(['CLASS', get_name(dat), superclass_names]) + + # traverse inside of its __dict__ to grab attributes + # (filter out useless-seeming ones, based on anecdotal observation): + hidden = ('__doc__', '__module__', '__return__', '__dict__', + '__locals__', '__weakref__', '__qualname__') + if hasattr(dat, '__dict__'): + user_attrs = sorted([e for e in dat.__dict__ if e not in hidden]) + else: + user_attrs = [] + + for attr in user_attrs: + new_obj.append([self.encode(attr, None), self.encode(dat.__dict__[attr], None)]) + diff --git a/v3/pg_logger.py b/v3/pg_logger.py new file mode 100644 index 000000000..359aedb4e --- /dev/null +++ b/v3/pg_logger.py @@ -0,0 +1,1441 @@ +# Online Python Tutor +# https://github.com/pgbovine/OnlinePythonTutor/ +# +# Copyright (C) Philip J. Guo (philip@pgbovine.net) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +# This is the meat of the Online Python Tutor back-end. It implements a +# full logger for Python program execution (based on pdb, the standard +# Python debugger imported via the bdb module), printing out the values +# of all in-scope data structures after each executed instruction. + + + +import sys +import bdb # the KEY import here! +import re +import traceback +import types + +# TODO: use the 'six' package to smooth out Py2 and Py3 differences +is_python3 = (sys.version_info[0] == 3) + +# NB: don't use cStringIO since it doesn't support unicode!!! +if is_python3: + import io as StringIO + import io # expose regular io for Python3 users too +else: + import StringIO +import pg_encoder + + +# TODO: not threadsafe: + +# upper-bound on the number of executed lines, in order to guard against +# infinite loops +MAX_EXECUTED_LINES = 300 + +#DEBUG = False +DEBUG = True + +BREAKPOINT_STR = '#break' + +CLASS_RE = re.compile('class\s+') + + +# simple sandboxing scheme: +# +# - use resource.setrlimit to deprive this process of ANY file descriptors +# (which will cause file read/write and subprocess shell launches to fail) +# - restrict user builtins and module imports +# (beware that this is NOT foolproof at all ... there are known flaws!) +# +# ALWAYS use defense-in-depth and don't just rely on these simple mechanisms +try: + import resource + resource_module_loaded = True +except ImportError: + # Google App Engine doesn't seem to have the 'resource' module + resource_module_loaded = False + + +# From http://coreygoldberg.blogspot.com/2009/05/python-redirect-or-turn-off-stdout-and.html +class NullDevice(): + def write(self, s): + pass + + +# These could lead to XSS or other code injection attacks, so be careful: +__html__ = None +def setHTML(htmlStr): + global __html__ + __html__ = htmlStr + +__css__ = None +def setCSS(cssStr): + global __css__ + __css__ = cssStr + +__js__ = None +def setJS(jsStr): + global __js__ + __js__ = jsStr + + +# ugh, I can't figure out why in Python 2, __builtins__ seems to +# be a dict, but in Python 3, __builtins__ seems to be a module, +# so just handle both cases ... UGLY! +if type(__builtins__) is dict: + BUILTIN_IMPORT = __builtins__['__import__'] +else: + assert type(__builtins__) is types.ModuleType + BUILTIN_IMPORT = __builtins__.__import__ + + +# whitelist of module imports +ALLOWED_STDLIB_MODULE_IMPORTS = ('math', 'random', 'datetime', + 'functools', 'itertools', 'operator', 'string', + 'collections', 're', 'json', + 'heapq', 'bisect') + +# allow users to import but don't explicitly import it since it's +# already been done above +OTHER_STDLIB_WHITELIST = ('StringIO', 'io') + +# whitelist of custom modules to import into OPT +# (TODO: support modules in a subdirectory, but there are various +# logistical problems with doing so that I can't overcome at the moment, +# especially getting setHTML, setCSS, and setJS to work in the imported +# modules.) +CUSTOM_MODULE_IMPORTS = ('callback_module', + 'ttt_module', + 'html_module', + 'htmlexample_module', +# ignore these troublesome imports for now +# 'watch_module', # 'import sys' might be troublesome +# 'bintree_module', +# 'GChartWrapper', + 'matrix', + 'htmlFrame') + + +# PREEMPTIVELY import all of these modules, so that when the user's +# script imports them, it won't try to do a file read (since they've +# already been imported and cached in memory). Remember that when +# the user's code runs, resource.setrlimit(resource.RLIMIT_NOFILE, (0, 0)) +# will already be in effect, so no more files can be opened. +# +# NB: All modules in CUSTOM_MODULE_IMPORTS will be imported, warts and +# all, so they better work on Python 2 and 3! +for m in ALLOWED_STDLIB_MODULE_IMPORTS + CUSTOM_MODULE_IMPORTS: + __import__(m) + + +# Restrict imports to a whitelist +def __restricted_import__(*args): + # filter args to ONLY take in real strings so that someone can't + # subclass str and bypass the 'in' test on the next line + args = [e for e in args if type(e) is str] + + if args[0] in ALLOWED_STDLIB_MODULE_IMPORTS + CUSTOM_MODULE_IMPORTS + OTHER_STDLIB_WHITELIST: + imported_mod = BUILTIN_IMPORT(*args) + + if args[0] in CUSTOM_MODULE_IMPORTS: + # add special magical functions to custom imported modules + setattr(imported_mod, 'setHTML', setHTML) + setattr(imported_mod, 'setCSS', setCSS) + setattr(imported_mod, 'setJS', setJS) + + # somewhat weak protection against imported modules that contain one + # of these troublesome builtins. again, NOTHING is foolproof ... + # just more defense in depth :) + for mod in ('os', 'sys', 'posix', 'gc'): + if hasattr(imported_mod, mod): + delattr(imported_mod, mod) + + return imported_mod + else: + raise ImportError('{0} not supported'.format(args[0])) + + +# Support interactive user input by: +# +# 1. running the entire program up to a call to raw_input (or input in py3), +# 2. bailing and returning a trace ending in a special 'raw_input' event, +# 3. letting the web frontend issue a prompt to the user to grab a string, +# 4. RE-RUNNING the whole program with that string added to input_string_queue, +# 5. which should bring execution to the next raw_input call (if +# available), or to termination. +# Repeat until no more raw_input calls are encountered. +# Note that this is mad inefficient, but is simple to implement! + +# VERY IMPORTANT -- set random seed to 0 to ensure deterministic execution: +import random +random.seed(0) + +# queue of input strings passed from either raw_input or mouse_input +input_string_queue = [] + + +def open_wrapper(*args): + if is_python3: + raise Exception('''open() is not supported. +Instead use io.StringIO() to simulate a file. +Here is an example: http://goo.gl/uNvBGl''') + else: + raise Exception('''open() is not supported. +Instead use StringIO.StringIO() to simulate a file. +Here is an example: http://goo.gl/Q9xQ4p''') + + +class RawInputException(Exception): + pass + +def raw_input_wrapper(prompt=''): + if input_string_queue: + input_str = input_string_queue.pop(0) + + # write the prompt and user input to stdout, to emulate what happens + # at the terminal + sys.stdout.write(str(prompt)) # always convert prompt into a string + sys.stdout.write(input_str + "\n") # newline to simulate the user hitting Enter + return input_str + raise RawInputException(str(prompt)) # always convert prompt into a string + +class MouseInputException(Exception): + pass + +def mouse_input_wrapper(prompt=''): + if input_string_queue: + return input_string_queue.pop(0) + raise MouseInputException(prompt) + + + +# blacklist of builtins +BANNED_BUILTINS = ['reload', 'open', 'compile', + 'file', 'eval', 'exec', 'execfile', + 'exit', 'quit', 'help', + 'dir', 'globals', 'locals', 'vars'] +# Peter says 'apply' isn't dangerous, so don't ban it + +# ban input() in Python 2 since it does an eval! +# (Python 3 input is Python 2 raw_input, so we're okay) +if not is_python3: + BANNED_BUILTINS.append('input') + + +IGNORE_VARS = set(('__user_stdout__', '__OPT_toplevel__', '__builtins__', '__name__', '__exception__', '__doc__', '__package__')) + +def get_user_stdout(frame): + my_user_stdout = frame.f_globals['__user_stdout__'] + + # This is SUPER KRAZY! In Python 2, the buflist inside of a StringIO + # instance can be made up of both str and unicode, so we need to convert + # the str to unicode and replace invalid characters with the Unicode '?' + # But leave unicode elements alone. This way, EVERYTHING inside buflist + # will be unicode. (Note that in Python 3, everything is already unicode, + # so we're fine.) + if not is_python3: + my_user_stdout.buflist = [(e.decode('utf-8', 'replace') + if type(e) is str + else e) + for e in my_user_stdout.buflist] + return my_user_stdout.getvalue() + + +''' +2013-12-26 + +Okay, what's with this f_valuestack business? + +If you compile your own CPython and patch Objects/frameobject.c to add a +Python accessor for f_valuestack, then you can actually access the value +stack, which is useful for, say, grabbbing the objects within +list/set/dict comprehensions as they're being built. e.g., try: + + z = [x*y for x in range(5) for y in range(5)] + +Note that on pythontutor.com, I am currently running custom-compiled +versions of Python-2.7.6 and Python-3.3.3 with this f_valuestack hack. +Unless you run your own custom CPython, you won't get these benefits. + + +Patch: + + static PyObject * + frame_getlineno(PyFrameObject *f, void *closure) + { + return PyLong_FromLong(PyFrame_GetLineNumber(f)); + } + ++// copied from Py2crazy, which was for Python 2, but let's hope this still works! ++static PyObject * ++frame_getvaluestack(PyFrameObject* f) { ++ // pgbovine - TODO: will this memory leak? hopefully not, ++ // since all other accessors seem to follow the same idiom ++ PyObject* lst = PyList_New(0); ++ if (f->f_stacktop != NULL) { ++ PyObject** p = NULL; ++ for (p = f->f_valuestack; p < f->f_stacktop; p++) { ++ PyList_Append(lst, *p); ++ } ++ } ++ ++ return lst; ++} ++ + /* Setter for f_lineno - you can set f_lineno from within a trace function in + * order to jump to a given line of code, subject to some restrictions. Most + * lines are OK to jump to because they don't make any assumptions about the +@@ -368,6 +384,11 @@ + + static PyGetSetDef frame_getsetlist[] = { + {"f_locals", (getter)frame_getlocals, NULL, NULL}, + {"f_lineno", (getter)frame_getlineno, + (setter)frame_setlineno, NULL}, + {"f_trace", (getter)frame_gettrace, (setter)frame_settrace, NULL}, ++ ++ // pgbovine ++ {"f_valuestack",(getter)frame_getvaluestack, ++ (setter)NULL /* don't let it be set */, NULL}, ++ + {0} + }; +''' + +# at_global_scope should be true only if 'frame' represents the global scope +def get_user_globals(frame, at_global_scope=False): + d = filter_var_dict(frame.f_globals) + + # don't blurt out all of f_valuestack for now ... + ''' + if at_global_scope and hasattr(frame, 'f_valuestack'): + for (i, e) in enumerate(frame.f_valuestack): + d['_tmp' + str(i+1)] = e + ''' + + # print out list objects being built up in Python 2.x list comprehensions + # (which don't have its own special frame, sadly) + if not is_python3 and hasattr(frame, 'f_valuestack'): + for (i, e) in enumerate([e for e in frame.f_valuestack if type(e) is list]): + d['_tmp' + str(i+1)] = e + + # also filter out __return__ for globals only, but NOT for locals + if '__return__' in d: + del d['__return__'] + return d + +def get_user_locals(frame): + ret = filter_var_dict(frame.f_locals) + # don't blurt out all of f_valuestack for now ... + ''' + if hasattr(frame, 'f_valuestack'): + for (i, e) in enumerate(frame.f_valuestack): + ret['_tmp' + str(i+1)] = e + ''' + + # special printing of list/set/dict comprehension objects as they are + # being built up incrementally ... + f_name = frame.f_code.co_name + if hasattr(frame, 'f_valuestack'): + # print out list objects being built up in Python 2.x list comprehensions + # (which don't have its own special frame, sadly) + if not is_python3: + for (i, e) in enumerate([e for e in frame.f_valuestack + if type(e) is list]): + ret['_tmp' + str(i+1)] = e + + # for dict and set comprehensions, which have their own frames: + if f_name.endswith('comp>'): + for (i, e) in enumerate([e for e in frame.f_valuestack + if type(e) in (list, set, dict)]): + ret['_tmp' + str(i+1)] = e + + return ret + +def filter_var_dict(d): + ret = {} + for (k,v) in d.items(): + if k not in IGNORE_VARS: + ret[k] = v + return ret + + +# yield all function objects locally-reachable from frame, +# making sure to traverse inside all compound objects ... +def visit_all_locally_reachable_function_objs(frame): + for (k, v) in get_user_locals(frame).items(): + for e in visit_function_obj(v, set()): + if e: # only non-null if it's a function object + assert type(e) in (types.FunctionType, types.MethodType) + yield e + + +# TODO: this might be slow if we're traversing inside lots of objects: +def visit_function_obj(v, ids_seen_set): + v_id = id(v) + + # to prevent infinite loop + if v_id in ids_seen_set: + yield None + else: + ids_seen_set.add(v_id) + + typ = type(v) + + # simple base case + if typ in (types.FunctionType, types.MethodType): + yield v + + # recursive cases + elif typ in (list, tuple, set): + for child in v: + for child_res in visit_function_obj(child, ids_seen_set): + yield child_res + + elif typ == dict or pg_encoder.is_class(v) or pg_encoder.is_instance(v): + contents_dict = None + + if typ == dict: + contents_dict = v + # warning: some classes or instances don't have __dict__ attributes + elif hasattr(v, '__dict__'): + contents_dict = v.__dict__ + + if contents_dict: + for (key_child, val_child) in contents_dict.items(): + for key_child_res in visit_function_obj(key_child, ids_seen_set): + yield key_child_res + for val_child_res in visit_function_obj(val_child, ids_seen_set): + yield val_child_res + + # degenerate base case + yield None + + +class PGLogger(bdb.Bdb): + + def __init__(self, cumulative_mode, heap_primitives, show_only_outputs, finalizer_func, + disable_security_checks=False, crazy_mode=False): + bdb.Bdb.__init__(self) + self.mainpyfile = '' + self._wait_for_mainpyfile = 0 + + self.disable_security_checks = disable_security_checks + + # if True, then displays ALL stack frames that have ever existed + # rather than only those currently on the stack (and their + # lexical parents) + self.cumulative_mode = cumulative_mode + + # if True, then render certain primitive objects as heap objects + self.render_heap_primitives = heap_primitives + + # if True, then don't render any data structures in the trace, + # and show only outputs + self.show_only_outputs = show_only_outputs + + # Run using the custom Py2crazy Python interpreter + self.crazy_mode = crazy_mode + + # a function that takes the output trace as a parameter and + # processes it + self.finalizer_func = finalizer_func + + # each entry contains a dict with the information for a single + # executed line + self.trace = [] + + # if this is true, don't put any more stuff into self.trace + self.done = False + + # if this is non-null, don't do any more tracing until a + # 'return' instruction with a stack gotten from + # get_stack_code_IDs() that matches wait_for_return_stack + self.wait_for_return_stack = None + + #http://stackoverflow.com/questions/2112396/in-python-in-google-app-engine-how-do-you-capture-output-produced-by-the-print + self.GAE_STDOUT = sys.stdout + + # Key: function object + # Value: parent frame + self.closures = {} + + # set of function objects that were defined in the global scope + self.globally_defined_funcs = set() + + # Key: frame object + # Value: monotonically increasing small ID, based on call order + self.frame_ordered_ids = {} + self.cur_frame_id = 1 + + # List of frames to KEEP AROUND after the function exits. + # If cumulative_mode is True, then keep ALL frames in + # zombie_frames; otherwise keep only frames where + # nested functions were defined within them. + self.zombie_frames = [] + + # set of elements within zombie_frames that are also + # LEXICAL PARENTS of other frames + self.parent_frames_set = set() + + # all globals that ever appeared in the program, in the order in + # which they appeared. note that this might be a superset of all + # the globals that exist at any particular execution point, + # since globals might have been deleted (using, say, 'del') + self.all_globals_in_order = [] + + # very important for this single object to persist throughout + # execution, or else canonical small IDs won't be consistent. + self.encoder = pg_encoder.ObjectEncoder(self.render_heap_primitives) + + self.executed_script = None # Python script to be executed! + + # if there is at least one line that ends with BREAKPOINT_STR, + # then activate "breakpoint mode", where execution should stop + # ONLY at breakpoint lines. + self.breakpoints = [] + + self.prev_lineno = -1 # keep track of previous line just executed + + + def get_frame_id(self, cur_frame): + return self.frame_ordered_ids[cur_frame] + + # Returns the (lexical) parent of a function value. + def get_parent_of_function(self, val): + if val not in self.closures: + return None + return self.get_frame_id(self.closures[val]) + + + # Returns the (lexical) parent frame of the function that was called + # to create the stack frame 'frame'. + # + # OKAY, this is a SUPER hack, but I don't see a way around it + # since it's impossible to tell exactly which function + # ('closure') object was called to create 'frame'. + # + # The Python interpreter doesn't maintain this information, + # so unless we hack the interpreter, we will simply have + # to make an educated guess based on the contents of local + # variables inherited from possible parent frame candidates. + def get_parent_frame(self, frame): + for (func_obj, parent_frame) in self.closures.items(): + # ok, there's a possible match, but let's compare the + # local variables in parent_frame to those of frame + # to make sure. this is a hack that happens to work because in + # Python, each stack frame inherits ('inlines') a copy of the + # variables from its (lexical) parent frame. + if func_obj.__code__ == frame.f_code: + all_matched = True + for k in frame.f_locals: + # Do not try to match local names + if k in frame.f_code.co_varnames: + continue + if k != '__return__' and k in parent_frame.f_locals: + if parent_frame.f_locals[k] != frame.f_locals[k]: + all_matched = False + break + + if all_matched: + return parent_frame + + return None + + + def lookup_zombie_frame_by_id(self, frame_id): + # TODO: kinda inefficient + for e in self.zombie_frames: + if self.get_frame_id(e) == frame_id: + return e + assert False # should never get here + + + # unused ... + #def reset(self): + # bdb.Bdb.reset(self) + # self.forget() + + + def forget(self): + self.lineno = None + self.stack = [] + self.curindex = 0 + self.curframe = None + + def setup(self, f, t): + self.forget() + self.stack, self.curindex = self.get_stack(f, t) + self.curframe = self.stack[self.curindex][0] + + # should be a reasonably unique ID to match calls and returns: + def get_stack_code_IDs(self): + return [id(e[0].f_code) for e in self.stack] + + + # Override Bdb methods + + def user_call(self, frame, argument_list): + """This method is called when there is the remote possibility + that we ever need to stop in this function.""" + # TODO: figure out a way to move this down to 'def interaction' + # or right before self.trace.append ... + if self.done: return + + if self._wait_for_mainpyfile: + return + if self.stop_here(frame): + # delete __return__ so that on subsequent calls to + # a generator function, the OLD yielded (returned) + # value gets deleted from the frame ... + try: + del frame.f_locals['__return__'] + except KeyError: + pass + + self.interaction(frame, None, 'call') + + def user_line(self, frame): + """This function is called when we stop or break at this line.""" + if self.done: return + + if self._wait_for_mainpyfile: + if (self.canonic(frame.f_code.co_filename) != "" or + frame.f_lineno <= 0): + return + self._wait_for_mainpyfile = 0 + self.interaction(frame, None, 'step_line') + + def user_return(self, frame, return_value): + """This function is called when a return trap is set here.""" + if self.done: return + + frame.f_locals['__return__'] = return_value + self.interaction(frame, None, 'return') + + def user_exception(self, frame, exc_info): + """This function is called if an exception occurs, + but only if we are to stop at or just below this level.""" + if self.done: return + + exc_type, exc_value, exc_traceback = exc_info + frame.f_locals['__exception__'] = exc_type, exc_value + if type(exc_type) == type(''): + exc_type_name = exc_type + else: exc_type_name = exc_type.__name__ + + if exc_type_name == 'RawInputException': + raw_input_arg = str(exc_value.args[0]) # make sure it's a string so it's JSON serializable! + self.trace.append(dict(event='raw_input', prompt=raw_input_arg)) + self.done = True + elif exc_type_name == 'MouseInputException': + mouse_input_arg = str(exc_value.args[0]) # make sure it's a string so it's JSON serializable! + self.trace.append(dict(event='mouse_input', prompt=mouse_input_arg)) + self.done = True + else: + self.interaction(frame, exc_traceback, 'exception') + + def get_script_line(self, n): + return self.executed_script_lines[n-1] + + # General interaction function + + def interaction(self, frame, traceback, event_type): + self.setup(frame, traceback) + tos = self.stack[self.curindex] + top_frame = tos[0] + lineno = tos[1] + + + # debug ... + ''' + print >> sys.stderr + print >> sys.stderr, '=== STACK ===', 'curindex:', self.curindex + for (e,ln) in self.stack: + print >> sys.stderr, e.f_code.co_name + ' ' + e.f_code.co_filename + ' ' + str(ln) + print >> sys.stderr, "top_frame", top_frame.f_code.co_name + ''' + + + # don't trace inside of ANY functions that aren't user-written code + # (e.g., those from imported modules -- e.g., random, re -- or the + # __restricted_import__ function in this file) + # + # empirically, it seems like the FIRST entry in self.stack is + # the 'run' function from bdb.py, but everything else on the + # stack is the user program's "real stack" + + # Look only at the "topmost" frame on the stack ... + + # it seems like user-written code has a filename of '', + # but maybe there are false positives too? + if self.canonic(top_frame.f_code.co_filename) != '': + return + # also don't trace inside of the magic "constructor" code + if top_frame.f_code.co_name == '__new__': + return + # or __repr__, which is often called when running print statements + if top_frame.f_code.co_name == '__repr__': + return + + # if top_frame.f_globals doesn't contain the sentinel '__OPT_toplevel__', + # then we're in another global scope altogether, so skip it! + # (this comes up in tests/backend-tests/namedtuple.txt) + if '__OPT_toplevel__' not in top_frame.f_globals: + return + + + # OLD CODE -- bail if any element on the stack matches these conditions + # note that the old code passes tests/backend-tests/namedtuple.txt + # but the new code above doesn't :/ + ''' + for (cur_frame, cur_line) in self.stack[1:]: + # it seems like user-written code has a filename of '', + # but maybe there are false positives too? + if self.canonic(cur_frame.f_code.co_filename) != '': + return + # also don't trace inside of the magic "constructor" code + if cur_frame.f_code.co_name == '__new__': + return + # or __repr__, which is often called when running print statements + if cur_frame.f_code.co_name == '__repr__': + return + ''' + + + # don't trace if wait_for_return_stack is non-null ... + if self.wait_for_return_stack: + if event_type == 'return' and \ + (self.wait_for_return_stack == self.get_stack_code_IDs()): + self.wait_for_return_stack = None # reset! + return # always bail! + else: + # Skip all "calls" that are actually class definitions, since + # those faux calls produce lots of ugly cruft in the trace. + # + # NB: Only trigger on calls to functions defined in + # user-written code (i.e., co_filename == ''), but that + # should already be ensured by the above check for whether we're + # in user-written code. + if event_type == 'call': + func_line = self.get_script_line(top_frame.f_code.co_firstlineno) + if CLASS_RE.match(func_line.lstrip()): # ignore leading spaces + self.wait_for_return_stack = self.get_stack_code_IDs() + return + + + self.encoder.reset_heap() # VERY VERY VERY IMPORTANT, + # or else we won't properly capture heap object mutations in the trace! + + if event_type == 'call': + # Don't be so strict about this assertion because it FAILS + # when you're calling a generator (not for the first time), + # since that frame has already previously been on the stack ... + #assert top_frame not in self.frame_ordered_ids + + self.frame_ordered_ids[top_frame] = self.cur_frame_id + self.cur_frame_id += 1 + + if self.cumulative_mode: + self.zombie_frames.append(top_frame) + + + # only render zombie frames that are NO LONGER on the stack + # + # subtle: self.stack[:self.curindex+1] is the real stack, since + # everything after self.curindex+1 is beyond the top of the + # stack. this seems to be relevant only when there's an exception, + # since the ENTIRE stack is preserved but self.curindex + # starts decrementing as the exception bubbles up the stack. + cur_stack_frames = [e[0] for e in self.stack[:self.curindex+1]] + zombie_frames_to_render = [e for e in self.zombie_frames if e not in cur_stack_frames] + + + # each element is a pair of (function name, ENCODED locals dict) + encoded_stack_locals = [] + + + # returns a dict with keys: function name, frame id, id of parent frame, encoded_locals dict + def create_encoded_stack_entry(cur_frame): + ret = {} + + + parent_frame_id_list = [] + + f = cur_frame + while True: + p = self.get_parent_frame(f) + if p: + pid = self.get_frame_id(p) + assert pid + parent_frame_id_list.append(pid) + f = p + else: + break + + + cur_name = cur_frame.f_code.co_name + + if cur_name == '': + cur_name = 'unnamed function' + + # augment lambdas with line number + if cur_name == '': + cur_name += pg_encoder.create_lambda_line_number(cur_frame.f_code, + self.encoder.line_to_lambda_code) + + # encode in a JSON-friendly format now, in order to prevent ill + # effects of aliasing later down the line ... + encoded_locals = {} + + for (k, v) in get_user_locals(cur_frame).items(): + is_in_parent_frame = False + + # don't display locals that appear in your parents' stack frames, + # since that's redundant + for pid in parent_frame_id_list: + parent_frame = self.lookup_zombie_frame_by_id(pid) + if k in parent_frame.f_locals: + # ignore __return__, which is never copied + if k != '__return__': + # these values SHOULD BE ALIASES + # (don't do an 'is' check since it might not fire for primitives) + if parent_frame.f_locals[k] == v: + is_in_parent_frame = True + + if is_in_parent_frame and k not in cur_frame.f_code.co_varnames: + continue + + # don't display some built-in locals ... + if k == '__module__': + continue + + encoded_val = self.encoder.encode(v, self.get_parent_of_function) + encoded_locals[k] = encoded_val + + + # order the variable names in a sensible way: + + # Let's start with co_varnames, since it (often) contains all + # variables in this frame, some of which might not exist yet. + ordered_varnames = [] + for e in cur_frame.f_code.co_varnames: + if e in encoded_locals: + ordered_varnames.append(e) + + # sometimes co_varnames doesn't contain all of the true local + # variables: e.g., when executing a 'class' definition. in that + # case, iterate over encoded_locals and push them onto the end + # of ordered_varnames in alphabetical order + for e in sorted(encoded_locals.keys()): + if e != '__return__' and e not in ordered_varnames: + ordered_varnames.append(e) + + # finally, put __return__ at the very end + if '__return__' in encoded_locals: + ordered_varnames.append('__return__') + + # doctor Python 3 initializer to look like a normal function (denero) + if '__locals__' in encoded_locals: + ordered_varnames.remove('__locals__') + local = encoded_locals.pop('__locals__') + if encoded_locals.get('__return__', True) is None: + encoded_locals['__return__'] = local + + # crucial sanity checks! + assert len(ordered_varnames) == len(encoded_locals) + for e in ordered_varnames: + assert e in encoded_locals + + return dict(func_name=cur_name, + is_parent=(cur_frame in self.parent_frames_set), + frame_id=self.get_frame_id(cur_frame), + parent_frame_id_list=parent_frame_id_list, + encoded_locals=encoded_locals, + ordered_varnames=ordered_varnames) + + + i = self.curindex + + # look for whether a nested function has been defined during + # this particular call: + if i > 1: # i == 1 implies that there's only a global scope visible + for v in visit_all_locally_reachable_function_objs(top_frame): + if (v not in self.closures and \ + v not in self.globally_defined_funcs): + + # Look for the presence of the code object (v.func_code + # for Python 2 or v.__code__ for Python 3) in the + # constant pool (f_code.co_consts) of an enclosing + # stack frame, and set that frame as your parent. + # + # This technique properly handles lambdas passed as + # function parameters. e.g., this example: + # + # def foo(x): + # bar(lambda y: x + y) + # def bar(a): + # print a(20) + # foo(10) + chosen_parent_frame = None + # SUPER hacky but seems to work -- use reversed(self.stack) + # because we want to traverse starting from the TOP of the stack + # (most recent frame) and find the first frame containing + # a constant code object that matches v.__code__ or v.func_code + # + # required for this example from Berkeley CS61a: + # + # def f(p, k): + # def g(): + # print(k) + # if k == 0: + # f(g, 1) + # f(None, 0) + # + # there are two calls to f, each of which defines a + # closure g that should point to the respective frame. + # + # note that for the second call to f, the parent of the + # g defined in there should be that frame, which is at + # the TOP of the stack. this reversed() hack does the + # right thing. note that if you don't traverse the stack + # backwards, then you will mistakenly get the parent as + # the FIRST f frame (bottom of the stack). + for (my_frame, my_lineno) in reversed(self.stack): + if chosen_parent_frame: + break + + for frame_const in my_frame.f_code.co_consts: + if frame_const is (v.__code__ if is_python3 else v.func_code): + chosen_parent_frame = my_frame + break + + # 2013-12-01 commented out this line so tests/backend-tests/papajohn-monster.txt + # works without an assertion failure ... + #assert chosen_parent_frame # I hope this always passes :0 + + # this condition should be False for functions declared in global scope ... + if chosen_parent_frame in self.frame_ordered_ids: + self.closures[v] = chosen_parent_frame + self.parent_frames_set.add(chosen_parent_frame) # unequivocally add to this set!!! + if not chosen_parent_frame in self.zombie_frames: + self.zombie_frames.append(chosen_parent_frame) + else: + # if there is only a global scope visible ... + for (k, v) in get_user_globals(top_frame).items(): + if (type(v) in (types.FunctionType, types.MethodType) and \ + v not in self.closures): + self.globally_defined_funcs.add(v) + + + # climb up until you find '', which is (hopefully) the global scope + while True: + cur_frame = self.stack[i][0] + cur_name = cur_frame.f_code.co_name + if cur_name == '': + break + + # do this check because in some cases, certain frames on the + # stack might NOT be tracked, so don't push a stack entry for + # those frames. this happens when you have a callback function + # in an imported module. e.g., your code: + # def foo(): + # bar(baz) + # + # def baz(): pass + # + # imported module code: + # def bar(callback_func): + # callback_func() + # + # when baz is executing, the real stack is [foo, bar, baz] but + # bar is in imported module code, so pg_logger doesn't trace + # it, and it doesn't show up in frame_ordered_ids. thus, the + # stack to render should only be [foo, baz]. + if cur_frame in self.frame_ordered_ids: + encoded_stack_locals.append(create_encoded_stack_entry(cur_frame)) + i -= 1 + + zombie_encoded_stack_locals = [create_encoded_stack_entry(e) for e in zombie_frames_to_render] + + + # encode in a JSON-friendly format now, in order to prevent ill + # effects of aliasing later down the line ... + encoded_globals = {} + for (k, v) in get_user_globals(tos[0], at_global_scope=(self.curindex <= 1)).items(): + encoded_val = self.encoder.encode(v, self.get_parent_of_function) + encoded_globals[k] = encoded_val + + if k not in self.all_globals_in_order: + self.all_globals_in_order.append(k) + + # filter out globals that don't exist at this execution point + # (because they've been, say, deleted with 'del') + ordered_globals = [e for e in self.all_globals_in_order if e in encoded_globals] + assert len(ordered_globals) == len(encoded_globals) + + + # merge zombie_encoded_stack_locals and encoded_stack_locals + # into one master ordered list using some simple rules for + # making it look aesthetically pretty + stack_to_render = []; + + # first push all regular stack entries + if encoded_stack_locals: + for e in encoded_stack_locals: + e['is_zombie'] = False + e['is_highlighted'] = False + stack_to_render.append(e) + + # highlight the top-most active stack entry + stack_to_render[0]['is_highlighted'] = True + + + # now push all zombie stack entries + for e in zombie_encoded_stack_locals: + # don't display return value for zombie frames + # TODO: reconsider ... + ''' + try: + e['ordered_varnames'].remove('__return__') + except ValueError: + pass + ''' + + e['is_zombie'] = True + e['is_highlighted'] = False # never highlight zombie entries + + stack_to_render.append(e) + + # now sort by frame_id since that sorts frames in "chronological + # order" based on the order they were invoked + stack_to_render.sort(key=lambda e: e['frame_id']) + + + + # create a unique hash for this stack entry, so that the + # frontend can uniquely identify it when doing incremental + # rendering. the strategy is to use a frankenstein-like mix of the + # relevant fields to properly disambiguate closures and recursive + # calls to the same function + for e in stack_to_render: + hash_str = e['func_name'] + # frame_id is UNIQUE, so it can disambiguate recursive calls + hash_str += '_f' + str(e['frame_id']) + + # needed to refresh GUI display ... + if e['is_parent']: + hash_str += '_p' + + # TODO: this is no longer needed, right? (since frame_id is unique) + #if e['parent_frame_id_list']: + # hash_str += '_p' + '_'.join([str(i) for i in e['parent_frame_id_list']]) + if e['is_zombie']: + hash_str += '_z' + + e['unique_hash'] = hash_str + + + if self.show_only_outputs: + trace_entry = dict(line=lineno, + event=event_type, + func_name=tos[0].f_code.co_name, + globals={}, + ordered_globals=[], + stack_to_render=[], + heap={}, + stdout=get_user_stdout(tos[0])) + else: + trace_entry = dict(line=lineno, + event=event_type, + func_name=tos[0].f_code.co_name, + globals=encoded_globals, + ordered_globals=ordered_globals, + stack_to_render=stack_to_render, + heap=self.encoder.get_heap(), + stdout=get_user_stdout(tos[0])) + + # optional column numbers for greater precision + # (only relevant in Py2crazy, a hacked CPython that supports column numbers) + if self.crazy_mode: + # at the very least, grab the column number + trace_entry['column'] = frame.f_colno + + # now try to find start_col and extent + # (-1 is an invalid instruction index) + if frame.f_lasti >= 0: + key = (frame.f_code.co_code, frame.f_lineno, frame.f_colno,frame.f_lasti) + if key in self.bytecode_map: + v = self.bytecode_map[key] + trace_entry['expr_start_col'] = v.start_col + trace_entry['expr_width'] = v.extent + trace_entry['opcode'] = v.opcode + + + # TODO: refactor into a non-global + global __html__, __css__, __js__ + if __html__: + trace_entry['html_output'] = __html__ + if __css__: + trace_entry['css_output'] = __css__ + if __js__: + trace_entry['js_output'] = __js__ + + # if there's an exception, then record its info: + if event_type == 'exception': + # always check in f_locals + exc = frame.f_locals['__exception__'] + trace_entry['exception_msg'] = exc[0].__name__ + ': ' + str(exc[1]) + + + # append to the trace only the breakpoint line and the next + # executed line, so that if you set only ONE breakpoint, OPT shows + # the state before and after that line gets executed. + append_to_trace = True + if self.breakpoints: + if not ((lineno in self.breakpoints) or (self.prev_lineno in self.breakpoints)): + append_to_trace = False + + # TRICKY -- however, if there's an exception, then ALWAYS + # append it to the trace, so that the error can be displayed + if event_type == 'exception': + append_to_trace = True + + self.prev_lineno = lineno + + if append_to_trace: + self.trace.append(trace_entry) + + + # sanity check to make sure the state of the world at a 'call' instruction + # is identical to that at the instruction immediately following it ... + ''' + if len(self.trace) > 1: + cur = self.trace[-1] + prev = self.trace[-2] + if prev['event'] == 'call': + assert cur['globals'] == prev['globals'] + for (s1, s2) in zip(cur['stack_to_render'], prev['stack_to_render']): + assert s1 == s2 + assert cur['heap'] == prev['heap'] + assert cur['stdout'] == prev['stdout'] + ''' + + + if len(self.trace) >= MAX_EXECUTED_LINES: + self.trace.append(dict(event='instruction_limit_reached', exception_msg='(stopped after ' + str(MAX_EXECUTED_LINES) + ' steps to prevent possible infinite loop)')) + self.force_terminate() + + self.forget() + + + def _runscript(self, script_str, custom_globals=None): + self.executed_script = script_str + self.executed_script_lines = self.executed_script.splitlines() + + for (i, line) in enumerate(self.executed_script_lines): + line_no = i + 1 + if line.endswith(BREAKPOINT_STR): + self.breakpoints.append(line_no) + + + # populate an extent map to get more accurate ranges from code + if self.crazy_mode: + # in Py2crazy standard library as Python-2.7.5/Lib/super_dis.py + import super_dis + try: + self.bytecode_map = super_dis.get_bytecode_map(self.executed_script) + except: + # failure oblivious + self.bytecode_map = {} + + + # When bdb sets tracing, a number of call and line events happens + # BEFORE debugger even reaches user's code (and the exact sequence of + # events depends on python version). So we take special measures to + # avoid stopping before we reach the main script (see user_line and + # user_call for details). + self._wait_for_mainpyfile = 1 + + + # ok, let's try to sorta 'sandbox' the user script by not + # allowing certain potentially dangerous operations. + user_builtins = {} + + # ugh, I can't figure out why in Python 2, __builtins__ seems to + # be a dict, but in Python 3, __builtins__ seems to be a module, + # so just handle both cases ... UGLY! + if type(__builtins__) is dict: + builtin_items = __builtins__.items() + else: + assert type(__builtins__) is types.ModuleType + builtin_items = [] + for k in dir(__builtins__): + builtin_items.append((k, getattr(__builtins__, k))) + + for (k, v) in builtin_items: + if k == 'open': # put this before BANNED_BUILTINS + user_builtins[k] = open_wrapper + elif k in BANNED_BUILTINS: + continue + elif k == '__import__': + user_builtins[k] = __restricted_import__ + else: + if k == 'raw_input': + user_builtins[k] = raw_input_wrapper + elif k == 'input' and is_python3: + # Python 3 input() is Python 2 raw_input() + user_builtins[k] = raw_input_wrapper + else: + user_builtins[k] = v + + user_builtins['mouse_input'] = mouse_input_wrapper + + # TODO: we can disable these imports here, but a crafty user can + # always get a hold of them by importing one of the external + # modules, so there's no point in trying security by obscurity + user_builtins['setHTML'] = setHTML + user_builtins['setCSS'] = setCSS + user_builtins['setJS'] = setJS + + user_stdout = StringIO.StringIO() + + sys.stdout = user_stdout + + self.ORIGINAL_STDERR = sys.stderr + + # don't do this, or else certain kinds of errors, such as syntax + # errors, will be silently ignored. WEIRD! + #sys.stderr = NullDevice # silence errors + + user_globals = {"__name__" : "__main__", + "__builtins__" : user_builtins, + "__user_stdout__" : user_stdout, + # sentinel value for frames deriving from a top-level module + "__OPT_toplevel__": True} + + if custom_globals: + user_globals.update(custom_globals) + + try: + # enforce resource limits RIGHT BEFORE running script_str + + # set ~200MB virtual memory limit AND a 5-second CPU time + # limit (tuned for Webfaction shared hosting) to protect against + # memory bombs such as: + # x = 2 + # while True: x = x*x + if resource_module_loaded and (not self.disable_security_checks): + resource.setrlimit(resource.RLIMIT_AS, (200000000, 200000000)) + resource.setrlimit(resource.RLIMIT_CPU, (5, 5)) + + # protect against unauthorized filesystem accesses ... + resource.setrlimit(resource.RLIMIT_NOFILE, (0, 0)) # no opened files allowed + + # VERY WEIRD. If you activate this resource limitation, it + # ends up generating an EMPTY trace for the following program: + # "x = 0\nfor i in range(10):\n x += 1\n print x\n x += 1\n" + # (at least on my Webfaction hosting with Python 2.7) + #resource.setrlimit(resource.RLIMIT_FSIZE, (0, 0)) # (redundancy for paranoia) + + # The posix module is a built-in and has a ton of OS access + # facilities ... if you delete those functions from + # sys.modules['posix'], it seems like they're gone EVEN IF + # someone else imports posix in a roundabout way. Of course, + # I don't know how foolproof this scheme is, though. + # (It's not sufficient to just "del sys.modules['posix']"; + # it can just be reimported without accessing an external + # file and tripping RLIMIT_NOFILE, since the posix module + # is baked into the python executable, ergh. Actually DON'T + # "del sys.modules['posix']", since re-importing it will + # refresh all of the attributes. ergh^2) + for a in dir(sys.modules['posix']): + delattr(sys.modules['posix'], a) + # do the same with os + for a in dir(sys.modules['os']): + # 'path' is needed for __restricted_import__ to work + # and 'stat' is needed for some errors to be reported properly + if a not in ('path', 'stat'): + delattr(sys.modules['os'], a) + # ppl can dig up trashed objects with gc.get_objects() + import gc + for a in dir(sys.modules['gc']): + delattr(sys.modules['gc'], a) + del sys.modules['gc'] + + # sys.modules contains an in-memory cache of already-loaded + # modules, so if you delete modules from here, they will + # need to be re-loaded from the filesystem. + # + # Thus, as an extra precaution, remove these modules so that + # they can't be re-imported without opening a new file, + # which is disallowed by resource.RLIMIT_NOFILE + # + # Of course, this isn't a foolproof solution by any means, + # and it might lead to UNEXPECTED FAILURES later in execution. + del sys.modules['os'] + del sys.modules['os.path'] + del sys.modules['sys'] + + self.run(script_str, user_globals, user_globals) + # sys.exit ... + except SystemExit: + #sys.exit(0) + raise bdb.BdbQuit + except: + if DEBUG: + traceback.print_exc() + + trace_entry = dict(event='uncaught_exception') + + (exc_type, exc_val, exc_tb) = sys.exc_info() + if hasattr(exc_val, 'lineno'): + trace_entry['line'] = exc_val.lineno + if hasattr(exc_val, 'offset'): + trace_entry['offset'] = exc_val.offset + + trace_entry['exception_msg'] = type(exc_val).__name__ + ": " + str(exc_val) + + # SUPER SUBTLE! if ANY exception has already been recorded by + # the program, then DON'T record it again as an uncaught_exception. + # This looks kinda weird since the exact exception message doesn't + # need to match up, but in practice, there should be at most only + # ONE exception per trace. + already_caught = False + for e in self.trace: + if e['event'] == 'exception': + already_caught = True + break + + if not already_caught: + if not self.done: + self.trace.append(trace_entry) + + raise bdb.BdbQuit # need to forceably STOP execution + + + def force_terminate(self): + #self.finalize() + raise bdb.BdbQuit # need to forceably STOP execution + + + def finalize(self): + sys.stdout = self.GAE_STDOUT # very important! + sys.stderr = self.ORIGINAL_STDERR + + assert len(self.trace) <= (MAX_EXECUTED_LINES + 1) + + # don't do this anymore ... + ''' + # filter all entries after 'return' from '', since they + # seem extraneous: + res = [] + for e in self.trace: + res.append(e) + if e['event'] == 'return' and e['func_name'] == '': + break + ''' + + res = self.trace + + # if the SECOND to last entry is an 'exception' + # and the last entry is return from , then axe the last + # entry, for aesthetic reasons :) + if len(res) >= 2 and \ + res[-2]['event'] == 'exception' and \ + res[-1]['event'] == 'return' and res[-1]['func_name'] == '': + res.pop() + + self.trace = res + + return self.finalizer_func(self.executed_script, self.trace) + + +import json + +# the MAIN meaty function!!! +def exec_script_str(script_str, raw_input_lst_json, options_json, finalizer_func): + options = json.loads(options_json) + + py_crazy_mode = ('py_crazy_mode' in options and options['py_crazy_mode']) + + logger = PGLogger(options['cumulative_mode'], options['heap_primitives'], options['show_only_outputs'], finalizer_func, + crazy_mode=py_crazy_mode) + + # TODO: refactor these NOT to be globals + global input_string_queue + input_string_queue = [] + if raw_input_lst_json: + # TODO: if we want to support unicode, remove str() cast + input_string_queue = [str(e) for e in json.loads(raw_input_lst_json)] + + global __html__, __css__, __js__ + __html__, __css__, __js__ = None, None, None + + try: + logger._runscript(script_str) + except bdb.BdbQuit: + pass + finally: + logger.finalize() + + +# disables security check and returns the result of finalizer_func +# WARNING: ONLY RUN THIS LOCALLY and never over the web, since +# security checks are disabled +def exec_script_str_local(script_str, raw_input_lst_json, cumulative_mode, heap_primitives, finalizer_func): + # TODO: add py_crazy_mode option here too ... + logger = PGLogger(cumulative_mode, heap_primitives, False, finalizer_func, disable_security_checks=True) + + # TODO: refactor these NOT to be globals + global input_string_queue + input_string_queue = [] + if raw_input_lst_json: + # TODO: if we want to support unicode, remove str() cast + input_string_queue = [str(e) for e in json.loads(raw_input_lst_json)] + + global __html__, __css__, __js__ + __html__, __css__, __js__ = None, None, None + + try: + logger._runscript(script_str) + except bdb.BdbQuit: + pass + finally: + return logger.finalize() + + +def exec_str_with_user_ns(script_str, user_ns, finalizer_func): + logger = PGLogger(False, False, False, finalizer_func, disable_security_checks=True) + + global __html__, __css__, __js__ + __html__, __css__, __js__ = None, None, None + + try: + logger._runscript(script_str, user_ns) + except bdb.BdbQuit: + pass + finally: + return logger.finalize() + diff --git a/v3/pythontutor.py b/v3/pythontutor.py new file mode 100644 index 000000000..f2a3e2b3a --- /dev/null +++ b/v3/pythontutor.py @@ -0,0 +1,91 @@ +# Online Python Tutor +# https://github.com/pgbovine/OnlinePythonTutor/ +# +# Copyright (C) Philip J. Guo (philip@pgbovine.net) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +# Google App Engine backend + + +# TODO: if we want to enable concurrent requests, then make sure this is threadsafe (e.g., no mutable globals) +# then add this string to app.yaml: 'threadsafe: true' + +import webapp2 +import pg_logger +import json +import jinja2, os +import sys + + +# TODO: this croaks for some reason ... +TEST_STR = "import os\nos.chdir('/')" + + +JINJA_ENVIRONMENT = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__))) + + +class TutorPage(webapp2.RequestHandler): + + def get(self): + self.response.headers['Content-Type'] = 'text/html' + template = JINJA_ENVIRONMENT.get_template('visualize.html') + self.response.out.write(template.render()) + + +class IframeEmbedPage(webapp2.RequestHandler): + def get(self): + self.response.headers['Content-Type'] = 'text/html' + template = JINJA_ENVIRONMENT.get_template('iframe-embed.html') + self.response.out.write(template.render()) + + +class LessonPage(webapp2.RequestHandler): + + def get(self): + self.response.headers['Content-Type'] = 'text/html' + template = JINJA_ENVIRONMENT.get_template('lesson.html') + self.response.out.write(template.render()) + + +class ExecScript(webapp2.RequestHandler): + + def json_finalizer(self, input_code, output_trace): + ret = dict(code=input_code, trace=output_trace) + json_output = json.dumps(ret, indent=None) # use indent=None for most compact repr + self.response.out.write(json_output) + + def get(self): + self.response.headers['Content-Type'] = 'application/json' + self.response.headers['Cache-Control'] = 'no-cache' + + pg_logger.exec_script_str(self.request.get('user_script'), + self.request.get('raw_input_json'), + self.request.get('options_json'), + self.json_finalizer) + + +app = webapp2.WSGIApplication([('/', TutorPage), + ('/iframe-embed.html', IframeEmbedPage), + ('/lesson.html', LessonPage), + ('/exec', ExecScript)], + debug=True) + diff --git a/v3/red-sad-face.jpg b/v3/red-sad-face.jpg new file mode 100644 index 000000000..034eaacda Binary files /dev/null and b/v3/red-sad-face.jpg differ diff --git a/v3/ruby-example-code/blocks-basic.rb b/v3/ruby-example-code/blocks-basic.rb new file mode 100644 index 000000000..ee44cc136 --- /dev/null +++ b/v3/ruby-example-code/blocks-basic.rb @@ -0,0 +1,19 @@ +# Adapted from Learning Ruby by Michael Fitzgerald, O'Reilly + +def gimme + if block_given? + yield + else + print "Oops, no block." + end + puts " You're welcome." +end + +gimme { print "Thank you." } + +gimme do + localX = "Thank you again." + print localX +end + +gimme # no block diff --git a/v3/ruby-example-code/blocks-scoping-2.rb b/v3/ruby-example-code/blocks-scoping-2.rb new file mode 100644 index 000000000..751ea88c2 --- /dev/null +++ b/v3/ruby-example-code/blocks-scoping-2.rb @@ -0,0 +1,16 @@ +# how does lexical scoping work for blocks? + +x = 5 + +def gimme + y = 10 + yield + puts "You're welcome." +end + +gimme do + puts x + x += 100 # can modify x in enclosing scope + puts x + puts y # can't find y since this is lexically scoped +end diff --git a/v3/ruby-example-code/blocks-scoping-3.rb b/v3/ruby-example-code/blocks-scoping-3.rb new file mode 100644 index 000000000..bbcee07a6 --- /dev/null +++ b/v3/ruby-example-code/blocks-scoping-3.rb @@ -0,0 +1,23 @@ +# how does lexical scoping work for blocks? + +x = 5 + +def gimme + yield + puts "end of gimme" +end + +def bar + y = 42 + gimme do + # everything inside of here can access y but *not* x + puts 'Hello' + puts y + y += 1000 + puts y + end + puts 'end of bar' + puts y +end + +bar diff --git a/v3/ruby-example-code/class-inheritance.rb b/v3/ruby-example-code/class-inheritance.rb new file mode 100644 index 000000000..a3babc385 --- /dev/null +++ b/v3/ruby-example-code/class-inheritance.rb @@ -0,0 +1,25 @@ +# adapted from http://rubylearning.com/satishtalim/ruby_inheritance.html +class Mammal + def breathe + puts "inhale and exhale" + end +end + +class Cat < Mammal + def speak + puts "Meow" + end +end + +class Tabby < Cat + def speak + puts "Tabby meow" + end +end + +rani = Cat.new +rani.breathe +rani.speak + +tab = Tabby.new +tab.speak diff --git a/v3/ruby-example-code/class-private-protected.rb b/v3/ruby-example-code/class-private-protected.rb new file mode 100644 index 000000000..a46706484 --- /dev/null +++ b/v3/ruby-example-code/class-private-protected.rb @@ -0,0 +1,30 @@ +class MyClass + def foo; end # instance method + def self.foo; end # class method + + protected + + def bar; end + def self.bar; end # NOP! + + # variables shouldn't be affected + @@classVarX = 111 + @instVarX = 222 + + private + + @@classVarY = 333 + @instVarY = 444 + + def baz; end + def self.baz; end # NOP! + + # dynamically change visibility + public :baz + private :bar + private :foo + + private_class_method :foo + private_class_method :bar + private_class_method :baz +end diff --git a/v3/ruby-example-code/constants-4.rb b/v3/ruby-example-code/constants-4.rb new file mode 100644 index 000000000..cb5bc883f --- /dev/null +++ b/v3/ruby-example-code/constants-4.rb @@ -0,0 +1,15 @@ +# adapted from http://rubylearning.com/satishtalim/ruby_constants.html + +OUTER_CONST = 99 + +class Const + def get_const + CONST + end + CONST = OUTER_CONST + 1 +end + +puts Const.new.get_const +puts Const::CONST +puts ::OUTER_CONST +puts Const::NEW_CONST = 123 diff --git a/v3/ruby-example-code/container-data-types.rb b/v3/ruby-example-code/container-data-types.rb new file mode 100644 index 000000000..c5018a3a9 --- /dev/null +++ b/v3/ruby-example-code/container-data-types.rb @@ -0,0 +1,8 @@ +require 'set' + +my_array = [1, 2, 3, 'hello', false, true, nil] +my_hash = {'John' => 26, 'Jane' => 21, 'Jack' => 30} +my_set = my_array.to_set + +my_hash['nested array'] = my_array +my_array[1] = ['a', 'b', 'c'] diff --git a/v3/ruby-example-code/globals.rb b/v3/ruby-example-code/globals.rb new file mode 100644 index 000000000..440124018 --- /dev/null +++ b/v3/ruby-example-code/globals.rb @@ -0,0 +1,13 @@ +$globalX = 'I am a global!' +$globalY = 'I am another global!' + +localX = 'I am a local in
    ' + +def foo + reallyLocalX = 'I am a local in foo' + puts reallyLocalX + $globalX << $globalY +end + +$globalX << '---' +foo diff --git a/v3/ruby-example-code/inst-class-vars-complex.rb b/v3/ruby-example-code/inst-class-vars-complex.rb new file mode 100644 index 000000000..4f3e856a0 --- /dev/null +++ b/v3/ruby-example-code/inst-class-vars-complex.rb @@ -0,0 +1,36 @@ +# adapted from http://rubylearning.com/satishtalim/ruby_constants.html + +# p057mymethods2.rb +# variables and methods start lowercase +$glob = 5 # global variables start with $ +class TestVar # class name constant, start uppercase + @@cla = 6 # class variables start with @@ + CONST_VAL = 7 # constant style, all caps, underscore + def initialize(x) # constructor + @inst = x # instance variables start with @ + @@cla += 1 # each object shares @@cla + end + def self.cla # class method, getter + @@cla + end + def self.cla=(y) # class method, setter, also TestVar. + @@cla = y + end + def inst # instance method, getter + @inst + end + def inst=(i) # instance method, setter + @inst = i + end +end +puts $glob +test = TestVar.new(3) # calls constructor +puts TestVar.cla # calls getter +puts test.inspect # gives object ID and instance vars +TestVar.cla = 4 # calls setter +test.inst=8 # calls setter +puts TestVar.cla +puts test.inst # calls getter +other = TestVar.new(17) +puts other.inspect +puts TestVar.cla diff --git a/v3/ruby-example-code/lambda-scoping-2.rb b/v3/ruby-example-code/lambda-scoping-2.rb new file mode 100644 index 000000000..85feb8f85 --- /dev/null +++ b/v3/ruby-example-code/lambda-scoping-2.rb @@ -0,0 +1,24 @@ +# how does lexical scoping work for lambdas? + +x = 5 + +p = lambda { + puts x + x += 100 # can modify x in enclosing scope + puts x + puts 'end of p' +} + +def gimme + x = 10 + print 'In gimme, x is ' + puts x + yield + puts "You're welcome." + print 'In gimme, x is ' + puts x +end + +gimme &p # use '&' to turn a lambda into a block +print 'In main, x is ' +puts x diff --git a/v3/ruby-example-code/megagreeter.rb b/v3/ruby-example-code/megagreeter.rb new file mode 100644 index 000000000..d553835f0 --- /dev/null +++ b/v3/ruby-example-code/megagreeter.rb @@ -0,0 +1,42 @@ +# Adapted from Ruby in Twenty Minutes +# https://www.ruby-lang.org/en/documentation/quickstart/3/ + +class MegaGreeter + attr_accessor :names + + # Create the object + def initialize(names = "World") + @names = names + end + + # Say hi to everybody + def say_hi + if @names.nil? + puts "..." + elsif @names.respond_to?("each") + # @names is a list of some kind, iterate! + @names.each do |name| + puts "Hello #{name}!" + end + else + puts "Hello #{@names}!" + end + end +end + + +mg = MegaGreeter.new +mg.say_hi + +# Change name to be "Zeke" +mg.names = "Zeke" +mg.say_hi + +# Change the name to an array of names +mg.names = ["Albert", "Brenda", "Charles", + "Dave", "Engelbert"] +mg.say_hi + +# Change to nil +mg.names = nil +mg.say_hi diff --git a/v3/ruby-example-code/proc-basic.rb b/v3/ruby-example-code/proc-basic.rb new file mode 100644 index 000000000..073439b04 --- /dev/null +++ b/v3/ruby-example-code/proc-basic.rb @@ -0,0 +1,17 @@ +# Adapted from Learning Ruby by Michael Fitzgerald, O'Reilly + +count = Proc.new { + [1,2,3,4,5].each { + |i| print i + } + puts +} + +your_proc = lambda { puts "Lurch: 'You rang?'" } +my_proc = proc { puts "Morticia: 'Who was at the door, Lurch?'" } + +puts count.class, your_proc.class, my_proc.class + +count.call +your_proc.call +my_proc.call diff --git a/v3/ruby-example-code/proc-return.rb b/v3/ruby-example-code/proc-return.rb new file mode 100644 index 000000000..e42c99b96 --- /dev/null +++ b/v3/ruby-example-code/proc-return.rb @@ -0,0 +1,11 @@ +# adapted from http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods/ + +def gen_times(factor) + return Proc.new {|n| n*factor } +end + +times3 = gen_times(3) +times5 = gen_times(5) + +puts times3.call(12) #=> 36 +puts times5.call(5) #=> 25 diff --git a/v3/ruby-example-code/proc-scoping.rb b/v3/ruby-example-code/proc-scoping.rb new file mode 100644 index 000000000..080238cde --- /dev/null +++ b/v3/ruby-example-code/proc-scoping.rb @@ -0,0 +1,13 @@ +# how does lexical scoping work for Procs? + +x = 5 + +p = Proc.new do + puts x + x += 100 # can modify x in enclosing scope + puts x + puts 'end of p' +end + +p.call +puts x diff --git a/v3/ruby-example-code/symbols.rb b/v3/ruby-example-code/symbols.rb new file mode 100644 index 000000000..d7711471c --- /dev/null +++ b/v3/ruby-example-code/symbols.rb @@ -0,0 +1,11 @@ +# Adapted from Learning Ruby by Michael Fitzgerald, O'Reilly + +name = "Matz" +name = name.to_sym +name2 = :Matz.id2name +puts name +puts name2 + +x = :"Matz with spaces and !?!" +x2 = :"Matz with spaces and !?!" +puts x.object_id == x2.object_id diff --git a/v3/ruby-example-code/toplevel-inst-class-vars.rb b/v3/ruby-example-code/toplevel-inst-class-vars.rb new file mode 100644 index 000000000..655d276e2 --- /dev/null +++ b/v3/ruby-example-code/toplevel-inst-class-vars.rb @@ -0,0 +1,10 @@ +@x = 42 +@y = 'hello' +puts @x +puts @y +@@classX = 'classy X' +@@classY = 'classy Y' +puts @@classX +puts @@classY +localX = 'local X' +localY = 'local Y' diff --git a/v3/ruby.html b/v3/ruby.html new file mode 100644 index 000000000..2c42900ce --- /dev/null +++ b/v3/ruby.html @@ -0,0 +1,366 @@ + + + + + + + Ruby Tutor - Visualize Ruby code execution to learn Ruby online + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + +
    + +
    + +
    + + + +
    + +
    + +
    + +
    + +
    +Ruby Tutor - Visualize Ruby code execution to learn Ruby online + +

    +(also visualize +Python, +Java, +JavaScript, +TypeScript, +Ruby, +C, +and C++ +code) +

    + +
    + + + +
    + +
    + + +
    + +
    Write Ruby code here: + + + +
    + + + +
    +
    +
    + +

    + +

    + + +
    +[coming soon!] Java options: pass in command-line arguments and feed user input to stdin +
    + + + + + +

    Create test cases

    + +
    + +

    Ruby Examples

    + +

    + Containers | + Globals | + Constants | + Blocks | + Block scoping | + More block scoping +

    + Proc & Lambda | + Proc scoping | + Proc return | + Lambda scoping | + Inheritance | + Symbols +

    + Protected & private | + Class & instance vars | + Toplevel defs | + Megagreeter +

    + +
    + + +
    +
    + + + + +
    + + + diff --git a/v3/screenshot-renderer/README.md b/v3/screenshot-renderer/README.md new file mode 100644 index 000000000..f867a4711 --- /dev/null +++ b/v3/screenshot-renderer/README.md @@ -0,0 +1,27 @@ +# Render static screenshots of Online Python Tutor visualizations + +Nov 2013: I've written a [script](render-opt-screenshots.js) that uses +[PhantomJS](http://phantomjs.org/) to create screenshots of Online Python Tutor +data structure visualizations as `.png` files. +These files can be included in a textbook or online tutorial. + +To run this script, first [install PhantomJS](http://phantomjs.org/download.html) and then run: + + phantomjs render-opt-screenshots.js test.py + +Doing so will pass `test.py` to Online Python Tutor (which requires online connectivity) +and render the state at each step `i` as a file named `test.py.step..png`. + +This example run generates 23 files, since there are 23 total execution steps. Here are some example files. + +Step 11 (`sample-screenshots/test.py.step.11.png`): + +![Step 11](sample-screenshots/test.py.step.11.png) + +Step 12 (`sample-screenshots/test.py.step.12.png`) + +![Step 12](sample-screenshots/test.py.step.12.png) + +Step 13 (`sample-screenshots/test.py.step.13.png`) + +![Step 13](sample-screenshots/test.py.step.13.png) diff --git a/v3/screenshot-renderer/render-opt-screenshots.js b/v3/screenshot-renderer/render-opt-screenshots.js new file mode 100644 index 000000000..ba28ce1dc --- /dev/null +++ b/v3/screenshot-renderer/render-opt-screenshots.js @@ -0,0 +1,90 @@ +// Uses PhantomJS (phantomjs.org) to call Online Python Tutor to +// visualize and render screenshots of a Python file as .png images + +// Created by Philip Guo on 2013-11-23 + +// TODO: experiment with PDF rendering by calling page.render() with a +// .pdf file extension. We might need to mess around with viewport and +// page sizes. + +var DEBUG = true; + +var page = require('webpage').create(); +var system = require('system'); +var fs = require('fs'); + +if (system.args.length < 2) { + console.log('\nUsage:'); + console.log('phantomjs render-opt-screenshots.js [custom server name] [custom HTML file] [custom option string]'); + console.log('\nVisualizes execution of a Python file at pythontutor.com and renders'); + console.log('the state diagram at each step i as .step.$i.png'); + phantom.exit(1); +} + +var fn = system.args[1]; +var basename = fn.split(/[\\/]/).pop(); + +var server, html, option_str; +if (system.args.length == 2) { + // default options + server = 'www.pythontutor.com'; + html = 'visualize.html'; + option_str = 'cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&py=2'; +} +else { + server = system.args[2]; + html = system.args[3] + option_str = system.args[4]; + if (!option_str) { + option_str = ''; // to make string concatenation work properly + } +} + +var pythonScript = fs.open(fn, 'r').read(); + +if (DEBUG) { + console.log('Visualizing ...\n'); + console.log(pythonScript); + console.log('--- please wait ---'); +} + +var scriptEncoded = encodeURIComponent(pythonScript); + +// construct a URL with the script and options: +var url = 'http://' + server + '/' + html + '#code=' + scriptEncoded + + '&mode=display&showOnlyOutputs=false&' + option_str; + +page.open(url, function () { + // impose a slight delay to make sure the page loads completely before working + window.setTimeout(function () { + + // hide extraneous components and resize + page.evaluate(function() { + $("#experimentalHeader").hide(); + $("#footer").hide(); + $("#vizLayoutTdFirst").hide(); + $('#pyOutputPane').width($('table.visualizer').width()); + }); + + // grab maximum instruction from the page itself + var maxInstr = page.evaluate(function() { + return myVisualizer.curTrace.length - 1; + }); + + // ignore step 0 since there's nothing interesting to render there + for (var i=1; i <= maxInstr; i++) { + page.evaluate(function(i) { + myVisualizer.curInstr = i; + myVisualizer.updateOutput(); + }, i /* pass i in here */); + var outfn = basename + '.step.' + (i+1) + '.png'; + page.render(outfn); + if (DEBUG) { + console.log('Rendered step ' + (i+1) + ' / ' + (maxInstr+1), '\t' + outfn); + } + } + + phantom.exit() + + }, 1000); +}); diff --git a/v3/screenshot-renderer/sample-screenshots/test.py.step.11.png b/v3/screenshot-renderer/sample-screenshots/test.py.step.11.png new file mode 100644 index 000000000..cfeccf35b Binary files /dev/null and b/v3/screenshot-renderer/sample-screenshots/test.py.step.11.png differ diff --git a/v3/screenshot-renderer/sample-screenshots/test.py.step.12.png b/v3/screenshot-renderer/sample-screenshots/test.py.step.12.png new file mode 100644 index 000000000..658fb0759 Binary files /dev/null and b/v3/screenshot-renderer/sample-screenshots/test.py.step.12.png differ diff --git a/v3/screenshot-renderer/sample-screenshots/test.py.step.13.png b/v3/screenshot-renderer/sample-screenshots/test.py.step.13.png new file mode 100644 index 000000000..d6df58cc4 Binary files /dev/null and b/v3/screenshot-renderer/sample-screenshots/test.py.step.13.png differ diff --git a/v3/screenshot-renderer/test.py b/v3/screenshot-renderer/test.py new file mode 100644 index 000000000..9098319c1 --- /dev/null +++ b/v3/screenshot-renderer/test.py @@ -0,0 +1,23 @@ +x = [1, 2, 3] +y = [4, 5, 6] +z = y +y = x +x = z + +x = [1, 2, 3] # a different [1, 2, 3] list! +y = x +x.append(4) +y.append(5) +z = [1, 2, 3, 4, 5] # a different list! +x.append(6) +y = "hello" + + +def foo(lst): + lst.append("hello") + bar(lst) + +def bar(myLst): + print(myLst) + +foo(x) diff --git a/v3/selection_sort_watch.py b/v3/selection_sort_watch.py new file mode 100644 index 000000000..622f949ed --- /dev/null +++ b/v3/selection_sort_watch.py @@ -0,0 +1,15 @@ +# created by Peter Norvig +from watch_module import watchfn, watchedlist + +# The decorator here says that the 0th positional argument should be a list; +# we will watch it, and the locals named i, mini, and min_index +@watchfn((watchedlist, 'i mini min_index')) +def selection_sort(A): + for i in range(len(A)): #break + mini = min(A[i:]) + min_index = A[i:].index(mini) + i + if i != min_index: + A[min_index], A[i] = A[i], A[min_index] + return A + +print(selection_sort([3, 5, 2, 1, 8, 5, 9])) diff --git a/v3/simple_sandbox.py b/v3/simple_sandbox.py new file mode 100644 index 000000000..e5752c0e3 --- /dev/null +++ b/v3/simple_sandbox.py @@ -0,0 +1,154 @@ +# This is a SUPER simple sandbox, with code copied from pg_logger.py +# It's not meant to be actually secure, so ALWAYS practice defense in +# depth and use it alongside more heavyweight OS-level sandboxing using, +# say, Linux containers, and in conjunction with other sandboxes like: +# https://github.com/cemc/safeexec +# +# tested so far on Linux 2.6.32 (x86-64) and Mac OS X 10.8 +# +# Philip Guo (philip@pgbovine.net) + +import bdb +import sys +import traceback +import types + +# TODO: use the 'six' package to smooth out Py2 and Py3 differences +is_python3 = (sys.version_info[0] == 3) + +if is_python3: + import io as cStringIO +else: + import cStringIO + + +#DEBUG = False +DEBUG = True + + +# simple sandboxing scheme: +# +# - use resource.setrlimit to deprive this process of ANY file descriptors +# (which will cause file read/write and subprocess shell launches to fail) +# - restrict user builtins and module imports +# (beware that this is NOT foolproof at all ... there are known flaws!) +# +# ALWAYS use defense-in-depth and don't just rely on these simple mechanisms +import resource + + +# whitelist of module imports +ALLOWED_MODULE_IMPORTS = ('doctest',) + +# PREEMPTIVELY import all of these modules, so that when the user's +# script imports them, it won't try to do a file read (since they've +# already been imported and cached in memory). Remember that when +# the user's code runs, resource.setrlimit(resource.RLIMIT_NOFILE, (0, 0)) +# will already be in effect, so no more files can be opened. +# +# NB: All modules in CUSTOM_MODULE_IMPORTS will be imported, warts and +# all, so they better work on Python 2 and 3! +for m in ALLOWED_MODULE_IMPORTS: + __import__(m) + + +# there's no point in banning builtins since malicious users can +# circumvent those anyways + + +class SandboxExecutor(bdb.Bdb): + def __init__(self, finalizer_func): + bdb.Bdb.__init__(self) + self.ORIGINAL_STDOUT = sys.stdout + self.ORIGINAL_STDERR = sys.stderr + self.executed_script = None # Python script to be executed! + + # a function that takes the output trace as a parameter and + # processes it + self.finalizer_func = finalizer_func + + + def _runscript(self, script_str): + self.executed_script = script_str + + self.user_stdout = cStringIO.StringIO() + self.user_stderr = cStringIO.StringIO() + + sys.stdout = self.user_stdout + sys.stderr = self.user_stderr + + try: + # enforce resource limits RIGHT BEFORE running script_str + + # set ~200MB virtual memory limit AND a 5-second CPU time + # limit (tuned for Webfaction shared hosting) to protect against + # memory bombs such as: + # x = 2 + # while True: x = x*x + resource.setrlimit(resource.RLIMIT_AS, (200000000, 200000000)) + resource.setrlimit(resource.RLIMIT_CPU, (5, 5)) + + # protect against unauthorized filesystem accesses ... + resource.setrlimit(resource.RLIMIT_NOFILE, (0, 0)) # no opened files allowed + + # VERY WEIRD. If you activate this resource limitation, it + # ends up generating an EMPTY trace for the following program: + # "x = 0\nfor i in range(10):\n x += 1\n print x\n x += 1\n" + # (at least on my Webfaction hosting with Python 2.7) + #resource.setrlimit(resource.RLIMIT_FSIZE, (0, 0)) # (redundancy for paranoia) + + # sys.modules contains an in-memory cache of already-loaded + # modules, so if you delete modules from here, they will + # need to be re-loaded from the filesystem. + # + # Thus, as an extra precaution, remove these modules so that + # they can't be re-imported without opening a new file, + # which is disallowed by resource.RLIMIT_NOFILE + # + # Of course, this isn't a foolproof solution by any means, + # and it might lead to UNEXPECTED FAILURES later in execution. + del sys.modules['os'] + del sys.modules['os.path'] + del sys.modules['sys'] + + # ... here we go! + self.run(script_str) + # sys.exit ... + except SystemExit: + raise bdb.BdbQuit + except: + if DEBUG: + traceback.print_exc() + raise bdb.BdbQuit # need to forceably STOP execution + + + def finalize(self): + sys.stdout = self.ORIGINAL_STDOUT + sys.stderr = self.ORIGINAL_STDERR + return self.finalizer_func(self) + + +def print_finalizer(executor): + #print 'DONE:' + #print executor.executed_script + print('stdout:') + print(executor.user_stdout.getvalue()) + print('stderr:') + print(executor.user_stderr.getvalue()) + + +# the MAIN meaty function!!! +def exec_str(script_str, finalizer): + logger = SandboxExecutor(finalizer) + + try: + logger._runscript(script_str) + except bdb.BdbQuit: + pass + finally: + return logger.finalize() + + +if __name__ == "__main__": + script = open(sys.argv[1]).read() + exec_str(script, print_finalizer) diff --git a/v3/support-and-privacy.html b/v3/support-and-privacy.html new file mode 100644 index 000000000..0fad297c8 --- /dev/null +++ b/v3/support-and-privacy.html @@ -0,0 +1,84 @@ + + + + + + + Online Python Tutor - Visualize program execution + + + + + + + + + +
    + +
    + +

    Online Python Tutor – support and privacy document

    + +

    +Online Python Tutor supports +Python 2.7 and 3.3, Java 7, JavaScript ES5 strict, and TypeScript 1.4.1 with limited module imports and no file I/O. +

    + +
    + +

    Support

    + +

    Have a question? Maybe the FAQ +or other documentation +can help. Or check out its code at GitHub.

    + +

    Email Philip Guo at philip@pgbovine.net for all support questions.

    + +
    + +

    Privacy

    + +

    By using Online Python Tutor, your visualized code, options, and IP +address are logged on our server and may be analyzed for research +purposes. Nearly all Web services collect this basic information from +users. However, Online Python Tutor does not collect any personal +information, cookies, or session state from users.

    + +

    +Copyright © Philip Guo. All rights reserved. +

    + +
    + + + diff --git a/v3/test-trace.js b/v3/test-trace.js new file mode 100644 index 000000000..d6e0b1c5b --- /dev/null +++ b/v3/test-trace.js @@ -0,0 +1 @@ +var trace = {"code": "x = 5\ny = 10\nz = x + y\n", "trace": [{"ordered_globals": [], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {}, "heap": {}, "line": 1, "event": "step_line"}, {"ordered_globals": ["x"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"x": 5}, "heap": {}, "line": 2, "event": "step_line"}, {"ordered_globals": ["x", "y"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"y": 10, "x": 5}, "heap": {}, "line": 3, "event": "step_line"}, {"ordered_globals": ["x", "y", "z"], "stdout": "", "func_name": "", "stack_to_render": [], "globals": {"y": 10, "x": 5, "z": 15}, "heap": {}, "line": 3, "event": "return"}]}; diff --git a/v3/tests/backend-tests/breakpoints.golden b/v3/tests/backend-tests/breakpoints.golden new file mode 100644 index 000000000..d7929e839 --- /dev/null +++ b/v3/tests/backend-tests/breakpoints.golden @@ -0,0 +1,1392 @@ +{ + "code": "# when '#break' is the last string in a line, then stop at only those lines\n\nx = [1, 2, 3]\ny = [4, 5, 6]\nz = y\ny = x\nx = z\n\nx = [1, 2, 3] # a different [1, 2, 3] list!\ny = x\nx.append(4) #break\ny.append(5)\nz = [1, 2, 3, 4, 5] # a different list! #break\nx.append(6)\ny.append(7)\ny = \"hello\" #break\n\n\ndef foo(lst): #break\n lst.append(\"hello\") #break\n bar(lst)\n\ndef bar(myLst):\n print(myLst) #break\n\nfoo(x)\nfoo(z)\n", + "trace": [ + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "myLst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 4 + ], + "bar": [ + "REF", + 5 + ], + "z": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "FUNCTION", + "foo(lst)", + null + ], + "5": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/breakpoints.golden_py3 b/v3/tests/backend-tests/breakpoints.golden_py3 new file mode 100644 index 000000000..0d936f878 --- /dev/null +++ b/v3/tests/backend-tests/breakpoints.golden_py3 @@ -0,0 +1,1392 @@ +{ + "code": "# when '#break' is the last string in a line, then stop at only those lines\n\nx = [1, 2, 3]\ny = [4, 5, 6]\nz = y\ny = x\nx = z\n\nx = [1, 2, 3] # a different [1, 2, 3] list!\ny = x\nx.append(4) #break\ny.append(5)\nz = [1, 2, 3, 4, 5] # a different list! #break\nx.append(6)\ny.append(7)\ny = \"hello\" #break\n\n\ndef foo(lst): #break\n lst.append(\"hello\") #break\n bar(lst)\n\ndef bar(myLst):\n print(myLst) #break\n\nfoo(x)\nfoo(z)\n", + "trace": [ + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "2": [ + "LIST", + 4, + 5, + 6 + ], + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 3 + ], + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ] + }, + "line": 23, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5 + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "myLst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null, + "myLst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f4", + "ordered_varnames": [ + "myLst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 24, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "foo", + "bar" + ], + "stdout": "[1, 2, 3, 4, 5, 6, 7, 'hello']\n[1, 2, 3, 4, 5, 'hello']\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": null, + "lst": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f3", + "ordered_varnames": [ + "lst", + "__return__" + ] + } + ], + "globals": { + "y": "hello", + "x": [ + "REF", + 3 + ], + "foo": [ + "REF", + 5 + ], + "bar": [ + "REF", + 6 + ], + "z": [ + "REF", + 4 + ] + }, + "heap": { + "3": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + 6, + 7, + "hello" + ], + "4": [ + "LIST", + 1, + 2, + 3, + 4, + 5, + "hello" + ], + "5": [ + "FUNCTION", + "foo(lst)", + null + ], + "6": [ + "FUNCTION", + "bar(myLst)", + null + ] + }, + "line": 21, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/breakpoints.txt b/v3/tests/backend-tests/breakpoints.txt new file mode 100644 index 000000000..338e45ad1 --- /dev/null +++ b/v3/tests/backend-tests/breakpoints.txt @@ -0,0 +1,27 @@ +# when '#break' is the last string in a line, then stop at only those lines + +x = [1, 2, 3] +y = [4, 5, 6] +z = y +y = x +x = z + +x = [1, 2, 3] # a different [1, 2, 3] list! +y = x +x.append(4) #break +y.append(5) +z = [1, 2, 3, 4, 5] # a different list! #break +x.append(6) +y.append(7) +y = "hello" #break + + +def foo(lst): #break + lst.append("hello") #break + bar(lst) + +def bar(myLst): + print(myLst) #break + +foo(x) +foo(z) diff --git a/v3/tests/backend-tests/bytearray.golden b/v3/tests/backend-tests/bytearray.golden new file mode 100644 index 000000000..6e47e975d --- /dev/null +++ b/v3/tests/backend-tests/bytearray.golden @@ -0,0 +1,71 @@ +{ + "code": "# reported as an error in server logs\nhex_string = \"deadbeef\"\nhex_data = hex_string.decode(\"hex\")\nnew = bytearray(hex_data)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "hex_string" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "hex_string": "deadbeef" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "hex_string", + "hex_data" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "hex_data": "\u07ad\ufffd\ufffd", + "hex_string": "deadbeef" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "hex_string", + "hex_data", + "new" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "new": [ + "REF", + 1 + ], + "hex_data": "\u07ad\ufffd\ufffd", + "hex_string": "deadbeef" + }, + "heap": { + "1": [ + "bytearray", + "\u07ad\ufffd\ufffd" + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/bytearray.golden_py3 b/v3/tests/backend-tests/bytearray.golden_py3 new file mode 100644 index 000000000..3c6b02d6b --- /dev/null +++ b/v3/tests/backend-tests/bytearray.golden_py3 @@ -0,0 +1,44 @@ +{ + "code": "# reported as an error in server logs\nhex_string = \"deadbeef\"\nhex_data = hex_string.decode(\"hex\")\nnew = bytearray(hex_data)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "hex_string" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "hex_string": "deadbeef" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "hex_string" + ], + "stdout": "", + "exception_msg": "AttributeError: 'str' object has no attribute 'decode'", + "func_name": "", + "stack_to_render": [], + "globals": { + "hex_string": "deadbeef" + }, + "heap": {}, + "line": 3, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/bytearray.txt b/v3/tests/backend-tests/bytearray.txt new file mode 100644 index 000000000..7b9627be0 --- /dev/null +++ b/v3/tests/backend-tests/bytearray.txt @@ -0,0 +1,4 @@ +# reported as an error in server logs +hex_string = "deadbeef" +hex_data = hex_string.decode("hex") +new = bytearray(hex_data) diff --git a/v3/tests/backend-tests/callback-test.golden b/v3/tests/backend-tests/callback-test.golden new file mode 100644 index 000000000..5cd262b52 --- /dev/null +++ b/v3/tests/backend-tests/callback-test.golden @@ -0,0 +1,518 @@ +{ + "code": "# Tests to make sure that OPT tracks execution from user code (foo) to a\n# function in an external module (callback_module.callback_func) and\n# then back out to user code (bar). If all goes well, then both foo and\n# bar will be displayed on the stack. Ideally\n# callback_module.callback_func should also be on the stack, but since\n# OPT doesn't trace external code, it simply ignores that stack entry.\n\n# The incorrect behavior is NOT to trace inside of bar.\n\n\nimport callback_module\n\ndef foo():\n callback_module.callback_func(bar)\n\ndef bar():\n print(\"I'm in a bar!!!\")\n \nfoo()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "I'm in a bar!!!\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 17, + "event": "return" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "I'm in a bar!!!\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "I'm in a bar!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "callback_module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 19, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/callback-test.golden_py3 b/v3/tests/backend-tests/callback-test.golden_py3 new file mode 100644 index 000000000..b0321dc55 --- /dev/null +++ b/v3/tests/backend-tests/callback-test.golden_py3 @@ -0,0 +1,518 @@ +{ + "code": "# Tests to make sure that OPT tracks execution from user code (foo) to a\n# function in an external module (callback_module.callback_func) and\n# then back out to user code (bar). If all goes well, then both foo and\n# bar will be displayed on the stack. Ideally\n# callback_module.callback_func should also be on the stack, but since\n# OPT doesn't trace external code, it simply ignores that stack entry.\n\n# The incorrect behavior is NOT to trace inside of bar.\n\n\nimport callback_module\n\ndef foo():\n callback_module.callback_func(bar)\n\ndef bar():\n print(\"I'm in a bar!!!\")\n \nfoo()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "I'm in a bar!!!\n", + "func_name": "bar", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": false, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "bar", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "bar_f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 17, + "event": "return" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "I'm in a bar!!!\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 14, + "event": "return" + }, + { + "ordered_globals": [ + "callback_module", + "foo", + "bar" + ], + "stdout": "I'm in a bar!!!\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "callback_module": [ + "REF", + 1 + ], + "bar": [ + "REF", + 3 + ], + "foo": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "foo()", + null + ], + "3": [ + "FUNCTION", + "bar()", + null + ] + }, + "line": 19, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/callback-test.txt b/v3/tests/backend-tests/callback-test.txt new file mode 100644 index 000000000..5faf076ff --- /dev/null +++ b/v3/tests/backend-tests/callback-test.txt @@ -0,0 +1,19 @@ +# Tests to make sure that OPT tracks execution from user code (foo) to a +# function in an external module (callback_module.callback_func) and +# then back out to user code (bar). If all goes well, then both foo and +# bar will be displayed on the stack. Ideally +# callback_module.callback_func should also be on the stack, but since +# OPT doesn't trace external code, it simply ignores that stack entry. + +# The incorrect behavior is NOT to trace inside of bar. + + +import callback_module + +def foo(): + callback_module.callback_func(bar) + +def bar(): + print("I'm in a bar!!!") + +foo() diff --git a/v3/tests/backend-tests/caught_exception_1.golden b/v3/tests/backend-tests/caught_exception_1.golden new file mode 100644 index 000000000..2418eb530 --- /dev/null +++ b/v3/tests/backend-tests/caught_exception_1.golden @@ -0,0 +1,66 @@ +{ + "code": "try:\n x = 1 / 0\nexcept:\n print(\"DIVIDE BY ZERO\")\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "exception" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "DIVIDE BY ZERO\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/caught_exception_1.golden_py3 b/v3/tests/backend-tests/caught_exception_1.golden_py3 new file mode 100644 index 000000000..b9d796a10 --- /dev/null +++ b/v3/tests/backend-tests/caught_exception_1.golden_py3 @@ -0,0 +1,66 @@ +{ + "code": "try:\n x = 1 / 0\nexcept:\n print(\"DIVIDE BY ZERO\")\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "exception" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "DIVIDE BY ZERO\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/caught_exception_1.txt b/v3/tests/backend-tests/caught_exception_1.txt new file mode 100644 index 000000000..ad24ed88b --- /dev/null +++ b/v3/tests/backend-tests/caught_exception_1.txt @@ -0,0 +1,5 @@ +try: + x = 1 / 0 +except: + print("DIVIDE BY ZERO") + diff --git a/v3/tests/backend-tests/caught_exception_2.golden b/v3/tests/backend-tests/caught_exception_2.golden new file mode 100644 index 000000000..a1452b2f6 --- /dev/null +++ b/v3/tests/backend-tests/caught_exception_2.golden @@ -0,0 +1,77 @@ +{ + "code": "# caught exception:\ntry:\n x = 1 / 0\nexcept:\n print(\"DIVIDE BY ZERO\")\n\n\n# uncaught:\nprint(y)\n\nprint(\"should not reach here\")\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "exception" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "DIVIDE BY ZERO\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "DIVIDE BY ZERO\n", + "exception_msg": "NameError: name 'y' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 9, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/caught_exception_2.golden_py3 b/v3/tests/backend-tests/caught_exception_2.golden_py3 new file mode 100644 index 000000000..c0fb9edc3 --- /dev/null +++ b/v3/tests/backend-tests/caught_exception_2.golden_py3 @@ -0,0 +1,77 @@ +{ + "code": "# caught exception:\ntry:\n x = 1 / 0\nexcept:\n print(\"DIVIDE BY ZERO\")\n\n\n# uncaught:\nprint(y)\n\nprint(\"should not reach here\")\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "exception" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "DIVIDE BY ZERO\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "DIVIDE BY ZERO\n", + "exception_msg": "NameError: name 'y' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 9, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/caught_exception_2.txt b/v3/tests/backend-tests/caught_exception_2.txt new file mode 100644 index 000000000..66768e16c --- /dev/null +++ b/v3/tests/backend-tests/caught_exception_2.txt @@ -0,0 +1,12 @@ +# caught exception: +try: + x = 1 / 0 +except: + print("DIVIDE BY ZERO") + + +# uncaught: +print(y) + +print("should not reach here") + diff --git a/v3/tests/backend-tests/circ_ref.golden b/v3/tests/backend-tests/circ_ref.golden new file mode 100644 index 000000000..ea8bc5c65 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref.golden @@ -0,0 +1,65 @@ +{ + "code": "# true circular reference\n\nx = [1, 2]\nx.append(x)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + [ + "REF", + 1 + ] + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/circ_ref.golden_py3 b/v3/tests/backend-tests/circ_ref.golden_py3 new file mode 100644 index 000000000..ea8bc5c65 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref.golden_py3 @@ -0,0 +1,65 @@ +{ + "code": "# true circular reference\n\nx = [1, 2]\nx.append(x)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + [ + "REF", + 1 + ] + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/circ_ref.txt b/v3/tests/backend-tests/circ_ref.txt new file mode 100644 index 000000000..7af6d5e6d --- /dev/null +++ b/v3/tests/backend-tests/circ_ref.txt @@ -0,0 +1,5 @@ +# true circular reference + +x = [1, 2] +x.append(x) + diff --git a/v3/tests/backend-tests/circ_ref_2.golden b/v3/tests/backend-tests/circ_ref_2.golden new file mode 100644 index 000000000..c1fb56894 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref_2.golden @@ -0,0 +1,116 @@ +{ + "code": "# true indirect circular reference\n\nx = [1, 2]\ny = [3, 4, x]\nx.append(y)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ], + "2": [ + "LIST", + 3, + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 3, + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/circ_ref_2.golden_py3 b/v3/tests/backend-tests/circ_ref_2.golden_py3 new file mode 100644 index 000000000..c1fb56894 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref_2.golden_py3 @@ -0,0 +1,116 @@ +{ + "code": "# true indirect circular reference\n\nx = [1, 2]\ny = [3, 4, x]\nx.append(y)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ], + "2": [ + "LIST", + 3, + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + [ + "REF", + 2 + ] + ], + "2": [ + "LIST", + 3, + 4, + [ + "REF", + 1 + ] + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/circ_ref_2.txt b/v3/tests/backend-tests/circ_ref_2.txt new file mode 100644 index 000000000..49502c869 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref_2.txt @@ -0,0 +1,6 @@ +# true indirect circular reference + +x = [1, 2] +y = [3, 4, x] +x.append(y) + diff --git a/v3/tests/backend-tests/circ_ref_fake.golden b/v3/tests/backend-tests/circ_ref_fake.golden new file mode 100644 index 000000000..11e8e7d50 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref_fake.golden @@ -0,0 +1,168 @@ +{ + "code": "# not a true circular reference\n\na = [10, 20, 30]\nb = a\nc = [10, 20, 30]\nd = (a, b, c)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "b": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b", + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "c": [ + "REF", + 2 + ], + "b": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ], + "2": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b", + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "c": [ + "REF", + 2 + ], + "b": [ + "REF", + 1 + ], + "d": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/circ_ref_fake.golden_py3 b/v3/tests/backend-tests/circ_ref_fake.golden_py3 new file mode 100644 index 000000000..11e8e7d50 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref_fake.golden_py3 @@ -0,0 +1,168 @@ +{ + "code": "# not a true circular reference\n\na = [10, 20, 30]\nb = a\nc = [10, 20, 30]\nd = (a, b, c)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "b": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b", + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "c": [ + "REF", + 2 + ], + "b": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ], + "2": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "a", + "b", + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ], + "c": [ + "REF", + 2 + ], + "b": [ + "REF", + 1 + ], + "d": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + 10, + 20, + 30 + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "TUPLE", + [ + "REF", + 1 + ], + [ + "REF", + 1 + ], + [ + "REF", + 2 + ] + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/circ_ref_fake.txt b/v3/tests/backend-tests/circ_ref_fake.txt new file mode 100644 index 000000000..3bbcc94f2 --- /dev/null +++ b/v3/tests/backend-tests/circ_ref_fake.txt @@ -0,0 +1,7 @@ +# not a true circular reference + +a = [10, 20, 30] +b = a +c = [10, 20, 30] +d = (a, b, c) + diff --git a/v3/tests/backend-tests/class_test.golden b/v3/tests/backend-tests/class_test.golden new file mode 100644 index 000000000..5266c9782 --- /dev/null +++ b/v3/tests/backend-tests/class_test.golden @@ -0,0 +1,1444 @@ +{ + "code": "class Point:\n def __init__(self, x, y):\n self.x = x\n self.y = y\n \n def __str__(self):\n return \"(%d, %d)\" % (self.x, self.y)\n\np = Point(1, 2)\nprint(p)\np2 = Point(3, -4)\nprint(p2)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ], + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "(1, 2)", + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ], + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f4", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f4", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": "(3, -4)", + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f4", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n(3, -4)\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/class_test.golden_py3 b/v3/tests/backend-tests/class_test.golden_py3 new file mode 100644 index 000000000..5266c9782 --- /dev/null +++ b/v3/tests/backend-tests/class_test.golden_py3 @@ -0,0 +1,1444 @@ +{ + "code": "class Point:\n def __init__(self, x, y):\n self.x = x\n self.y = y\n \n def __str__(self):\n return \"(%d, %d)\" % (self.x, self.y)\n\np = Point(1, 2)\nprint(p)\np2 = Point(3, -4)\nprint(p2)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "self": [ + "REF", + 4 + ], + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": "(1, 2)", + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p" + ], + "stdout": "(1, 2)\n", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "y": -4, + "x": 3, + "self": [ + "REF", + 5 + ], + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f3", + "ordered_varnames": [ + "self", + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f4", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f4", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n", + "func_name": "__str__", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": "(3, -4)", + "self": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__str__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__str___f4", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "Point", + "p", + "p2" + ], + "stdout": "(1, 2)\n(3, -4)\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "p2": [ + "REF", + 5 + ], + "p": [ + "REF", + 4 + ], + "Point": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Point", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "__str__", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self, x, y)", + null + ], + "3": [ + "FUNCTION", + "__str__(self)", + null + ], + "4": [ + "INSTANCE_PPRINT", + "Point", + "(1, 2)" + ], + "5": [ + "INSTANCE_PPRINT", + "Point", + "(3, -4)" + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/class_test.txt b/v3/tests/backend-tests/class_test.txt new file mode 100644 index 000000000..77d89420a --- /dev/null +++ b/v3/tests/backend-tests/class_test.txt @@ -0,0 +1,13 @@ +class Point: + def __init__(self, x, y): + self.x = x + self.y = y + + def __str__(self): + return "(%d, %d)" % (self.x, self.y) + +p = Point(1, 2) +print(p) +p2 = Point(3, -4) +print(p2) + diff --git a/v3/tests/backend-tests/class_test_2.golden b/v3/tests/backend-tests/class_test_2.golden new file mode 100644 index 000000000..83ed6755e --- /dev/null +++ b/v3/tests/backend-tests/class_test_2.golden @@ -0,0 +1,186 @@ +{ + "code": "class Outer():\n pass\n\no = Outer()\no.a = 5\no.b = \"Hi\"\nprint(o)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer", + [ + "a", + 5 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer", + [ + "a", + 5 + ], + [ + "b", + "Hi" + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "<__main__.Outer instance at 0xADDR>\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer", + [ + "a", + 5 + ], + [ + "b", + "Hi" + ] + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/class_test_2.golden_py3 b/v3/tests/backend-tests/class_test_2.golden_py3 new file mode 100644 index 000000000..55293b1d5 --- /dev/null +++ b/v3/tests/backend-tests/class_test_2.golden_py3 @@ -0,0 +1,186 @@ +{ + "code": "class Outer():\n pass\n\no = Outer()\no.a = 5\no.b = \"Hi\"\nprint(o)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer", + [ + "a", + 5 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer", + [ + "a", + 5 + ], + [ + "b", + "Hi" + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Outer", + "o" + ], + "stdout": "<__main__.Outer object at 0xADDR>\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Outer": [ + "REF", + 1 + ], + "o": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Outer", + [] + ], + "2": [ + "INSTANCE", + "Outer", + [ + "a", + 5 + ], + [ + "b", + "Hi" + ] + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/class_test_2.txt b/v3/tests/backend-tests/class_test_2.txt new file mode 100644 index 000000000..c6532c1b1 --- /dev/null +++ b/v3/tests/backend-tests/class_test_2.txt @@ -0,0 +1,8 @@ +class Outer(): + pass + +o = Outer() +o.a = 5 +o.b = "Hi" +print(o) + diff --git a/v3/tests/backend-tests/class_test_3.golden b/v3/tests/backend-tests/class_test_3.golden new file mode 100644 index 000000000..314304c78 --- /dev/null +++ b/v3/tests/backend-tests/class_test_3.golden @@ -0,0 +1,470 @@ +{ + "code": "class Staff601:\n course = '6.01'\n building = 34\n room = 501\n\npat = Staff601()\nprint(pat.course)\n\npat.name = 'Pat'\npat.age = 60\npat.role = 'Professor'\n\nprint(pat.building)\npat.building = 32\nprint(pat.building)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/class_test_3.golden_py3 b/v3/tests/backend-tests/class_test_3.golden_py3 new file mode 100644 index 000000000..314304c78 --- /dev/null +++ b/v3/tests/backend-tests/class_test_3.golden_py3 @@ -0,0 +1,470 @@ +{ + "code": "class Staff601:\n course = '6.01'\n building = 34\n room = 501\n\npat = Staff601()\nprint(pat.course)\n\npat.name = 'Pat'\npat.age = 60\npat.role = 'Professor'\n\nprint(pat.building)\npat.building = 32\nprint(pat.building)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "name", + "Pat" + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "Staff601", + "pat" + ], + "stdout": "6.01\n34\n32\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "Staff601": [ + "REF", + 1 + ], + "pat": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "CLASS", + "Staff601", + [], + [ + "building", + 34 + ], + [ + "course", + "6.01" + ], + [ + "room", + 501 + ] + ], + "2": [ + "INSTANCE", + "Staff601", + [ + "age", + 60 + ], + [ + "building", + 32 + ], + [ + "name", + "Pat" + ], + [ + "role", + "Professor" + ] + ] + }, + "line": 15, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/class_test_3.txt b/v3/tests/backend-tests/class_test_3.txt new file mode 100644 index 000000000..55c604882 --- /dev/null +++ b/v3/tests/backend-tests/class_test_3.txt @@ -0,0 +1,16 @@ +class Staff601: + course = '6.01' + building = 34 + room = 501 + +pat = Staff601() +print(pat.course) + +pat.name = 'Pat' +pat.age = 60 +pat.role = 'Professor' + +print(pat.building) +pat.building = 32 +print(pat.building) + diff --git a/v3/tests/backend-tests/closure-shadow-same-name.golden b/v3/tests/backend-tests/closure-shadow-same-name.golden new file mode 100644 index 000000000..5f17e5c8b --- /dev/null +++ b/v3/tests/backend-tests/closure-shadow-same-name.golden @@ -0,0 +1,505 @@ +{ + "code": "# some of the params in f and g have identical names AND values,\n# so make sure they're all displayed properly\ndef f(x, y, z):\n def g(x, y):\n return x\n return g(x, y)\n\nf(1, 2, 3)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y", + "z" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y", + "z" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "y", + "z", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/closure-shadow-same-name.golden_py3 b/v3/tests/backend-tests/closure-shadow-same-name.golden_py3 new file mode 100644 index 000000000..5f17e5c8b --- /dev/null +++ b/v3/tests/backend-tests/closure-shadow-same-name.golden_py3 @@ -0,0 +1,505 @@ +{ + "code": "# some of the params in f and g have identical names AND values,\n# so make sure they're all displayed properly\ndef f(x, y, z):\n def g(x, y):\n return x\n return g(x, y)\n\nf(1, 2, 3)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y", + "z" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y", + "z" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "z", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 1, + "z": 3, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "y", + "z", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y, z)", + null + ], + "2": [ + "FUNCTION", + "g(x, y)", + 1 + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/closure-shadow-same-name.txt b/v3/tests/backend-tests/closure-shadow-same-name.txt new file mode 100644 index 000000000..13d20e618 --- /dev/null +++ b/v3/tests/backend-tests/closure-shadow-same-name.txt @@ -0,0 +1,8 @@ +# some of the params in f and g have identical names AND values, +# so make sure they're all displayed properly +def f(x, y, z): + def g(x, y): + return x + return g(x, y) + +f(1, 2, 3) diff --git a/v3/tests/backend-tests/cmodule.golden b/v3/tests/backend-tests/cmodule.golden new file mode 100644 index 000000000..e29fbc456 --- /dev/null +++ b/v3/tests/backend-tests/cmodule.golden @@ -0,0 +1,37 @@ +{ + "code": "# importing some C-ish module ...\n# make sure this doesn't crash in Python 2 or 3\nfrom datetime import datetime_CAPI\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "datetime_CAPI" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "datetime_CAPI": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "PyCapsule", + "" + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/cmodule.golden_py3 b/v3/tests/backend-tests/cmodule.golden_py3 new file mode 100644 index 000000000..562a7996a --- /dev/null +++ b/v3/tests/backend-tests/cmodule.golden_py3 @@ -0,0 +1,37 @@ +{ + "code": "# importing some C-ish module ...\n# make sure this doesn't crash in Python 2 or 3\nfrom datetime import datetime_CAPI\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "datetime_CAPI" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "datetime_CAPI": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "PyCapsule" + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/cmodule.txt b/v3/tests/backend-tests/cmodule.txt new file mode 100644 index 000000000..53bb90850 --- /dev/null +++ b/v3/tests/backend-tests/cmodule.txt @@ -0,0 +1,3 @@ +# importing some C-ish module ... +# make sure this doesn't crash in Python 2 or 3 +from datetime import datetime_CAPI diff --git a/v3/tests/backend-tests/cs61a-multi-lambdas.golden b/v3/tests/backend-tests/cs61a-multi-lambdas.golden new file mode 100644 index 000000000..9a42aa6db --- /dev/null +++ b/v3/tests/backend-tests/cs61a-multi-lambdas.golden @@ -0,0 +1,2330 @@ +{ + "code": "# from Berkeley cs61a\ndef f(x):\n return lambda x: lambda x: x+x+x\n\nh = lambda x: x+x+x # identical code to line 3\n\ng = f(3)\ng(4)(6)\n\nf(1)(2)(5)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 18, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 5, + 4 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 5, + 4 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 15, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 5, + 4 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 4 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/cs61a-multi-lambdas.golden_py3 b/v3/tests/backend-tests/cs61a-multi-lambdas.golden_py3 new file mode 100644 index 000000000..a488fda55 --- /dev/null +++ b/v3/tests/backend-tests/cs61a-multi-lambdas.golden_py3 @@ -0,0 +1,2330 @@ +{ + "code": "# from Berkeley cs61a\ndef f(x):\n return lambda x: lambda x: x+x+x\n\nh = lambda x: x+x+x # identical code to line 3\n\ng = f(3)\ng(4)(6)\n\nf(1)(2)(5)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 18, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5_p", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 5, + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 5, + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 15, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 5, + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "x": 3 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "x": 4 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "x": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f4_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "x": 2 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5_p_z", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 2 + ], + "g": [ + "REF", + 3 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 2 + ], + "5": [ + "FUNCTION", + "(x) ", + 4 + ], + "6": [ + "FUNCTION", + "(x) ", + 5 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/cs61a-multi-lambdas.txt b/v3/tests/backend-tests/cs61a-multi-lambdas.txt new file mode 100644 index 000000000..973f35267 --- /dev/null +++ b/v3/tests/backend-tests/cs61a-multi-lambdas.txt @@ -0,0 +1,10 @@ +# from Berkeley cs61a +def f(x): + return lambda x: lambda x: x+x+x + +h = lambda x: x+x+x # identical code to line 3 + +g = f(3) +g(4)(6) + +f(1)(2)(5) diff --git a/v3/tests/backend-tests/data_test.golden b/v3/tests/backend-tests/data_test.golden new file mode 100644 index 000000000..68e3251eb --- /dev/null +++ b/v3/tests/backend-tests/data_test.golden @@ -0,0 +1,213 @@ +{ + "code": "x = ('hello', 'world', 1, 2, 3, 'goodbye')\ny = list(x)\nz = set(x)\nw = {\"joe\" : 5, \"mindy\" : 6, \"jack\" : 7}\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "2": [ + "LIST", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "2": [ + "LIST", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "3": [ + "SET", + 1, + 2, + 3, + "goodbye", + "world", + "hello" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "w" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 3 + ], + "w": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "2": [ + "LIST", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "3": [ + "SET", + 1, + 2, + 3, + "goodbye", + "world", + "hello" + ], + "4": [ + "DICT", + [ + "mindy", + 6 + ], + [ + "joe", + 5 + ], + [ + "jack", + 7 + ] + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/data_test.golden_py3 b/v3/tests/backend-tests/data_test.golden_py3 new file mode 100644 index 000000000..68e3251eb --- /dev/null +++ b/v3/tests/backend-tests/data_test.golden_py3 @@ -0,0 +1,213 @@ +{ + "code": "x = ('hello', 'world', 1, 2, 3, 'goodbye')\ny = list(x)\nz = set(x)\nw = {\"joe\" : 5, \"mindy\" : 6, \"jack\" : 7}\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "2": [ + "LIST", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "2": [ + "LIST", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "3": [ + "SET", + 1, + 2, + 3, + "goodbye", + "world", + "hello" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "w" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 3 + ], + "w": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "TUPLE", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "2": [ + "LIST", + "hello", + "world", + 1, + 2, + 3, + "goodbye" + ], + "3": [ + "SET", + 1, + 2, + 3, + "goodbye", + "world", + "hello" + ], + "4": [ + "DICT", + [ + "mindy", + 6 + ], + [ + "joe", + 5 + ], + [ + "jack", + 7 + ] + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/data_test.txt b/v3/tests/backend-tests/data_test.txt new file mode 100644 index 000000000..664717167 --- /dev/null +++ b/v3/tests/backend-tests/data_test.txt @@ -0,0 +1,4 @@ +x = ('hello', 'world', 1, 2, 3, 'goodbye') +y = list(x) +z = set(x) +w = {"joe" : 5, "mindy" : 6, "jack" : 7} diff --git a/v3/tests/backend-tests/dict_error.golden b/v3/tests/backend-tests/dict_error.golden new file mode 100644 index 000000000..1d65cbe41 --- /dev/null +++ b/v3/tests/backend-tests/dict_error.golden @@ -0,0 +1,207 @@ +{ + "code": "def foo():\n local_y[('tup', 'le')] = set([1, 2, 3])\n\nfoo()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "exception_msg": "NameError: global name 'local_y' is not defined", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 2, + "event": "exception" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "exception_msg": "NameError: global name 'local_y' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 4, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/dict_error.golden_py3 b/v3/tests/backend-tests/dict_error.golden_py3 new file mode 100644 index 000000000..1d65cbe41 --- /dev/null +++ b/v3/tests/backend-tests/dict_error.golden_py3 @@ -0,0 +1,207 @@ +{ + "code": "def foo():\n local_y[('tup', 'le')] = set([1, 2, 3])\n\nfoo()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "exception_msg": "NameError: global name 'local_y' is not defined", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 2, + "event": "exception" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "foo" + ], + "stdout": "", + "exception_msg": "NameError: global name 'local_y' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": { + "foo": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 4, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/dict_error.txt b/v3/tests/backend-tests/dict_error.txt new file mode 100644 index 000000000..fb6ed90ee --- /dev/null +++ b/v3/tests/backend-tests/dict_error.txt @@ -0,0 +1,4 @@ +def foo(): + local_y[('tup', 'le')] = set([1, 2, 3]) + +foo() diff --git a/v3/tests/backend-tests/dict_test.golden b/v3/tests/backend-tests/dict_test.golden new file mode 100644 index 000000000..0c05ae2da --- /dev/null +++ b/v3/tests/backend-tests/dict_test.golden @@ -0,0 +1,730 @@ +{ + "code": "x = {1 : 2}\nx[('tup', 'le')] = set([1, 2, 3])\n\ndef foo():\n local_x = {1 : 2}\n local_y = {}\n local_y[('tup', 'le')] = set([1, 2, 3])\n print(\"hello\", list(local_y.values()))\n\nfoo()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "local_y": [ + "REF", + 6 + ], + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x", + "local_y" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ], + "6": [ + "DICT" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "local_y": [ + "REF", + 6 + ], + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x", + "local_y" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ], + "6": [ + "DICT", + [ + [ + "REF", + 7 + ], + [ + "REF", + 8 + ] + ] + ], + "7": [ + "TUPLE", + "tup", + "le" + ], + "8": [ + "SET", + 1, + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "('hello', [set([1, 2, 3])])\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "local_y": [ + "REF", + 6 + ], + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x", + "local_y", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ], + "6": [ + "DICT", + [ + [ + "REF", + 7 + ], + [ + "REF", + 8 + ] + ] + ], + "7": [ + "TUPLE", + "tup", + "le" + ], + "8": [ + "SET", + 1, + 2, + 3 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "('hello', [set([1, 2, 3])])\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/dict_test.golden_py3 b/v3/tests/backend-tests/dict_test.golden_py3 new file mode 100644 index 000000000..cb382cbf5 --- /dev/null +++ b/v3/tests/backend-tests/dict_test.golden_py3 @@ -0,0 +1,730 @@ +{ + "code": "x = {1 : 2}\nx[('tup', 'le')] = set([1, 2, 3])\n\ndef foo():\n local_x = {1 : 2}\n local_y = {}\n local_y[('tup', 'le')] = set([1, 2, 3])\n print(\"hello\", list(local_y.values()))\n\nfoo()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ] + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "local_y": [ + "REF", + 6 + ], + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x", + "local_y" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ], + "6": [ + "DICT" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "local_y": [ + "REF", + 6 + ], + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x", + "local_y" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ], + "6": [ + "DICT", + [ + [ + "REF", + 7 + ], + [ + "REF", + 8 + ] + ] + ], + "7": [ + "TUPLE", + "tup", + "le" + ], + "8": [ + "SET", + 1, + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "hello [{1, 2, 3}]\n", + "func_name": "foo", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "local_y": [ + "REF", + 6 + ], + "local_x": [ + "REF", + 5 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "foo", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "foo_f1", + "ordered_varnames": [ + "local_x", + "local_y", + "__return__" + ] + } + ], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ], + "5": [ + "DICT", + [ + 1, + 2 + ] + ], + "6": [ + "DICT", + [ + [ + "REF", + 7 + ], + [ + "REF", + 8 + ] + ] + ], + "7": [ + "TUPLE", + "tup", + "le" + ], + "8": [ + "SET", + 1, + 2, + 3 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "foo" + ], + "stdout": "hello [{1, 2, 3}]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "foo": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "DICT", + [ + 1, + 2 + ], + [ + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + ], + "2": [ + "TUPLE", + "tup", + "le" + ], + "3": [ + "SET", + 1, + 2, + 3 + ], + "4": [ + "FUNCTION", + "foo()", + null + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/dict_test.txt b/v3/tests/backend-tests/dict_test.txt new file mode 100644 index 000000000..15294a473 --- /dev/null +++ b/v3/tests/backend-tests/dict_test.txt @@ -0,0 +1,10 @@ +x = {1 : 2} +x[('tup', 'le')] = set([1, 2, 3]) + +def foo(): + local_x = {1 : 2} + local_y = {} + local_y[('tup', 'le')] = set([1, 2, 3]) + print("hello", list(local_y.values())) + +foo() diff --git a/v3/tests/backend-tests/exec_test.golden b/v3/tests/backend-tests/exec_test.golden new file mode 100644 index 000000000..a6a43ad21 --- /dev/null +++ b/v3/tests/backend-tests/exec_test.golden @@ -0,0 +1,67 @@ +{ + "code": "exec(\"import os; os.system('echo security breach')\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ImportError: os not supported", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "exception" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "return" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ImportError: os not supported", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/exec_test.golden_py3 b/v3/tests/backend-tests/exec_test.golden_py3 new file mode 100644 index 000000000..f8b44bb26 --- /dev/null +++ b/v3/tests/backend-tests/exec_test.golden_py3 @@ -0,0 +1,26 @@ +{ + "code": "exec(\"import os; os.system('echo security breach')\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "NameError: name 'exec' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/exec_test.txt b/v3/tests/backend-tests/exec_test.txt new file mode 100644 index 000000000..7c8c740c7 --- /dev/null +++ b/v3/tests/backend-tests/exec_test.txt @@ -0,0 +1 @@ +exec("import os; os.system('echo security breach')") diff --git a/v3/tests/backend-tests/func_exception.golden b/v3/tests/backend-tests/func_exception.golden new file mode 100644 index 000000000..08975e74f --- /dev/null +++ b/v3/tests/backend-tests/func_exception.golden @@ -0,0 +1,270 @@ +{ + "code": "def g(x,y):\n print(\"In g\")\n ans = x/y\n return ans\n \ng(5, 0)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 3, + "event": "exception" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5, + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "exception_msg": "ZeroDivisionError: integer division or modulo by zero", + "func_name": "", + "stack_to_render": [], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 6, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/func_exception.golden_py3 b/v3/tests/backend-tests/func_exception.golden_py3 new file mode 100644 index 000000000..537097da9 --- /dev/null +++ b/v3/tests/backend-tests/func_exception.golden_py3 @@ -0,0 +1,270 @@ +{ + "code": "def g(x,y):\n print(\"In g\")\n ans = x/y\n return ans\n \ng(5, 0)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 3, + "event": "exception" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 0, + "x": 5, + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "g_f1", + "ordered_varnames": [ + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "g" + ], + "stdout": "In g\n", + "exception_msg": "ZeroDivisionError: division by zero", + "func_name": "", + "stack_to_render": [], + "globals": { + "g": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "g(x, y)", + null + ] + }, + "line": 6, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/func_exception.txt b/v3/tests/backend-tests/func_exception.txt new file mode 100644 index 000000000..991a8253d --- /dev/null +++ b/v3/tests/backend-tests/func_exception.txt @@ -0,0 +1,7 @@ +def g(x,y): + print("In g") + ans = x/y + return ans + +g(5, 0) + diff --git a/v3/tests/backend-tests/generator_test.golden b/v3/tests/backend-tests/generator_test.golden new file mode 100644 index 000000000..845c6114f --- /dev/null +++ b/v3/tests/backend-tests/generator_test.golden @@ -0,0 +1,100 @@ +{ + "code": "x = (e for e in range(10))\ny = x\nz = (e for e in range(10))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "generator", + " at 0xADDR>" + ], + "2": [ + "generator", + " at 0xADDR>" + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/generator_test.golden_py3 b/v3/tests/backend-tests/generator_test.golden_py3 new file mode 100644 index 000000000..9a61882ef --- /dev/null +++ b/v3/tests/backend-tests/generator_test.golden_py3 @@ -0,0 +1,100 @@ +{ + "code": "x = (e for e in range(10))\ny = x\nz = (e for e in range(10))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 1 + ], + "x": [ + "REF", + 1 + ], + "z": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "generator" + ], + "2": [ + "INSTANCE", + "generator" + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/generator_test.txt b/v3/tests/backend-tests/generator_test.txt new file mode 100644 index 000000000..f17609e64 --- /dev/null +++ b/v3/tests/backend-tests/generator_test.txt @@ -0,0 +1,3 @@ +x = (e for e in range(10)) +y = x +z = (e for e in range(10)) diff --git a/v3/tests/backend-tests/generator_use_test.golden b/v3/tests/backend-tests/generator_use_test.golden new file mode 100644 index 000000000..34e21934f --- /dev/null +++ b/v3/tests/backend-tests/generator_use_test.golden @@ -0,0 +1,10982 @@ +{ + "code": "def gen_odds():\n x = 1\n while True:\n yield x\n x += 2\n\nfor i in gen_odds():\n print(i)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": 5, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": 7, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "__return__": 9, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "__return__": 11, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "__return__": 13, + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "__return__": 15, + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "__return__": 17, + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "__return__": 19, + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "__return__": 21, + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "__return__": 23, + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "__return__": 25, + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "__return__": 27, + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "__return__": 29, + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "__return__": 31, + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "__return__": 33, + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "__return__": 35, + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "__return__": 37, + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "__return__": 39, + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "__return__": 41, + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "__return__": 43, + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "__return__": 45, + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "__return__": 47, + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "__return__": 49, + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "__return__": 51, + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "__return__": 53, + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "__return__": 55, + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "__return__": 57, + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "__return__": 59, + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "__return__": 61, + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "__return__": 63, + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "__return__": 65, + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "__return__": 67, + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "__return__": 69, + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "__return__": 71, + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "__return__": 73, + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "__return__": 75, + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "__return__": 77, + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "__return__": 79, + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "__return__": 81, + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "__return__": 83, + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 85 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 85 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/generator_use_test.golden_py3 b/v3/tests/backend-tests/generator_use_test.golden_py3 new file mode 100644 index 000000000..5bb2c43a8 --- /dev/null +++ b/v3/tests/backend-tests/generator_use_test.golden_py3 @@ -0,0 +1,10772 @@ +{ + "code": "def gen_odds():\n x = 1\n while True:\n yield x\n x += 2\n\nfor i in gen_odds():\n print(i)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds" + ], + "stdout": "", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f1", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": 3, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 1, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 3, + "encoded_locals": { + "__return__": 5, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 3, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 4, + "encoded_locals": { + "__return__": 7, + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 5, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 7 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 5, + "encoded_locals": { + "__return__": 9, + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 7, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 9 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 6, + "encoded_locals": { + "__return__": 11, + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 9, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 11 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 7, + "encoded_locals": { + "__return__": 13, + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 11, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 8, + "encoded_locals": { + "__return__": 15, + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f8", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 13, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 9, + "encoded_locals": { + "__return__": 17, + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 15, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 17 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 10, + "encoded_locals": { + "__return__": 19, + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f10", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 17, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 19 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 11, + "encoded_locals": { + "__return__": 21, + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 19, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 21 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 12, + "encoded_locals": { + "__return__": 23, + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f12", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 21, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 23 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 13, + "encoded_locals": { + "__return__": 25, + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f13", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 23, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 25 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 14, + "encoded_locals": { + "__return__": 27, + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f14", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 25, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 27 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 15, + "encoded_locals": { + "__return__": 29, + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f15", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 27, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 29 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 16, + "encoded_locals": { + "__return__": 31, + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f16", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 29, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 31 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 17, + "encoded_locals": { + "__return__": 33, + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f17", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 31, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 33 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 18, + "encoded_locals": { + "__return__": 35, + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f18", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 33, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 35 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 19, + "encoded_locals": { + "__return__": 37, + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f19", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 35, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 37 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 20, + "encoded_locals": { + "__return__": 39, + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f20", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 37, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 39 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 21, + "encoded_locals": { + "__return__": 41, + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f21", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 39, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 41 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 22, + "encoded_locals": { + "__return__": 43, + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f22", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 41, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 43 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 23, + "encoded_locals": { + "__return__": 45, + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f23", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 43, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 45 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 24, + "encoded_locals": { + "__return__": 47, + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f24", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 45, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 47 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 25, + "encoded_locals": { + "__return__": 49, + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f25", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 47, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 49 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 26, + "encoded_locals": { + "__return__": 51, + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f26", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 49, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 51 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 27, + "encoded_locals": { + "__return__": 53, + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f27", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 51, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 53 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 28, + "encoded_locals": { + "__return__": 55, + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f28", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 53, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 55 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 29, + "encoded_locals": { + "__return__": 57, + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f29", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 55, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 57 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 30, + "encoded_locals": { + "__return__": 59, + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f30", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 57, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 59 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 31, + "encoded_locals": { + "__return__": 61, + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f31", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 59, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 61 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 32, + "encoded_locals": { + "__return__": 63, + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f32", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 61, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 63 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 33, + "encoded_locals": { + "__return__": 65, + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f33", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 63, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 34, + "encoded_locals": { + "__return__": 67, + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f34", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 65, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 67 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 35, + "encoded_locals": { + "__return__": 69, + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f35", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 67, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 69 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 36, + "encoded_locals": { + "__return__": 71, + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f36", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 69, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 71 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 37, + "encoded_locals": { + "__return__": 73, + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f37", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 71, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 73 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 38, + "encoded_locals": { + "__return__": 75, + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f38", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 73, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 75 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 39, + "encoded_locals": { + "__return__": 77, + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f39", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 75, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 77 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 40, + "encoded_locals": { + "__return__": 79, + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f40", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 77, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 79 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 41, + "encoded_locals": { + "__return__": 81, + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f41", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 79, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 81 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 42, + "encoded_locals": { + "__return__": 83, + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f42", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 81, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 83 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "x": 85 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 43, + "encoded_locals": { + "__return__": 85, + "x": 85 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f43", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 83, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 85, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 85, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 44, + "encoded_locals": { + "x": 85 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f44", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 85, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 44, + "encoded_locals": { + "x": 85 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f44", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 85, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 44, + "encoded_locals": { + "x": 87 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f44", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 85, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 44, + "encoded_locals": { + "__return__": 87, + "x": 87 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f44", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 85, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 87, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 87, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 45, + "encoded_locals": { + "x": 87 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f45", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 87, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 45, + "encoded_locals": { + "x": 87 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f45", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 87, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 45, + "encoded_locals": { + "x": 89 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f45", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 87, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 45, + "encoded_locals": { + "__return__": 89, + "x": 89 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f45", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 87, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 89, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 89, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 46, + "encoded_locals": { + "x": 89 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f46", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 89, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 46, + "encoded_locals": { + "x": 89 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f46", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 89, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 46, + "encoded_locals": { + "x": 91 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f46", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 89, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 46, + "encoded_locals": { + "__return__": 91, + "x": 91 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f46", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 89, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 91, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 91, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 47, + "encoded_locals": { + "x": 91 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f47", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 91, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 47, + "encoded_locals": { + "x": 91 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f47", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 91, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 47, + "encoded_locals": { + "x": 93 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f47", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 91, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 47, + "encoded_locals": { + "__return__": 93, + "x": 93 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f47", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 91, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 93, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 93, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 48, + "encoded_locals": { + "x": 93 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f48", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 93, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 48, + "encoded_locals": { + "x": 93 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f48", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 93, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 48, + "encoded_locals": { + "x": 95 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f48", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 93, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 48, + "encoded_locals": { + "__return__": 95, + "x": 95 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f48", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 93, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 95, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 95, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 49, + "encoded_locals": { + "x": 95 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f49", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 95, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 49, + "encoded_locals": { + "x": 95 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f49", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 95, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 49, + "encoded_locals": { + "x": 97 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f49", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 95, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 49, + "encoded_locals": { + "__return__": 97, + "x": 97 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f49", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "i": 95, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 97, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n97\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 97, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n97\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 50, + "encoded_locals": { + "x": 97 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f50", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 97, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n97\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 50, + "encoded_locals": { + "x": 97 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f50", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 97, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "gen_odds", + "i" + ], + "stdout": "1\n3\n5\n7\n9\n11\n13\n15\n17\n19\n21\n23\n25\n27\n29\n31\n33\n35\n37\n39\n41\n43\n45\n47\n49\n51\n53\n55\n57\n59\n61\n63\n65\n67\n69\n71\n73\n75\n77\n79\n81\n83\n85\n87\n89\n91\n93\n95\n97\n", + "func_name": "gen_odds", + "stack_to_render": [ + { + "frame_id": 50, + "encoded_locals": { + "x": 99 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "gen_odds", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "gen_odds_f50", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "i": 97, + "gen_odds": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "gen_odds()", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/generator_use_test.txt b/v3/tests/backend-tests/generator_use_test.txt new file mode 100644 index 000000000..d4aee1010 --- /dev/null +++ b/v3/tests/backend-tests/generator_use_test.txt @@ -0,0 +1,9 @@ +def gen_odds(): + x = 1 + while True: + yield x + x += 2 + +for i in gen_odds(): + print(i) + diff --git a/v3/tests/backend-tests/import_error.golden b/v3/tests/backend-tests/import_error.golden new file mode 100644 index 000000000..96e9fa679 --- /dev/null +++ b/v3/tests/backend-tests/import_error.golden @@ -0,0 +1,26 @@ +{ + "code": "# should NOT allow for any imports\nimport os\n\nos.system(\"echo security breach\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ImportError: os not supported", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/import_error.golden_py3 b/v3/tests/backend-tests/import_error.golden_py3 new file mode 100644 index 000000000..96e9fa679 --- /dev/null +++ b/v3/tests/backend-tests/import_error.golden_py3 @@ -0,0 +1,26 @@ +{ + "code": "# should NOT allow for any imports\nimport os\n\nos.system(\"echo security breach\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "ImportError: os not supported", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/import_error.txt b/v3/tests/backend-tests/import_error.txt new file mode 100644 index 000000000..028a74e54 --- /dev/null +++ b/v3/tests/backend-tests/import_error.txt @@ -0,0 +1,4 @@ +# should NOT allow for any imports +import os + +os.system("echo security breach") diff --git a/v3/tests/backend-tests/inf-nan.golden b/v3/tests/backend-tests/inf-nan.golden new file mode 100644 index 000000000..0ea44ee8b --- /dev/null +++ b/v3/tests/backend-tests/inf-nan.golden @@ -0,0 +1,81 @@ +{ + "code": "x = float('inf')\ny = float('-inf')\nz = float('nan')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "SPECIAL_FLOAT", + "Infinity" + ] + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "SPECIAL_FLOAT", + "-Infinity" + ], + "x": [ + "SPECIAL_FLOAT", + "Infinity" + ] + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "SPECIAL_FLOAT", + "-Infinity" + ], + "x": [ + "SPECIAL_FLOAT", + "Infinity" + ], + "z": [ + "SPECIAL_FLOAT", + "NaN" + ] + }, + "heap": {}, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/inf-nan.golden_py3 b/v3/tests/backend-tests/inf-nan.golden_py3 new file mode 100644 index 000000000..0ea44ee8b --- /dev/null +++ b/v3/tests/backend-tests/inf-nan.golden_py3 @@ -0,0 +1,81 @@ +{ + "code": "x = float('inf')\ny = float('-inf')\nz = float('nan')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "SPECIAL_FLOAT", + "Infinity" + ] + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "SPECIAL_FLOAT", + "-Infinity" + ], + "x": [ + "SPECIAL_FLOAT", + "Infinity" + ] + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "SPECIAL_FLOAT", + "-Infinity" + ], + "x": [ + "SPECIAL_FLOAT", + "Infinity" + ], + "z": [ + "SPECIAL_FLOAT", + "NaN" + ] + }, + "heap": {}, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/inf-nan.txt b/v3/tests/backend-tests/inf-nan.txt new file mode 100644 index 000000000..ff814ed49 --- /dev/null +++ b/v3/tests/backend-tests/inf-nan.txt @@ -0,0 +1,3 @@ +x = float('inf') +y = float('-inf') +z = float('nan') diff --git a/v3/tests/backend-tests/infinite-loop-try-except.golden_py3 b/v3/tests/backend-tests/infinite-loop-try-except.golden_py3 new file mode 100644 index 000000000..27a0ed160 --- /dev/null +++ b/v3/tests/backend-tests/infinite-loop-try-except.golden_py3 @@ -0,0 +1,3009 @@ +{ + "code": "# a try/except inside of an infinite loop\nwhile True:\n try:\n print(\"good\")\n except:\n print(\"bad\")\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "good\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\ngood\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/infinite-loop-try-except.txt b/v3/tests/backend-tests/infinite-loop-try-except.txt new file mode 100644 index 000000000..a205ae5bb --- /dev/null +++ b/v3/tests/backend-tests/infinite-loop-try-except.txt @@ -0,0 +1,7 @@ +# a try/except inside of an infinite loop +while True: + try: + print("good") + except: + print("bad") + diff --git a/v3/tests/backend-tests/infinite_loop.golden b/v3/tests/backend-tests/infinite_loop.golden new file mode 100644 index 000000000..217546644 --- /dev/null +++ b/v3/tests/backend-tests/infinite_loop.golden @@ -0,0 +1,7545 @@ +{ + "code": "# Fibonacci!!!\n\narr = [1, 1]\n\nprint(arr[0])\n\nwhile True:\n print(arr[-1])\n tmp = sum(arr)\n arr.append(tmp)\n del arr[0]\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1, + 2 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 5 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5, + 8 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8, + 13 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13, + 21 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21, + 34 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34, + 55 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55, + 89 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89, + 144 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144, + 233 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233, + 377 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377, + 610 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610, + 987 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987, + 1597 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597, + 2584 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584, + 4181 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181, + 6765 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765, + 10946 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946, + 17711 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711, + 28657 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657, + 46368 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368, + 75025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025, + 121393 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393, + 196418 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418, + 317811 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811, + 514229 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229, + 832040 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040, + 1346269 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269, + 2178309 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309, + 3524578 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578, + 5702887 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887, + 9227465 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465, + 14930352 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352, + 24157817 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817, + 39088169 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169, + 63245986 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986, + 102334155 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155, + 165580141 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141, + 267914296 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296, + 433494437 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437, + 701408733 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733, + 1134903170 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170, + 1836311903 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903, + 2971215073 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073, + 4807526976 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976, + 7778742049 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049, + 12586269025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025, + 20365011074 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074, + 32951280099 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099, + 53316291173 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173, + 86267571272 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272, + 139583862445 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445, + 225851433717 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717, + 365435296162 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162, + 591286729879 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879, + 956722026041 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041, + 1548008755920 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920, + 2504730781961 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/infinite_loop.golden_py3 b/v3/tests/backend-tests/infinite_loop.golden_py3 new file mode 100644 index 000000000..ed5d62820 --- /dev/null +++ b/v3/tests/backend-tests/infinite_loop.golden_py3 @@ -0,0 +1,7560 @@ +{ + "code": "# Fibonacci!!!\n\narr = [1, 1]\n\nprint(arr[0])\n\nwhile True:\n print(arr[-1])\n tmp = sum(arr)\n arr.append(tmp)\n del arr[0]\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 1, + 2 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2, + 3, + 5 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3, + 5, + 8 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 8, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5, + 8, + 13 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 13, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 8, + 13, + 21 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 21, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 13, + 21, + 34 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 34, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 21, + 34, + 55 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 55, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 34, + 55, + 89 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 89, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 55, + 89, + 144 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 144, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 89, + 144, + 233 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 233, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 144, + 233, + 377 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 377, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 233, + 377, + 610 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 610, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 377, + 610, + 987 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 987, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 610, + 987, + 1597 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1597, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 987, + 1597, + 2584 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2584, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1597, + 2584, + 4181 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4181, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2584, + 4181, + 6765 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6765, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4181, + 6765, + 10946 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10946, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6765, + 10946, + 17711 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17711, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10946, + 17711, + 28657 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 28657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17711, + 28657, + 46368 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 46368, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 28657, + 46368, + 75025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 75025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 46368, + 75025, + 121393 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 121393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 75025, + 121393, + 196418 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 196418, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 121393, + 196418, + 317811 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 317811, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 196418, + 317811, + 514229 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 514229, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 317811, + 514229, + 832040 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 832040, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 514229, + 832040, + 1346269 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1346269, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 832040, + 1346269, + 2178309 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2178309, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1346269, + 2178309, + 3524578 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3524578, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2178309, + 3524578, + 5702887 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 5702887, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 3524578, + 5702887, + 9227465 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 9227465, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 5702887, + 9227465, + 14930352 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 14930352, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 9227465, + 14930352, + 24157817 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 24157817, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 14930352, + 24157817, + 39088169 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 39088169, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 24157817, + 39088169, + 63245986 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 63245986, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 39088169, + 63245986, + 102334155 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 102334155, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 63245986, + 102334155, + 165580141 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 165580141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 102334155, + 165580141, + 267914296 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 267914296, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 165580141, + 267914296, + 433494437 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 433494437, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 267914296, + 433494437, + 701408733 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 701408733, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 433494437, + 701408733, + 1134903170 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1134903170, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 701408733, + 1134903170, + 1836311903 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1836311903, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1134903170, + 1836311903, + 2971215073 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2971215073, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1836311903, + 2971215073, + 4807526976 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4807526976, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2971215073, + 4807526976, + 7778742049 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 7778742049, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4807526976, + 7778742049, + 12586269025 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 12586269025, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 7778742049, + 12586269025, + 20365011074 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 20365011074, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 12586269025, + 20365011074, + 32951280099 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 32951280099, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 20365011074, + 32951280099, + 53316291173 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 53316291173, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 32951280099, + 53316291173, + 86267571272 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 86267571272, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 53316291173, + 86267571272, + 139583862445 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 139583862445, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 86267571272, + 139583862445, + 225851433717 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 225851433717, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 139583862445, + 225851433717, + 365435296162 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 365435296162, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 225851433717, + 365435296162, + 591286729879 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 591286729879, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 365435296162, + 591286729879, + 956722026041 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 956722026041, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 591286729879, + 956722026041, + 1548008755920 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1548008755920, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 956722026041, + 1548008755920, + 2504730781961 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2504730781961, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1548008755920, + 2504730781961, + 4052739537881 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 4052739537881, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2504730781961, + 4052739537881, + 6557470319842 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 6557470319842, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 4052739537881, + 6557470319842, + 10610209857723 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 10610209857723, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 6557470319842, + 10610209857723, + 17167680177565 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 17167680177565, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 10610209857723, + 17167680177565, + 27777890035288 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 27777890035288, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 17167680177565, + 27777890035288, + 44945570212853 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 44945570212853, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 27777890035288, + 44945570212853, + 72723460248141 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 72723460248141, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 44945570212853, + 72723460248141, + 117669030460994 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 117669030460994, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 72723460248141, + 117669030460994, + 190392490709135 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 190392490709135, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 117669030460994, + 190392490709135, + 308061521170129 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 308061521170129, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 190392490709135, + 308061521170129, + 498454011879264 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 498454011879264, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 308061521170129, + 498454011879264, + 806515533049393 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 806515533049393, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 498454011879264, + 806515533049393, + 1304969544928657 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 1304969544928657, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 806515533049393, + 1304969544928657, + 2111485077978050 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 2111485077978050, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3416454622906707, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3416454622906707, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1304969544928657, + 2111485077978050, + 3416454622906707 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "arr", + "tmp" + ], + "stdout": "1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n4052739537881\n6557470319842\n10610209857723\n17167680177565\n27777890035288\n44945570212853\n72723460248141\n117669030460994\n190392490709135\n308061521170129\n498454011879264\n806515533049393\n1304969544928657\n2111485077978050\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "tmp": 3416454622906707, + "arr": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 2111485077978050, + 3416454622906707 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/infinite_loop.txt b/v3/tests/backend-tests/infinite_loop.txt new file mode 100644 index 000000000..b480914bb --- /dev/null +++ b/v3/tests/backend-tests/infinite_loop.txt @@ -0,0 +1,12 @@ +# Fibonacci!!! + +arr = [1, 1] + +print(arr[0]) + +while True: + print(arr[-1]) + tmp = sum(arr) + arr.append(tmp) + del arr[0] + diff --git a/v3/tests/backend-tests/infinite_loop_one_liner.golden b/v3/tests/backend-tests/infinite_loop_one_liner.golden new file mode 100644 index 000000000..e28f84304 --- /dev/null +++ b/v3/tests/backend-tests/infinite_loop_one_liner.golden @@ -0,0 +1,3009 @@ +{ + "code": "while 1:\n print(\"hahahaha\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/infinite_loop_one_liner.golden_py3 b/v3/tests/backend-tests/infinite_loop_one_liner.golden_py3 new file mode 100644 index 000000000..e28f84304 --- /dev/null +++ b/v3/tests/backend-tests/infinite_loop_one_liner.golden_py3 @@ -0,0 +1,3009 @@ +{ + "code": "while 1:\n print(\"hahahaha\")\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "hahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\nhahahaha\n", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "exception_msg": "(stopped after 300 steps to prevent possible infinite loop)", + "event": "instruction_limit_reached" + } + ] +} diff --git a/v3/tests/backend-tests/infinite_loop_one_liner.txt b/v3/tests/backend-tests/infinite_loop_one_liner.txt new file mode 100644 index 000000000..6bc80597f --- /dev/null +++ b/v3/tests/backend-tests/infinite_loop_one_liner.txt @@ -0,0 +1,2 @@ +while 1: + print("hahahaha") diff --git a/v3/tests/backend-tests/john-compose.golden b/v3/tests/backend-tests/john-compose.golden new file mode 100644 index 000000000..e0c62d35f --- /dev/null +++ b/v3/tests/backend-tests/john-compose.golden @@ -0,0 +1,1262 @@ +{ + "code": "def compose1(f, g):\n return lambda x: f(g(x))\n\nadd_one_and_square = compose1(lambda x: x * x, lambda x: x + 1)\nresult = add_one_and_square(12)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "compose1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "compose1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1", + "ordered_varnames": [ + "f", + "g" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "compose1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "compose1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1", + "ordered_varnames": [ + "f", + "g" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "compose1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "compose1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 13, + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 169, + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 169, + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square", + "result" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ], + "result": 169 + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-compose.golden_py3 b/v3/tests/backend-tests/john-compose.golden_py3 new file mode 100644 index 000000000..e0c62d35f --- /dev/null +++ b/v3/tests/backend-tests/john-compose.golden_py3 @@ -0,0 +1,1262 @@ +{ + "code": "def compose1(f, g):\n return lambda x: f(g(x))\n\nadd_one_and_square = compose1(lambda x: x * x, lambda x: x + 1)\nresult = add_one_and_square(12)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "compose1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "compose1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1", + "ordered_varnames": [ + "f", + "g" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "compose1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "compose1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1", + "ordered_varnames": [ + "f", + "g" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1" + ], + "stdout": "", + "func_name": "compose1", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "compose1", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 13, + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 12 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 169, + "x": 13 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 169, + "x": 12 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "compose1", + "add_one_and_square", + "result" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "g": [ + "REF", + 2 + ], + "f": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "compose1", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "compose1_f1_p_z", + "ordered_varnames": [ + "f", + "g", + "__return__" + ] + } + ], + "globals": { + "compose1": [ + "REF", + 1 + ], + "add_one_and_square": [ + "REF", + 4 + ], + "result": 169 + }, + "heap": { + "1": [ + "FUNCTION", + "compose1(f, g)", + null + ], + "2": [ + "FUNCTION", + "(x) ", + null + ], + "3": [ + "FUNCTION", + "(x) ", + null + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-compose.txt b/v3/tests/backend-tests/john-compose.txt new file mode 100644 index 000000000..4b8767912 --- /dev/null +++ b/v3/tests/backend-tests/john-compose.txt @@ -0,0 +1,5 @@ +def compose1(f, g): + return lambda x: f(g(x)) + +add_one_and_square = compose1(lambda x: x * x, lambda x: x + 1) +result = add_one_and_square(12) diff --git a/v3/tests/backend-tests/john-import-test.golden b/v3/tests/backend-tests/john-import-test.golden new file mode 100644 index 000000000..add78fcb4 --- /dev/null +++ b/v3/tests/backend-tests/john-import-test.golden @@ -0,0 +1,282 @@ +{ + "code": "import math\nimport operator\nimport string\nimport collections\nimport re\nimport json\n\n# causes some errors in regression tests, but fine in GAE ...\n#import random\n#import datetime\n#import functools\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "math" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "math" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "math" + ], + "2": [ + "module", + "operator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "string": [ + "REF", + 3 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "math" + ], + "2": [ + "module", + "operator" + ], + "3": [ + "module", + "string" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string", + "collections" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "collections": [ + "REF", + 4 + ], + "string": [ + "REF", + 3 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "math" + ], + "2": [ + "module", + "operator" + ], + "3": [ + "module", + "string" + ], + "4": [ + "module", + "collections" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string", + "collections", + "re" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "re": [ + "REF", + 5 + ], + "collections": [ + "REF", + 4 + ], + "string": [ + "REF", + 3 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "math" + ], + "2": [ + "module", + "operator" + ], + "3": [ + "module", + "string" + ], + "4": [ + "module", + "collections" + ], + "5": [ + "module", + "re" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string", + "collections", + "re", + "json" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "string": [ + "REF", + 3 + ], + "re": [ + "REF", + 5 + ], + "json": [ + "REF", + 6 + ], + "collections": [ + "REF", + 4 + ], + "operator": [ + "REF", + 2 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "math" + ], + "2": [ + "module", + "operator" + ], + "3": [ + "module", + "string" + ], + "4": [ + "module", + "collections" + ], + "5": [ + "module", + "re" + ], + "6": [ + "module", + "json" + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-import-test.golden_py3 b/v3/tests/backend-tests/john-import-test.golden_py3 new file mode 100644 index 000000000..332fa4b5e --- /dev/null +++ b/v3/tests/backend-tests/john-import-test.golden_py3 @@ -0,0 +1,282 @@ +{ + "code": "import math\nimport operator\nimport string\nimport collections\nimport re\nimport json\n\n# causes some errors in regression tests, but fine in GAE ...\n#import random\n#import datetime\n#import functools\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "math" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "INSTANCE", + "module" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "string": [ + "REF", + 3 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "INSTANCE", + "module" + ], + "3": [ + "INSTANCE", + "module" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string", + "collections" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "collections": [ + "REF", + 4 + ], + "string": [ + "REF", + 3 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "INSTANCE", + "module" + ], + "3": [ + "INSTANCE", + "module" + ], + "4": [ + "INSTANCE", + "module" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string", + "collections", + "re" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 2 + ], + "re": [ + "REF", + 5 + ], + "collections": [ + "REF", + 4 + ], + "string": [ + "REF", + 3 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "INSTANCE", + "module" + ], + "3": [ + "INSTANCE", + "module" + ], + "4": [ + "INSTANCE", + "module" + ], + "5": [ + "INSTANCE", + "module" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "math", + "operator", + "string", + "collections", + "re", + "json" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "string": [ + "REF", + 3 + ], + "re": [ + "REF", + 5 + ], + "json": [ + "REF", + 6 + ], + "collections": [ + "REF", + 4 + ], + "operator": [ + "REF", + 2 + ], + "math": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "INSTANCE", + "module" + ], + "3": [ + "INSTANCE", + "module" + ], + "4": [ + "INSTANCE", + "module" + ], + "5": [ + "INSTANCE", + "module" + ], + "6": [ + "INSTANCE", + "module" + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-import-test.txt b/v3/tests/backend-tests/john-import-test.txt new file mode 100644 index 000000000..fcb15f43f --- /dev/null +++ b/v3/tests/backend-tests/john-import-test.txt @@ -0,0 +1,11 @@ +import math +import operator +import string +import collections +import re +import json + +# causes some errors in regression tests, but fine in GAE ... +#import random +#import datetime +#import functools diff --git a/v3/tests/backend-tests/john-lambda-lambda-mini.golden b/v3/tests/backend-tests/john-lambda-lambda-mini.golden new file mode 100644 index 000000000..3f5b3cc1c --- /dev/null +++ b/v3/tests/backend-tests/john-lambda-lambda-mini.golden @@ -0,0 +1,817 @@ +{ + "code": "def a(b):\n a = b(3)\n a(100)\n\na(lambda a: (lambda b: a))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2_p", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "b": 100 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "b": 100 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 3, + "b": 100 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "b", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-lambda-lambda-mini.golden_py3 b/v3/tests/backend-tests/john-lambda-lambda-mini.golden_py3 new file mode 100644 index 000000000..3f5b3cc1c --- /dev/null +++ b/v3/tests/backend-tests/john-lambda-lambda-mini.golden_py3 @@ -0,0 +1,817 @@ +{ + "code": "def a(b):\n a = b(3)\n a(100)\n\na(lambda a: (lambda b: a))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2_p", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "b": 100 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "b": 100 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 3, + "b": 100 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "b", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 3 + ], + "__return__": null, + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "3": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-lambda-lambda-mini.txt b/v3/tests/backend-tests/john-lambda-lambda-mini.txt new file mode 100644 index 000000000..bd8f4edc3 --- /dev/null +++ b/v3/tests/backend-tests/john-lambda-lambda-mini.txt @@ -0,0 +1,5 @@ +def a(b): + a = b(3) + a(100) + +a(lambda a: (lambda b: a)) diff --git a/v3/tests/backend-tests/john-lambda-lambda.golden b/v3/tests/backend-tests/john-lambda-lambda.golden new file mode 100644 index 000000000..724b87af2 --- /dev/null +++ b/v3/tests/backend-tests/john-lambda-lambda.golden @@ -0,0 +1,472 @@ +{ + "code": "# another gem from john denero ...\ndef a(b):\n a, b = b(3)\n\na(lambda a: (lambda b: a, a))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2_p", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "TUPLE", + [ + "REF", + 4 + ], + 3 + ], + "4": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "3": [ + "TUPLE", + [ + "REF", + 4 + ], + 3 + ], + "4": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "3": [ + "TUPLE", + [ + "REF", + 4 + ], + 3 + ], + "4": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-lambda-lambda.golden_py3 b/v3/tests/backend-tests/john-lambda-lambda.golden_py3 new file mode 100644 index 000000000..724b87af2 --- /dev/null +++ b/v3/tests/backend-tests/john-lambda-lambda.golden_py3 @@ -0,0 +1,472 @@ +{ + "code": "# another gem from john denero ...\ndef a(b):\n a, b = b(3)\n\na(lambda a: (lambda b: a, a))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "a" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "b": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2_p", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "2": [ + "FUNCTION", + "(a) ", + null + ], + "3": [ + "TUPLE", + [ + "REF", + 4 + ], + 3 + ], + "4": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "a", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": [ + "REF", + 4 + ], + "__return__": null, + "b": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "a", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "a_f1", + "ordered_varnames": [ + "b", + "a", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "3": [ + "TUPLE", + [ + "REF", + 4 + ], + 3 + ], + "4": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 3, + "__return__": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": " ", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": " _f2_p_z", + "ordered_varnames": [ + "a", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "a(b)", + null + ], + "3": [ + "TUPLE", + [ + "REF", + 4 + ], + 3 + ], + "4": [ + "FUNCTION", + "(b) ", + 2 + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-lambda-lambda.txt b/v3/tests/backend-tests/john-lambda-lambda.txt new file mode 100644 index 000000000..61a0d2fb5 --- /dev/null +++ b/v3/tests/backend-tests/john-lambda-lambda.txt @@ -0,0 +1,5 @@ +# another gem from john denero ... +def a(b): + a, b = b(3) + +a(lambda a: (lambda b: a, a)) diff --git a/v3/tests/backend-tests/john-triple-nesting.golden b/v3/tests/backend-tests/john-triple-nesting.golden new file mode 100644 index 000000000..61283f9c5 --- /dev/null +++ b/v3/tests/backend-tests/john-triple-nesting.golden @@ -0,0 +1,11 @@ +{ + "code": "# test in Python 3\ndef f(t):\n def g(t):\n def h():\n nonlocal t\n t += 1\n return h, lambda: t\n h, gt = g(0)\n return h, gt, lambda: t\nh, gt, ft = f(0)\nft(), gt()\nh()\nft(), gt()\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 5)", + "line": 5, + "event": "uncaught_exception", + "offset": 22 + } + ] +} diff --git a/v3/tests/backend-tests/john-triple-nesting.golden_py3 b/v3/tests/backend-tests/john-triple-nesting.golden_py3 new file mode 100644 index 000000000..9d1bd8c9f --- /dev/null +++ b/v3/tests/backend-tests/john-triple-nesting.golden_py3 @@ -0,0 +1,3726 @@ +{ + "code": "# test in Python 3\ndef f(t):\n def g(t):\n def h():\n nonlocal t\n t += 1\n return h, lambda: t\n h, gt = g(0)\n return h, gt, lambda: t\nh, gt, ft = f(0)\nft(), gt()\nh()\nft(), gt()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "t": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "t" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p", + "ordered_varnames": [ + "t", + "h" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g", + "h", + "gt" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "h", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "h", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "h_f5", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "h", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 0 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "h", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "h_f5", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "h", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "h", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": "h_f5", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 2, + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "h", + "gt", + "ft" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "t": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "t", + "g", + "h", + "gt", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "h": [ + "REF", + 3 + ], + "t": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "g", + "is_zombie": true, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2_p_z", + "ordered_varnames": [ + "t", + "h", + "__return__" + ] + } + ], + "globals": { + "h": [ + "REF", + 3 + ], + "gt": [ + "REF", + 5 + ], + "ft": [ + "REF", + 7 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(t)", + null + ], + "2": [ + "FUNCTION", + "g(t)", + 1 + ], + "3": [ + "FUNCTION", + "h()", + 2 + ], + "4": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ] + ], + "5": [ + "FUNCTION", + "() ", + 2 + ], + "6": [ + "TUPLE", + [ + "REF", + 3 + ], + [ + "REF", + 5 + ], + [ + "REF", + 7 + ] + ], + "7": [ + "FUNCTION", + "() ", + 1 + ] + }, + "line": 13, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/john-triple-nesting.txt b/v3/tests/backend-tests/john-triple-nesting.txt new file mode 100644 index 000000000..60a949231 --- /dev/null +++ b/v3/tests/backend-tests/john-triple-nesting.txt @@ -0,0 +1,13 @@ +# test in Python 3 +def f(t): + def g(t): + def h(): + nonlocal t + t += 1 + return h, lambda: t + h, gt = g(0) + return h, gt, lambda: t +h, gt, ft = f(0) +ft(), gt() +h() +ft(), gt() diff --git a/v3/tests/backend-tests/key-error.golden b/v3/tests/backend-tests/key-error.golden new file mode 100644 index 000000000..9cd1f5980 --- /dev/null +++ b/v3/tests/backend-tests/key-error.golden @@ -0,0 +1,58 @@ +{ + "code": "x = {}\nx['jane']\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "exception_msg": "KeyError: ('jane',)", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 2, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/key-error.golden_py3 b/v3/tests/backend-tests/key-error.golden_py3 new file mode 100644 index 000000000..9cd1f5980 --- /dev/null +++ b/v3/tests/backend-tests/key-error.golden_py3 @@ -0,0 +1,58 @@ +{ + "code": "x = {}\nx['jane']\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "exception_msg": "KeyError: ('jane',)", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 2, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/key-error.txt b/v3/tests/backend-tests/key-error.txt new file mode 100644 index 000000000..1f5589a65 --- /dev/null +++ b/v3/tests/backend-tests/key-error.txt @@ -0,0 +1,2 @@ +x = {} +x['jane'] diff --git a/v3/tests/backend-tests/lambda_1.golden b/v3/tests/backend-tests/lambda_1.golden new file mode 100644 index 000000000..a4466ec86 --- /dev/null +++ b/v3/tests/backend-tests/lambda_1.golden @@ -0,0 +1,5493 @@ +{ + "code": "def summation(low, high, f, next):\n s = 0\n x = low\n while x <= high:\n s = s + f(x)\n x = next(x)\n return s\n\ndef sumsquares(low, high):\n return summation(low, high, lambda x: x**2, lambda x: x+1)\n\nprint(sumsquares(1, 5))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 5, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 5, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 5, + "s": 0, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 4, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 9, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 4, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": 16, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 5, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": 25, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 6, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "__return__": 55, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "__return__": 55, + "low": 1 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "55\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "__return__": 55, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p_z", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/lambda_1.golden_py3 b/v3/tests/backend-tests/lambda_1.golden_py3 new file mode 100644 index 000000000..a4466ec86 --- /dev/null +++ b/v3/tests/backend-tests/lambda_1.golden_py3 @@ -0,0 +1,5493 @@ +{ + "code": "def summation(low, high, f, next):\n s = 0\n x = low\n while x <= high:\n s = s + f(x)\n x = next(x)\n return s\n\ndef sumsquares(low, high):\n return summation(low, high, lambda x: x**2, lambda x: x+1)\n\nprint(sumsquares(1, 5))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1", + "ordered_varnames": [ + "low", + "high" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 5, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 5, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "high": 5, + "s": 0, + "f": [ + "REF", + 4 + ], + "low": 1, + "next": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 0, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f4", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 1, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": 4, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 3, + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f6", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 5, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": 9, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f7", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 4, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f8", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 14, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": 16, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 5, + "x": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f10", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 30, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": 25, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f11", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "call" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": 6, + "x": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f12", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "summation", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "f": [ + "REF", + 4 + ], + "next": [ + "REF", + 3 + ], + "high": 5, + "s": 55, + "low": 1, + "__return__": 55, + "x": 6 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "summation", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "summation_f2", + "ordered_varnames": [ + "low", + "high", + "f", + "next", + "s", + "x", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ], + "3": [ + "FUNCTION", + "(x) ", + 1 + ], + "4": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "", + "func_name": "sumsquares", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "__return__": 55, + "low": 1 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 10, + "event": "return" + }, + { + "ordered_globals": [ + "summation", + "sumsquares" + ], + "stdout": "55\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "high": 5, + "__return__": 55, + "low": 1 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "sumsquares", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "sumsquares_f1_p_z", + "ordered_varnames": [ + "low", + "high", + "__return__" + ] + } + ], + "globals": { + "summation": [ + "REF", + 1 + ], + "sumsquares": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "summation(low, high, f, next)", + null + ], + "2": [ + "FUNCTION", + "sumsquares(low, high)", + null + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/lambda_1.txt b/v3/tests/backend-tests/lambda_1.txt new file mode 100644 index 000000000..da6d717e0 --- /dev/null +++ b/v3/tests/backend-tests/lambda_1.txt @@ -0,0 +1,12 @@ +def summation(low, high, f, next): + s = 0 + x = low + while x <= high: + s = s + f(x) + x = next(x) + return s + +def sumsquares(low, high): + return summation(low, high, lambda x: x**2, lambda x: x+1) + +print(sumsquares(1, 5)) diff --git a/v3/tests/backend-tests/ling-scheme-1.golden b/v3/tests/backend-tests/ling-scheme-1.golden new file mode 100644 index 000000000..48cff696b --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-1.golden @@ -0,0 +1,4020 @@ +{ + "code": "def repeat(f, n):\n if n == 0:\n return []\n else:\n return [f()] + repeat(f, n - 1)\n\nrepeat(lambda : 5, 5)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f6", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f8", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f10", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f10", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f10", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "3": [ + "LIST" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "4": [ + "LIST", + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "5": [ + "LIST", + 5, + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "6": [ + "LIST", + 5, + 5, + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 7 + ], + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "7": [ + "LIST", + 5, + 5, + 5, + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 8 + ], + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "8": [ + "LIST", + 5, + 5, + 5, + 5, + 5 + ], + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/ling-scheme-1.golden_py3 b/v3/tests/backend-tests/ling-scheme-1.golden_py3 new file mode 100644 index 000000000..48cff696b --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-1.golden_py3 @@ -0,0 +1,4020 @@ +{ + "code": "def repeat(f, n):\n if n == 0:\n return []\n else:\n return [f()] + repeat(f, n - 1)\n\nrepeat(lambda : 5, 5)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f6", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f6", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f8", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f8", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f10", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f10", + "ordered_varnames": [] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f10", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "f": [ + "REF", + 2 + ], + "n": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f11", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "3": [ + "LIST" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": [ + "REF", + 4 + ], + "f": [ + "REF", + 2 + ], + "n": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f9", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "4": [ + "LIST", + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 5 + ], + "f": [ + "REF", + 2 + ], + "n": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f7", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "5": [ + "LIST", + 5, + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 6 + ], + "f": [ + "REF", + 2 + ], + "n": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f5", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "6": [ + "LIST", + 5, + 5, + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 7 + ], + "f": [ + "REF", + 2 + ], + "n": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f3", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ], + "7": [ + "LIST", + 5, + 5, + 5, + 5 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "repeat", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 8 + ], + "f": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "repeat", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "repeat_f1", + "ordered_varnames": [ + "f", + "n", + "__return__" + ] + } + ], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "8": [ + "LIST", + 5, + 5, + 5, + 5, + 5 + ], + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ], + "2": [ + "FUNCTION", + "() ", + null + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "repeat" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "repeat": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "repeat(f, n)", + null + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/ling-scheme-1.txt b/v3/tests/backend-tests/ling-scheme-1.txt new file mode 100644 index 000000000..254102edc --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-1.txt @@ -0,0 +1,7 @@ +def repeat(f, n): + if n == 0: + return [] + else: + return [f()] + repeat(f, n - 1) + +repeat(lambda : 5, 5) diff --git a/v3/tests/backend-tests/ling-scheme-2.golden b/v3/tests/backend-tests/ling-scheme-2.golden new file mode 100644 index 000000000..add7f461f --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-2.golden @@ -0,0 +1,3788 @@ +{ + "code": "def iota(n):\n def loop(acc, k):\n if k == n:\n return list(reversed(acc))\n else:\n return loop([k] + acc, k + 1)\n return loop([], 0)\n\nresult = iota(5)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "__return__": [ + "REF", + 9 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "__return__": [ + "REF", + 9 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "__return__": [ + "REF", + 9 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "__return__": [ + "REF", + 9 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 9 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "__return__": [ + "REF", + 9 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 9 + ], + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "iota", + "result" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 9 + ], + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p_z", + "ordered_varnames": [ + "n", + "loop", + "__return__" + ] + } + ], + "globals": { + "result": [ + "REF", + 9 + ], + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/ling-scheme-2.golden_py3 b/v3/tests/backend-tests/ling-scheme-2.golden_py3 new file mode 100644 index 000000000..add7f461f --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-2.golden_py3 @@ -0,0 +1,3788 @@ +{ + "code": "def iota(n):\n def loop(acc, k):\n if k == n:\n return list(reversed(acc))\n else:\n return loop([k] + acc, k + 1)\n return loop([], 0)\n\nresult = iota(5)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "n": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1", + "ordered_varnames": [ + "n" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "k": 4 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "acc": [ + "REF", + 8 + ], + "__return__": [ + "REF", + 9 + ], + "k": 5 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f7", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "8": [ + "LIST", + 4, + 3, + 2, + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "k": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "acc": [ + "REF", + 7 + ], + "__return__": [ + "REF", + 9 + ], + "k": 4 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f6", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "7": [ + "LIST", + 3, + 2, + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "k": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "acc": [ + "REF", + 6 + ], + "__return__": [ + "REF", + 9 + ], + "k": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f5", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "6": [ + "LIST", + 2, + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "k": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "acc": [ + "REF", + 5 + ], + "__return__": [ + "REF", + 9 + ], + "k": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f4", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "iota(n)", + null + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "5": [ + "LIST", + 1, + 0 + ], + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "k": 0 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "acc": [ + "REF", + 4 + ], + "__return__": [ + "REF", + 9 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f3", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "4": [ + "LIST", + 0 + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "loop", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "acc": [ + "REF", + 3 + ], + "__return__": [ + "REF", + 9 + ], + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "loop", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "loop_f2", + "ordered_varnames": [ + "acc", + "k", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "3": [ + "LIST" + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "iota" + ], + "stdout": "", + "func_name": "iota", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 9 + ], + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "iota", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p", + "ordered_varnames": [ + "n", + "loop", + "__return__" + ] + } + ], + "globals": { + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "iota", + "result" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 9 + ], + "loop": [ + "REF", + 2 + ], + "n": 5 + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "iota", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "iota_f1_p_z", + "ordered_varnames": [ + "n", + "loop", + "__return__" + ] + } + ], + "globals": { + "result": [ + "REF", + 9 + ], + "iota": [ + "REF", + 1 + ] + }, + "heap": { + "9": [ + "LIST", + 0, + 1, + 2, + 3, + 4 + ], + "2": [ + "FUNCTION", + "loop(acc, k)", + 1 + ], + "1": [ + "FUNCTION", + "iota(n)", + null + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/ling-scheme-2.txt b/v3/tests/backend-tests/ling-scheme-2.txt new file mode 100644 index 000000000..b94897002 --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-2.txt @@ -0,0 +1,10 @@ +def iota(n): + def loop(acc, k): + if k == n: + return list(reversed(acc)) + else: + return loop([k] + acc, k + 1) + return loop([], 0) + +result = iota(5) + diff --git a/v3/tests/backend-tests/ling-scheme-3.golden b/v3/tests/backend-tests/ling-scheme-3.golden new file mode 100644 index 000000000..4047de3db --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-3.golden @@ -0,0 +1,9009 @@ +{ + "code": "def map(f, xs):\n if xs == []:\n return []\n else:\n return [f(xs[0])] + list(map(f, xs[1:]))\n\ndef append(xs, ys):\n if xs == []:\n return ys\n else:\n return [xs[0]] + append(xs[1:], ys)\n\ndef pairs(xs):\n if xs == []:\n return []\n elif xs[1:] == []:\n return []\n else:\n return append(map(lambda x: [xs[0], x], xs[1:]), pairs(xs[1:]))\n\nresult = pairs([1, 2, 3])\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "map" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 7 + ], + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "7": [ + "LIST", + 1, + 2 + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 9 + ], + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "9": [ + "LIST", + 1, + 3 + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": [ + "REF", + 11 + ], + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ], + "11": [ + "LIST" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 12 + ], + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "9": [ + "LIST", + 1, + 3 + ], + "12": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 13 + ], + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 7 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 7 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": [ + "REF", + 17 + ], + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 7 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "17": [ + "LIST", + 2, + 3 + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": [ + "REF", + 19 + ], + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ], + "19": [ + "LIST" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": [ + "REF", + 20 + ], + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": [ + "REF", + 22 + ], + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ], + "22": [ + "LIST" + ] + }, + "line": 17, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "__return__": [ + "REF", + 22 + ], + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": [ + "REF", + 27 + ], + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "27": [ + "LIST", + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": [ + "REF", + 28 + ], + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "28": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 28 + ], + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "28": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs", + "result" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 28 + ], + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "result": [ + "REF", + 28 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "28": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 21, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/ling-scheme-3.golden_py3 b/v3/tests/backend-tests/ling-scheme-3.golden_py3 new file mode 100644 index 000000000..4047de3db --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-3.golden_py3 @@ -0,0 +1,9009 @@ +{ + "code": "def map(f, xs):\n if xs == []:\n return []\n else:\n return [f(xs[0])] + list(map(f, xs[1:]))\n\ndef append(xs, ys):\n if xs == []:\n return ys\n else:\n return [xs[0]] + append(xs[1:], ys)\n\ndef pairs(xs):\n if xs == []:\n return []\n elif xs[1:] == []:\n return []\n else:\n return append(map(lambda x: [xs[0], x], xs[1:]), pairs(xs[1:]))\n\nresult = pairs([1, 2, 3])\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "map" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ] + }, + "line": 21, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 7 + ], + "x": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f3", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "7": [ + "LIST", + 1, + 2 + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 5, + "encoded_locals": { + "__return__": [ + "REF", + 9 + ], + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": " _f5", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "9": [ + "LIST", + 1, + 3 + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 6, + "encoded_locals": { + "__return__": [ + "REF", + 11 + ], + "xs": [ + "REF", + 10 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f6", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "10": [ + "LIST" + ], + "11": [ + "LIST" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": [ + "REF", + 12 + ], + "xs": [ + "REF", + 8 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f4", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "8": [ + "LIST", + 3 + ], + "9": [ + "LIST", + 1, + 3 + ], + "12": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": [ + "REF", + 13 + ], + "xs": [ + "REF", + 5 + ], + "f": [ + "REF", + 6 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f2", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "5": [ + "LIST", + 2, + 3 + ], + "6": [ + "FUNCTION", + "(x) ", + 1 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 7 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 19, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 7 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 9, + "encoded_locals": { + "__return__": [ + "REF", + 17 + ], + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [ + 7 + ], + "unique_hash": " _f9", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "17": [ + "LIST", + 2, + 3 + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs" + ] + }, + { + "frame_id": 10, + "encoded_locals": { + "__return__": [ + "REF", + 19 + ], + "xs": [ + "REF", + 18 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f10", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "18": [ + "LIST" + ], + "19": [ + "LIST" + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "map", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 8, + "encoded_locals": { + "__return__": [ + "REF", + 20 + ], + "xs": [ + "REF", + 15 + ], + "f": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "map", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "map_f8", + "ordered_varnames": [ + "f", + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "15": [ + "LIST", + 3 + ], + "16": [ + "FUNCTION", + "(x) ", + 7 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 13, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 11, + "encoded_locals": { + "__return__": [ + "REF", + 22 + ], + "xs": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f11", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "21": [ + "LIST", + 3 + ], + "22": [ + "LIST" + ] + }, + "line": 17, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 13, + "encoded_locals": { + "__return__": [ + "REF", + 22 + ], + "xs": [ + "REF", + 23 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f13", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "23": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 12, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 20 + ], + "ys": [ + "REF", + 22 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f12", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "20": [ + "LIST", + [ + "REF", + 17 + ] + ], + "22": [ + "LIST" + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 7, + "event": "call" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 16, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 26 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f16", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "26": [ + "LIST" + ] + }, + "line": 9, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys" + ] + }, + { + "frame_id": 15, + "encoded_locals": { + "__return__": [ + "REF", + 27 + ], + "xs": [ + "REF", + 25 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f15", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "25": [ + "LIST", + [ + "REF", + 9 + ] + ], + "27": [ + "LIST", + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "append", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 14, + "encoded_locals": { + "__return__": [ + "REF", + 28 + ], + "xs": [ + "REF", + 13 + ], + "ys": [ + "REF", + 24 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "append", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "append_f14", + "ordered_varnames": [ + "xs", + "ys", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "13": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ] + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "28": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs" + ], + "stdout": "", + "func_name": "pairs", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 28 + ], + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "pairs", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "28": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 19, + "event": "return" + }, + { + "ordered_globals": [ + "map", + "append", + "pairs", + "result" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 28 + ], + "xs": [ + "REF", + 4 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f1_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + }, + { + "frame_id": 7, + "encoded_locals": { + "__return__": [ + "REF", + 24 + ], + "xs": [ + "REF", + 14 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "pairs", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "pairs_f7_p_z", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "map": [ + "REF", + 1 + ], + "pairs": [ + "REF", + 3 + ], + "result": [ + "REF", + 28 + ], + "append": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "map(f, xs)", + null + ], + "2": [ + "FUNCTION", + "append(xs, ys)", + null + ], + "3": [ + "FUNCTION", + "pairs(xs)", + null + ], + "4": [ + "LIST", + 1, + 2, + 3 + ], + "7": [ + "LIST", + 1, + 2 + ], + "9": [ + "LIST", + 1, + 3 + ], + "14": [ + "LIST", + 2, + 3 + ], + "17": [ + "LIST", + 2, + 3 + ], + "24": [ + "LIST", + [ + "REF", + 17 + ] + ], + "28": [ + "LIST", + [ + "REF", + 7 + ], + [ + "REF", + 9 + ], + [ + "REF", + 17 + ] + ] + }, + "line": 21, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/ling-scheme-3.txt b/v3/tests/backend-tests/ling-scheme-3.txt new file mode 100644 index 000000000..14ee800e8 --- /dev/null +++ b/v3/tests/backend-tests/ling-scheme-3.txt @@ -0,0 +1,21 @@ +def map(f, xs): + if xs == []: + return [] + else: + return [f(xs[0])] + list(map(f, xs[1:])) + +def append(xs, ys): + if xs == []: + return ys + else: + return [xs[0]] + append(xs[1:], ys) + +def pairs(xs): + if xs == []: + return [] + elif xs[1:] == []: + return [] + else: + return append(map(lambda x: [xs[0], x], xs[1:]), pairs(xs[1:])) + +result = pairs([1, 2, 3]) diff --git a/v3/tests/backend-tests/list_dict_test.golden b/v3/tests/backend-tests/list_dict_test.golden new file mode 100644 index 000000000..4baefb4f5 --- /dev/null +++ b/v3/tests/backend-tests/list_dict_test.golden @@ -0,0 +1,416 @@ +{ + "code": "x = {}\nl = ['hello', \"world\", 'goodbye']\nfor (i, e) in enumerate(l):\n x[e] = i\nprint(x)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": [ + "REF", + 1 + ], + "e": "hello", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": [ + "REF", + 1 + ], + "e": "hello", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 1 + ], + "e": "world", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 1 + ], + "e": "world", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ], + [ + "goodbye", + 2 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ], + [ + "goodbye", + 2 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "{'world': 1, 'hello': 0, 'goodbye': 2}\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ], + [ + "goodbye", + 2 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/list_dict_test.golden_py3 b/v3/tests/backend-tests/list_dict_test.golden_py3 new file mode 100644 index 000000000..4baefb4f5 --- /dev/null +++ b/v3/tests/backend-tests/list_dict_test.golden_py3 @@ -0,0 +1,416 @@ +{ + "code": "x = {}\nl = ['hello', \"world\", 'goodbye']\nfor (i, e) in enumerate(l):\n x[e] = i\nprint(x)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ], + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": [ + "REF", + 1 + ], + "e": "hello", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT" + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": [ + "REF", + 1 + ], + "e": "hello", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 1 + ], + "e": "world", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": [ + "REF", + 1 + ], + "e": "world", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ], + [ + "goodbye", + 2 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ], + [ + "goodbye", + 2 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "l", + "i", + "e" + ], + "stdout": "{'world': 1, 'hello': 0, 'goodbye': 2}\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": [ + "REF", + 1 + ], + "e": "goodbye", + "l": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "DICT", + [ + "world", + 1 + ], + [ + "hello", + 0 + ], + [ + "goodbye", + 2 + ] + ], + "2": [ + "LIST", + "hello", + "world", + "goodbye" + ] + }, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/list_dict_test.txt b/v3/tests/backend-tests/list_dict_test.txt new file mode 100644 index 000000000..b44628526 --- /dev/null +++ b/v3/tests/backend-tests/list_dict_test.txt @@ -0,0 +1,6 @@ +x = {} +l = ['hello', "world", 'goodbye'] +for (i, e) in enumerate(l): + x[e] = i +print(x) + diff --git a/v3/tests/backend-tests/list_sum.golden b/v3/tests/backend-tests/list_sum.golden new file mode 100644 index 000000000..332b07b21 --- /dev/null +++ b/v3/tests/backend-tests/list_sum.golden @@ -0,0 +1,2125 @@ +{ + "code": "def listSum(numbers):\n if not numbers:\n return 0\n else:\n (f, rest) = numbers\n return f + listSum(rest)\n\nmyList = (1, (2, (3, None)))\ntotal = listSum(myList)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 0, + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 3, + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 5, + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 6, + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList", + "total" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "total": 6, + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/list_sum.golden_py3 b/v3/tests/backend-tests/list_sum.golden_py3 new file mode 100644 index 000000000..332b07b21 --- /dev/null +++ b/v3/tests/backend-tests/list_sum.golden_py3 @@ -0,0 +1,2125 @@ +{ + "code": "def listSum(numbers):\n if not numbers:\n return 0\n else:\n (f, rest) = numbers\n return f + listSum(rest)\n\nmyList = (1, (2, (3, None)))\ntotal = listSum(myList)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": 0, + "numbers": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f4", + "ordered_varnames": [ + "numbers", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 3, + "numbers": [ + "REF", + 4 + ], + "rest": null, + "f": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f3", + "ordered_varnames": [ + "numbers", + "f", + "rest", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 5, + "numbers": [ + "REF", + 3 + ], + "rest": [ + "REF", + 4 + ], + "f": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f2", + "ordered_varnames": [ + "numbers", + "f", + "rest", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList" + ], + "stdout": "", + "func_name": "listSum", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 6, + "numbers": [ + "REF", + 2 + ], + "rest": [ + "REF", + 3 + ], + "f": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "listSum", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "listSum_f1", + "ordered_varnames": [ + "numbers", + "f", + "rest", + "__return__" + ] + } + ], + "globals": { + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "listSum", + "myList", + "total" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "total": 6, + "myList": [ + "REF", + 2 + ], + "listSum": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "listSum(numbers)", + null + ], + "2": [ + "TUPLE", + 1, + [ + "REF", + 3 + ] + ], + "3": [ + "TUPLE", + 2, + [ + "REF", + 4 + ] + ], + "4": [ + "TUPLE", + 3, + null + ] + }, + "line": 9, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/list_sum.txt b/v3/tests/backend-tests/list_sum.txt new file mode 100644 index 000000000..ce2556a0d --- /dev/null +++ b/v3/tests/backend-tests/list_sum.txt @@ -0,0 +1,9 @@ +def listSum(numbers): + if not numbers: + return 0 + else: + (f, rest) = numbers + return f + listSum(rest) + +myList = (1, (2, (3, None))) +total = listSum(myList) diff --git a/v3/tests/backend-tests/list_test.golden b/v3/tests/backend-tests/list_test.golden new file mode 100644 index 000000000..9d34156ff --- /dev/null +++ b/v3/tests/backend-tests/list_test.golden @@ -0,0 +1,48 @@ +{ + "code": "x = [1, 2, \"hello\", (3, 4)]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + "hello", + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 1, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/list_test.golden_py3 b/v3/tests/backend-tests/list_test.golden_py3 new file mode 100644 index 000000000..9d34156ff --- /dev/null +++ b/v3/tests/backend-tests/list_test.golden_py3 @@ -0,0 +1,48 @@ +{ + "code": "x = [1, 2, \"hello\", (3, 4)]\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "LIST", + 1, + 2, + "hello", + [ + "REF", + 2 + ] + ], + "2": [ + "TUPLE", + 3, + 4 + ] + }, + "line": 1, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/list_test.txt b/v3/tests/backend-tests/list_test.txt new file mode 100644 index 000000000..a56999261 --- /dev/null +++ b/v3/tests/backend-tests/list_test.txt @@ -0,0 +1 @@ +x = [1, 2, "hello", (3, 4)] diff --git a/v3/tests/backend-tests/namedtuple.golden b/v3/tests/backend-tests/namedtuple.golden new file mode 100644 index 000000000..7f5bbaf91 --- /dev/null +++ b/v3/tests/backend-tests/namedtuple.golden @@ -0,0 +1,716 @@ +{ + "code": "from collections import namedtuple\n\nRestaurant = namedtuple('Restaurant', 'name cuisine phone dish price')\n\nR1 = Restaurant(\"Taillevent\", \"French\", \"343-3434\", \"Escargots\", 24.50)\nR2 = Restaurant(\"La Tour D'Argent\", \"French\", \"343-3344\", \"Ris de Veau\", 48.50)\n\n#R3 = Restaurant(\"Pascal\", \"French\", \"333-4444\", \"Bouillabaisse\", 32.00)\n#R4 = Restaurant(\"Thai Touch\", \"Thai\", \"444-3333\", \"Mee Krob\", 10.95)\n#R5 = Restaurant(\"Thai Dishes\", \"Thai\", \"333-4433\", \"Paht Woon Sen\", 8.50)\n#R6 = Restaurant(\"Thai Spoon\", \"Thai\", \"334-3344\", \"Mussamun\", 9.00)\n#R7 = Restaurant(\"McDonald's\", \"Burgers\", \"333-4443\", \"Big Mac\", 3.95)\n#R8 = Restaurant(\"Burger King\", \"Burgers\", \"444-3344\", \"Whopper\", 3.75)\n#R9 = Restaurant(\"Wahoo's\", \"Fish Tacos\", \"443-4443\", \"Mahi Mahi Burrito\", 7.50)\n#R10 = Restaurant(\"In-N-Out Burger\", \"Burgers\", \"434-3344\", \"Cheeseburger\", 2.50)\n#R11 = Restaurant(\"The Shack\", \"Burgers\", \"333-3334\", \"Hot Link Burger\", 4.50)\n#R12 = Restaurant(\"Gina's\", \"Pizza\", \"334-4433\", \"Combo Pizza\", 12.95)\n#R13 = Restaurant(\"Peacock, Room\", \"Indian\", \"333-4443\", \"Rogan Josh\", 12.50)\n#R14 = Restaurant(\"Gaylord\", \"Indian\", \"333-3433\", \"Tandoori Chicken\", 13.50)\n#R15 = Restaurant(\"Mr. Chow\", \"Chinese\", \"222-3333\", \"Peking Duck\", 24.50)\n#R16 = Restaurant(\"Chez Panisse\", \"California\", \"222-3322\", \"Grilled Duck Breast\", 25.00)\n#R17 = Restaurant(\"Spago\", \"California\", \"333-2222\", \"Striped Bass\", 24.50)\n#R18 = Restaurant(\"Sriped Bass\", \"Seafood\", \"333-2233\", \"Cedar Plank Salmon\", 21.50)\n#R19 = Restaurant(\"Golden Pagoda\", \"Chinese\", \"232-3232\", \"Egg Foo Young\", 8.50)\n#R20 = Restaurant(\"Langer's\", \"Delicatessen\", \"333-2223\", \"Pastrami Sandwich\", 11.50)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/namedtuple.golden_py3 b/v3/tests/backend-tests/namedtuple.golden_py3 new file mode 100644 index 000000000..5af269044 --- /dev/null +++ b/v3/tests/backend-tests/namedtuple.golden_py3 @@ -0,0 +1,620 @@ +{ + "code": "from collections import namedtuple\n\nRestaurant = namedtuple('Restaurant', 'name cuisine phone dish price')\n\nR1 = Restaurant(\"Taillevent\", \"French\", \"343-3434\", \"Escargots\", 24.50)\nR2 = Restaurant(\"La Tour D'Argent\", \"French\", \"343-3344\", \"Ris de Veau\", 48.50)\n\n#R3 = Restaurant(\"Pascal\", \"French\", \"333-4444\", \"Bouillabaisse\", 32.00)\n#R4 = Restaurant(\"Thai Touch\", \"Thai\", \"444-3333\", \"Mee Krob\", 10.95)\n#R5 = Restaurant(\"Thai Dishes\", \"Thai\", \"333-4433\", \"Paht Woon Sen\", 8.50)\n#R6 = Restaurant(\"Thai Spoon\", \"Thai\", \"334-3344\", \"Mussamun\", 9.00)\n#R7 = Restaurant(\"McDonald's\", \"Burgers\", \"333-4443\", \"Big Mac\", 3.95)\n#R8 = Restaurant(\"Burger King\", \"Burgers\", \"444-3344\", \"Whopper\", 3.75)\n#R9 = Restaurant(\"Wahoo's\", \"Fish Tacos\", \"443-4443\", \"Mahi Mahi Burrito\", 7.50)\n#R10 = Restaurant(\"In-N-Out Burger\", \"Burgers\", \"434-3344\", \"Cheeseburger\", 2.50)\n#R11 = Restaurant(\"The Shack\", \"Burgers\", \"333-3334\", \"Hot Link Burger\", 4.50)\n#R12 = Restaurant(\"Gina's\", \"Pizza\", \"334-4433\", \"Combo Pizza\", 12.95)\n#R13 = Restaurant(\"Peacock, Room\", \"Indian\", \"333-4443\", \"Rogan Josh\", 12.50)\n#R14 = Restaurant(\"Gaylord\", \"Indian\", \"333-3433\", \"Tandoori Chicken\", 13.50)\n#R15 = Restaurant(\"Mr. Chow\", \"Chinese\", \"222-3333\", \"Peking Duck\", 24.50)\n#R16 = Restaurant(\"Chez Panisse\", \"California\", \"222-3322\", \"Grilled Duck Breast\", 25.00)\n#R17 = Restaurant(\"Spago\", \"California\", \"333-2222\", \"Striped Bass\", 24.50)\n#R18 = Restaurant(\"Sriped Bass\", \"Seafood\", \"333-2233\", \"Cedar Plank Salmon\", 21.50)\n#R19 = Restaurant(\"Golden Pagoda\", \"Chinese\", \"232-3232\", \"Egg Foo Young\", 8.50)\n#R20 = Restaurant(\"Langer's\", \"Delicatessen\", \"333-2223\", \"Pastrami Sandwich\", 11.50)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 16 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/namedtuple.txt b/v3/tests/backend-tests/namedtuple.txt new file mode 100644 index 000000000..218d64349 --- /dev/null +++ b/v3/tests/backend-tests/namedtuple.txt @@ -0,0 +1,25 @@ +from collections import namedtuple + +Restaurant = namedtuple('Restaurant', 'name cuisine phone dish price') + +R1 = Restaurant("Taillevent", "French", "343-3434", "Escargots", 24.50) +R2 = Restaurant("La Tour D'Argent", "French", "343-3344", "Ris de Veau", 48.50) + +#R3 = Restaurant("Pascal", "French", "333-4444", "Bouillabaisse", 32.00) +#R4 = Restaurant("Thai Touch", "Thai", "444-3333", "Mee Krob", 10.95) +#R5 = Restaurant("Thai Dishes", "Thai", "333-4433", "Paht Woon Sen", 8.50) +#R6 = Restaurant("Thai Spoon", "Thai", "334-3344", "Mussamun", 9.00) +#R7 = Restaurant("McDonald's", "Burgers", "333-4443", "Big Mac", 3.95) +#R8 = Restaurant("Burger King", "Burgers", "444-3344", "Whopper", 3.75) +#R9 = Restaurant("Wahoo's", "Fish Tacos", "443-4443", "Mahi Mahi Burrito", 7.50) +#R10 = Restaurant("In-N-Out Burger", "Burgers", "434-3344", "Cheeseburger", 2.50) +#R11 = Restaurant("The Shack", "Burgers", "333-3334", "Hot Link Burger", 4.50) +#R12 = Restaurant("Gina's", "Pizza", "334-4433", "Combo Pizza", 12.95) +#R13 = Restaurant("Peacock, Room", "Indian", "333-4443", "Rogan Josh", 12.50) +#R14 = Restaurant("Gaylord", "Indian", "333-3433", "Tandoori Chicken", 13.50) +#R15 = Restaurant("Mr. Chow", "Chinese", "222-3333", "Peking Duck", 24.50) +#R16 = Restaurant("Chez Panisse", "California", "222-3322", "Grilled Duck Breast", 25.00) +#R17 = Restaurant("Spago", "California", "333-2222", "Striped Bass", 24.50) +#R18 = Restaurant("Sriped Bass", "Seafood", "333-2233", "Cedar Plank Salmon", 21.50) +#R19 = Restaurant("Golden Pagoda", "Chinese", "232-3232", "Egg Foo Young", 8.50) +#R20 = Restaurant("Langer's", "Delicatessen", "333-2223", "Pastrami Sandwich", 11.50) diff --git a/v3/tests/backend-tests/nested-class-test.golden b/v3/tests/backend-tests/nested-class-test.golden new file mode 100644 index 000000000..5c15d317d --- /dev/null +++ b/v3/tests/backend-tests/nested-class-test.golden @@ -0,0 +1,305 @@ +{ + "code": "class A:\n x = 5\n class B:\n y = 6\n class C:\n z = 7\n\na = A()\nb = a.B()\nc = b.C()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ], + "4": [ + "INSTANCE", + "A" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ], + "4": [ + "INSTANCE", + "A" + ], + "5": [ + "INSTANCE", + "B" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a", + "b", + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ], + "c": [ + "REF", + 6 + ], + "b": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ], + "4": [ + "INSTANCE", + "A" + ], + "5": [ + "INSTANCE", + "B" + ], + "6": [ + "INSTANCE", + "C" + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/nested-class-test.golden_py3 b/v3/tests/backend-tests/nested-class-test.golden_py3 new file mode 100644 index 000000000..5c15d317d --- /dev/null +++ b/v3/tests/backend-tests/nested-class-test.golden_py3 @@ -0,0 +1,305 @@ +{ + "code": "class A:\n x = 5\n class B:\n y = 6\n class C:\n z = 7\n\na = A()\nb = a.B()\nc = b.C()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ], + "4": [ + "INSTANCE", + "A" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ], + "b": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ], + "4": [ + "INSTANCE", + "A" + ], + "5": [ + "INSTANCE", + "B" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a", + "b", + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ], + "c": [ + "REF", + 6 + ], + "b": [ + "REF", + 5 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "B", + [ + "REF", + 2 + ] + ], + [ + "x", + 5 + ] + ], + "2": [ + "CLASS", + "B", + [], + [ + "C", + [ + "REF", + 3 + ] + ], + [ + "y", + 6 + ] + ], + "3": [ + "CLASS", + "C", + [], + [ + "z", + 7 + ] + ], + "4": [ + "INSTANCE", + "A" + ], + "5": [ + "INSTANCE", + "B" + ], + "6": [ + "INSTANCE", + "C" + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/nested-class-test.txt b/v3/tests/backend-tests/nested-class-test.txt new file mode 100644 index 000000000..0c4da73da --- /dev/null +++ b/v3/tests/backend-tests/nested-class-test.txt @@ -0,0 +1,10 @@ +class A: + x = 5 + class B: + y = 6 + class C: + z = 7 + +a = A() +b = a.B() +c = b.C() diff --git a/v3/tests/backend-tests/nested-func-double-call.golden b/v3/tests/backend-tests/nested-func-double-call.golden new file mode 100644 index 000000000..a81b85d29 --- /dev/null +++ b/v3/tests/backend-tests/nested-func-double-call.golden @@ -0,0 +1,698 @@ +{ + "code": "# from Berkeley CS61a:\ndef f(p, k):\n def g(): # super tricky because there are two g's with DIFFERENT parent frames\n print(k)\n if k == 0:\n f(g, 1)\n\nf(None, 0)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "p": [ + "REF", + 2 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "p": [ + "REF", + 2 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/nested-func-double-call.golden_py3 b/v3/tests/backend-tests/nested-func-double-call.golden_py3 new file mode 100644 index 000000000..a81b85d29 --- /dev/null +++ b/v3/tests/backend-tests/nested-func-double-call.golden_py3 @@ -0,0 +1,698 @@ +{ + "code": "# from Berkeley CS61a:\ndef f(p, k):\n def g(): # super tricky because there are two g's with DIFFERENT parent frames\n print(k)\n if k == 0:\n f(g, 1)\n\nf(None, 0)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "p": [ + "REF", + 2 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "p": [ + "REF", + 2 + ], + "k": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2", + "ordered_varnames": [ + "p", + "k" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "p": null, + "k": 0, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "p": [ + "REF", + 2 + ], + "k": 1, + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f2_p_z", + "ordered_varnames": [ + "p", + "k", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(p, k)", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 2 + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/nested-func-double-call.txt b/v3/tests/backend-tests/nested-func-double-call.txt new file mode 100644 index 000000000..d0fd10b0f --- /dev/null +++ b/v3/tests/backend-tests/nested-func-double-call.txt @@ -0,0 +1,8 @@ +# from Berkeley CS61a: +def f(p, k): + def g(): # super tricky because there are two g's with DIFFERENT parent frames + print(k) + if k == 0: + f(g, 1) + +f(None, 0) diff --git a/v3/tests/backend-tests/nested-func-identical-frames.golden b/v3/tests/backend-tests/nested-func-identical-frames.golden new file mode 100644 index 000000000..299be5e11 --- /dev/null +++ b/v3/tests/backend-tests/nested-func-identical-frames.golden @@ -0,0 +1,1102 @@ +{ + "code": "def f():\n def g():\n pass\n return g\n\nf()()\nf()()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p", + "ordered_varnames": [ + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 3 + ], + "unique_hash": "g_f4", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 3 + ], + "unique_hash": "g_f4", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 3 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/nested-func-identical-frames.golden_py3 b/v3/tests/backend-tests/nested-func-identical-frames.golden_py3 new file mode 100644 index 000000000..299be5e11 --- /dev/null +++ b/v3/tests/backend-tests/nested-func-identical-frames.golden_py3 @@ -0,0 +1,1102 @@ +{ + "code": "def f():\n def g():\n pass\n return g\n\nf()()\nf()()\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p", + "ordered_varnames": [ + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 3 + ], + "unique_hash": "g_f4", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": {}, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 3 + ], + "unique_hash": "g_f4", + "ordered_varnames": [] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "__return__": null + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 3 + ], + "unique_hash": "g_f4", + "ordered_varnames": [ + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": [ + "REF", + 2 + ], + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": [ + "REF", + 3 + ], + "g": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f3_p_z", + "ordered_varnames": [ + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f()", + null + ], + "2": [ + "FUNCTION", + "g()", + 1 + ], + "3": [ + "FUNCTION", + "g()", + 3 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/nested-func-identical-frames.txt b/v3/tests/backend-tests/nested-func-identical-frames.txt new file mode 100644 index 000000000..460c70c03 --- /dev/null +++ b/v3/tests/backend-tests/nested-func-identical-frames.txt @@ -0,0 +1,7 @@ +def f(): + def g(): + pass + return g + +f()() +f()() diff --git a/v3/tests/backend-tests/newstyle_class.golden b/v3/tests/backend-tests/newstyle_class.golden new file mode 100644 index 000000000..e54f299c0 --- /dev/null +++ b/v3/tests/backend-tests/newstyle_class.golden @@ -0,0 +1,817 @@ +{ + "code": "class A(object):\n bla = \"A\"\n def __init__(self):\n self.blb = \"B\"\n\n def x(self):\n self.bla = self.blb\n\na = A()\n\na.x()\n\nprint(a.bla)\nprint(A.bla)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "x", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "x", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "x_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "x", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "x", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "x_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "x", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "x", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "x_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "B\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "B\nA\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 14, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/newstyle_class.golden_py3 b/v3/tests/backend-tests/newstyle_class.golden_py3 new file mode 100644 index 000000000..e54f299c0 --- /dev/null +++ b/v3/tests/backend-tests/newstyle_class.golden_py3 @@ -0,0 +1,817 @@ +{ + "code": "class A(object):\n bla = \"A\"\n def __init__(self):\n self.blb = \"B\"\n\n def x(self):\n self.bla = self.blb\n\na = A()\n\na.x()\n\nprint(a.bla)\nprint(A.bla)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A" + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "A" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "x", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "x", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "x_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 6, + "event": "call" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "x", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "x", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "x_f2", + "ordered_varnames": [ + "self" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "blb", + "B" + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "x", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 4 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "x", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "x_f2", + "ordered_varnames": [ + "self", + "__return__" + ] + } + ], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 7, + "event": "return" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "B\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "A", + "a" + ], + "stdout": "B\nA\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "A": [ + "REF", + 1 + ], + "a": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "A", + [], + [ + "__init__", + [ + "REF", + 2 + ] + ], + [ + "bla", + "A" + ], + [ + "x", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "FUNCTION", + "__init__(self)", + null + ], + "3": [ + "FUNCTION", + "x(self)", + null + ], + "4": [ + "INSTANCE", + "A", + [ + "bla", + "B" + ], + [ + "blb", + "B" + ] + ] + }, + "line": 14, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/newstyle_class.txt b/v3/tests/backend-tests/newstyle_class.txt new file mode 100644 index 000000000..bc5e5551a --- /dev/null +++ b/v3/tests/backend-tests/newstyle_class.txt @@ -0,0 +1,15 @@ +class A(object): + bla = "A" + def __init__(self): + self.blb = "B" + + def x(self): + self.bla = self.blb + +a = A() + +a.x() + +print(a.bla) +print(A.bla) + diff --git a/v3/tests/backend-tests/one_func.golden b/v3/tests/backend-tests/one_func.golden new file mode 100644 index 000000000..ecd811f5c --- /dev/null +++ b/v3/tests/backend-tests/one_func.golden @@ -0,0 +1,350 @@ +{ + "code": "def add(a, b, c):\n d = a + b\n return c + d\n\nx = 5\ny = 10\nz = x * y\nprint(add(x, y, z))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "add" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5, + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/one_func.golden_py3 b/v3/tests/backend-tests/one_func.golden_py3 new file mode 100644 index 000000000..ecd811f5c --- /dev/null +++ b/v3/tests/backend-tests/one_func.golden_py3 @@ -0,0 +1,350 @@ +{ + "code": "def add(a, b, c):\n d = a + b\n return c + d\n\nx = 5\ny = 10\nz = x * y\nprint(add(x, y, z))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "add" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5, + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50 + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/one_func.txt b/v3/tests/backend-tests/one_func.txt new file mode 100644 index 000000000..9ade23636 --- /dev/null +++ b/v3/tests/backend-tests/one_func.txt @@ -0,0 +1,8 @@ +def add(a, b, c): + d = a + b + return c + d + +x = 5 +y = 10 +z = x * y +print(add(x, y, z)) diff --git a/v3/tests/backend-tests/open_error.golden b/v3/tests/backend-tests/open_error.golden new file mode 100644 index 000000000..bd722019e --- /dev/null +++ b/v3/tests/backend-tests/open_error.golden @@ -0,0 +1,26 @@ +{ + "code": "for line in open(\"/etc/passwd\"):\n print(line)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "Exception: open() is not supported.\nInstead use StringIO.StringIO() to simulate a file.\nHere is an example: http://goo.gl/Q9xQ4p", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/open_error.golden_py3 b/v3/tests/backend-tests/open_error.golden_py3 new file mode 100644 index 000000000..ecca3ce4f --- /dev/null +++ b/v3/tests/backend-tests/open_error.golden_py3 @@ -0,0 +1,26 @@ +{ + "code": "for line in open(\"/etc/passwd\"):\n print(line)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "Exception: open() is not supported.\nInstead use io.StringIO() to simulate a file.\nHere is an example: http://goo.gl/uNvBGl", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/open_error.txt b/v3/tests/backend-tests/open_error.txt new file mode 100644 index 000000000..a80454764 --- /dev/null +++ b/v3/tests/backend-tests/open_error.txt @@ -0,0 +1,3 @@ +for line in open("/etc/passwd"): + print(line) + diff --git a/v3/tests/backend-tests/papajohn-monster.golden b/v3/tests/backend-tests/papajohn-monster.golden new file mode 100644 index 000000000..d52ccd889 --- /dev/null +++ b/v3/tests/backend-tests/papajohn-monster.golden @@ -0,0 +1,988 @@ +{ + "code": "# original reported by papajohn in Oct 2013\nclass Monster:\n vampire = {2: 'scary'}\n def werewolf(self):\n return self.vampire[2]\n\nclass Blob(Monster):\n vampire = {2: 'night'}\n def __init__(self, ghoul):\n self.witch = ghoul.vampire\n self.witch[3] = self\n\nspooky = Blob(Monster)\nspooky.werewolf = lambda self: Monster.vampire[2]\n\n\n# minimized by pgbovine ...\n'''\nclass Monster:\n def werewolf(self):\n pass\n\nclass Blob(Monster):\n def __init__(self, ghoul):\n pass\n\nspooky = Blob(Monster)\n'''\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Monster": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob" + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "witch", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul", + "__return__" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "witch", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Monster", + "Blob", + "spooky" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "spooky": [ + "REF", + 7 + ], + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "witch", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob", + "spooky" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "spooky": [ + "REF", + 7 + ], + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "werewolf", + [ + "REF", + 8 + ] + ], + [ + "witch", + [ + "REF", + 2 + ] + ] + ], + "8": [ + "FUNCTION", + "(self) ", + null + ] + }, + "line": 28, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob", + "spooky" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "spooky": [ + "REF", + 7 + ], + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "werewolf", + [ + "REF", + 8 + ] + ], + [ + "witch", + [ + "REF", + 2 + ] + ] + ], + "8": [ + "FUNCTION", + "(self) ", + null + ] + }, + "line": 28, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/papajohn-monster.golden_py3 b/v3/tests/backend-tests/papajohn-monster.golden_py3 new file mode 100644 index 000000000..d52ccd889 --- /dev/null +++ b/v3/tests/backend-tests/papajohn-monster.golden_py3 @@ -0,0 +1,988 @@ +{ + "code": "# original reported by papajohn in Oct 2013\nclass Monster:\n vampire = {2: 'scary'}\n def werewolf(self):\n return self.vampire[2]\n\nclass Blob(Monster):\n vampire = {2: 'night'}\n def __init__(self, ghoul):\n self.witch = ghoul.vampire\n self.witch[3] = self\n\nspooky = Blob(Monster)\nspooky.werewolf = lambda self: Monster.vampire[2]\n\n\n# minimized by pgbovine ...\n'''\nclass Monster:\n def werewolf(self):\n pass\n\nclass Blob(Monster):\n def __init__(self, ghoul):\n pass\n\nspooky = Blob(Monster)\n'''\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Monster": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob" + ] + }, + "line": 9, + "event": "call" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "witch", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob" + ], + "stdout": "", + "func_name": "__init__", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "self": [ + "REF", + 7 + ], + "ghoul": [ + "REF", + 1 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "__init__", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "__init___f1", + "ordered_varnames": [ + "self", + "ghoul", + "__return__" + ] + } + ], + "globals": { + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "witch", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 11, + "event": "return" + }, + { + "ordered_globals": [ + "Monster", + "Blob", + "spooky" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "spooky": [ + "REF", + 7 + ], + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "witch", + [ + "REF", + 2 + ] + ] + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob", + "spooky" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "spooky": [ + "REF", + 7 + ], + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "werewolf", + [ + "REF", + 8 + ] + ], + [ + "witch", + [ + "REF", + 2 + ] + ] + ], + "8": [ + "FUNCTION", + "(self) ", + null + ] + }, + "line": 28, + "event": "step_line" + }, + { + "ordered_globals": [ + "Monster", + "Blob", + "spooky" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "spooky": [ + "REF", + 7 + ], + "Monster": [ + "REF", + 1 + ], + "Blob": [ + "REF", + 4 + ] + }, + "heap": { + "1": [ + "CLASS", + "Monster", + [], + [ + "vampire", + [ + "REF", + 2 + ] + ], + [ + "werewolf", + [ + "REF", + 3 + ] + ] + ], + "2": [ + "DICT", + [ + 2, + "scary" + ], + [ + 3, + [ + "REF", + 7 + ] + ] + ], + "3": [ + "FUNCTION", + "werewolf(self)", + null + ], + "4": [ + "CLASS", + "Blob", + [ + "Monster" + ], + [ + "__init__", + [ + "REF", + 5 + ] + ], + [ + "vampire", + [ + "REF", + 6 + ] + ] + ], + "5": [ + "FUNCTION", + "__init__(self, ghoul)", + null + ], + "6": [ + "DICT", + [ + 2, + "night" + ] + ], + "7": [ + "INSTANCE", + "Blob", + [ + "werewolf", + [ + "REF", + 8 + ] + ], + [ + "witch", + [ + "REF", + 2 + ] + ] + ], + "8": [ + "FUNCTION", + "(self) ", + null + ] + }, + "line": 28, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/papajohn-monster.txt b/v3/tests/backend-tests/papajohn-monster.txt new file mode 100644 index 000000000..700090839 --- /dev/null +++ b/v3/tests/backend-tests/papajohn-monster.txt @@ -0,0 +1,28 @@ +# original reported by papajohn in Oct 2013 +class Monster: + vampire = {2: 'scary'} + def werewolf(self): + return self.vampire[2] + +class Blob(Monster): + vampire = {2: 'night'} + def __init__(self, ghoul): + self.witch = ghoul.vampire + self.witch[3] = self + +spooky = Blob(Monster) +spooky.werewolf = lambda self: Monster.vampire[2] + + +# minimized by pgbovine ... +''' +class Monster: + def werewolf(self): + pass + +class Blob(Monster): + def __init__(self, ghoul): + pass + +spooky = Blob(Monster) +''' diff --git a/v3/tests/backend-tests/parent-finding-1.golden b/v3/tests/backend-tests/parent-finding-1.golden new file mode 100644 index 000000000..00a4aab28 --- /dev/null +++ b/v3/tests/backend-tests/parent-finding-1.golden @@ -0,0 +1,483 @@ +{ + "code": "# make sure OPT finds f as the parent of g\ndef f(x, y):\n def g(x):\n return x + y\n return g(3)\n\nf(1, 2)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 5, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 5, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 5, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "y", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/parent-finding-1.golden_py3 b/v3/tests/backend-tests/parent-finding-1.golden_py3 new file mode 100644 index 000000000..00a4aab28 --- /dev/null +++ b/v3/tests/backend-tests/parent-finding-1.golden_py3 @@ -0,0 +1,483 @@ +{ + "code": "# make sure OPT finds f as the parent of g\ndef f(x, y):\n def g(x):\n return x + y\n return g(3)\n\nf(1, 2)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "x", + "y" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "g", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 5, + "x": 3 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "g", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "g_f2", + "ordered_varnames": [ + "x", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 5, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p", + "ordered_varnames": [ + "x", + "y", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "y": 2, + "x": 1, + "__return__": 5, + "g": [ + "REF", + 2 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "f", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "f_f1_p_z", + "ordered_varnames": [ + "x", + "y", + "g", + "__return__" + ] + } + ], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(x, y)", + null + ], + "2": [ + "FUNCTION", + "g(x)", + 1 + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/parent-finding-1.txt b/v3/tests/backend-tests/parent-finding-1.txt new file mode 100644 index 000000000..0726f0726 --- /dev/null +++ b/v3/tests/backend-tests/parent-finding-1.txt @@ -0,0 +1,7 @@ +# make sure OPT finds f as the parent of g +def f(x, y): + def g(x): + return x + y + return g(3) + +f(1, 2) diff --git a/v3/tests/backend-tests/parent-finding-2.golden b/v3/tests/backend-tests/parent-finding-2.golden new file mode 100644 index 000000000..c17bd4180 --- /dev/null +++ b/v3/tests/backend-tests/parent-finding-2.golden @@ -0,0 +1,957 @@ +{ + "code": "# make sure OPT finds horse as parent of mask\ndef horse(mask):\n horse = mask\n def mask(horse):\n return horse\n return horse(mask)\n\nmask = lambda horse: horse(2)\n\nhorse(mask)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "horse": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "mask": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1", + "ordered_varnames": [ + "mask" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "mask": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1", + "ordered_varnames": [ + "mask" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1", + "ordered_varnames": [ + "mask", + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "mask", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "horse": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "mask", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "mask_f3", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "mask", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "horse": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "mask", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "mask_f3", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "mask", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 2, + "horse": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "mask", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "mask_f3", + "ordered_varnames": [ + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 2, + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 2, + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 2, + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p_z", + "ordered_varnames": [ + "mask", + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/parent-finding-2.golden_py3 b/v3/tests/backend-tests/parent-finding-2.golden_py3 new file mode 100644 index 000000000..c17bd4180 --- /dev/null +++ b/v3/tests/backend-tests/parent-finding-2.golden_py3 @@ -0,0 +1,957 @@ +{ + "code": "# make sure OPT finds horse as parent of mask\ndef horse(mask):\n horse = mask\n def mask(horse):\n return horse\n return horse(mask)\n\nmask = lambda horse: horse(2)\n\nhorse(mask)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "horse": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "mask": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1", + "ordered_varnames": [ + "mask" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 2, + "event": "call" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "mask": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1", + "ordered_varnames": [ + "mask" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1", + "ordered_varnames": [ + "mask", + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 8, + "event": "call" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "mask", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "horse": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "mask", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "mask_f3", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 4, + "event": "call" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "mask", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "horse": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "mask", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "mask_f3", + "ordered_varnames": [ + "horse" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "mask", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "__return__": 2, + "horse": 2 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "mask", + "is_zombie": false, + "parent_frame_id_list": [ + 1 + ], + "unique_hash": "mask_f3", + "ordered_varnames": [ + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 5, + "event": "return" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse" + ] + }, + { + "frame_id": 2, + "encoded_locals": { + "__return__": 2, + "horse": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": " ", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": " _f2", + "ordered_varnames": [ + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "horse", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 2, + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": true, + "func_name": "horse", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p", + "ordered_varnames": [ + "mask", + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 6, + "event": "return" + }, + { + "ordered_globals": [ + "horse", + "mask" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": 2, + "horse": [ + "REF", + 2 + ], + "mask": [ + "REF", + 3 + ] + }, + "is_highlighted": false, + "is_parent": true, + "func_name": "horse", + "is_zombie": true, + "parent_frame_id_list": [], + "unique_hash": "horse_f1_p_z", + "ordered_varnames": [ + "mask", + "horse", + "__return__" + ] + } + ], + "globals": { + "horse": [ + "REF", + 1 + ], + "mask": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "horse(mask)", + null + ], + "2": [ + "FUNCTION", + "(horse) ", + null + ], + "3": [ + "FUNCTION", + "mask(horse)", + 1 + ] + }, + "line": 10, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/parent-finding-2.txt b/v3/tests/backend-tests/parent-finding-2.txt new file mode 100644 index 000000000..c117d4163 --- /dev/null +++ b/v3/tests/backend-tests/parent-finding-2.txt @@ -0,0 +1,10 @@ +# make sure OPT finds horse as parent of mask +def horse(mask): + horse = mask + def mask(horse): + return horse + return horse(mask) + +mask = lambda horse: horse(2) + +horse(mask) diff --git a/v3/tests/backend-tests/parse_error.golden b/v3/tests/backend-tests/parse_error.golden new file mode 100644 index 000000000..047dce543 --- /dev/null +++ b/v3/tests/backend-tests/parse_error.golden @@ -0,0 +1,11 @@ +{ + "code": "x = 0\nfor i in range(10):\n x += 1\n print x\n x += 1\n\n", + "trace": [ + { + "exception_msg": "IndentationError: unexpected indent (, line 4)", + "line": 4, + "event": "uncaught_exception", + "offset": 3 + } + ] +} diff --git a/v3/tests/backend-tests/parse_error.golden_py3 b/v3/tests/backend-tests/parse_error.golden_py3 new file mode 100644 index 000000000..047dce543 --- /dev/null +++ b/v3/tests/backend-tests/parse_error.golden_py3 @@ -0,0 +1,11 @@ +{ + "code": "x = 0\nfor i in range(10):\n x += 1\n print x\n x += 1\n\n", + "trace": [ + { + "exception_msg": "IndentationError: unexpected indent (, line 4)", + "line": 4, + "event": "uncaught_exception", + "offset": 3 + } + ] +} diff --git a/v3/tests/backend-tests/parse_error.txt b/v3/tests/backend-tests/parse_error.txt new file mode 100644 index 000000000..efab03533 --- /dev/null +++ b/v3/tests/backend-tests/parse_error.txt @@ -0,0 +1,6 @@ +x = 0 +for i in range(10): + x += 1 + print x + x += 1 + diff --git a/v3/tests/backend-tests/parse_error_2.golden b/v3/tests/backend-tests/parse_error_2.golden new file mode 100644 index 000000000..a6973b8ee --- /dev/null +++ b/v3/tests/backend-tests/parse_error_2.golden @@ -0,0 +1,11 @@ +{ + "code": "x = 5\ny = x\nz = x + y\n\nfor x haslk;fjlasfhlkjl;sa\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 5)", + "line": 5, + "event": "uncaught_exception", + "offset": 11 + } + ] +} diff --git a/v3/tests/backend-tests/parse_error_2.golden_py3 b/v3/tests/backend-tests/parse_error_2.golden_py3 new file mode 100644 index 000000000..a6973b8ee --- /dev/null +++ b/v3/tests/backend-tests/parse_error_2.golden_py3 @@ -0,0 +1,11 @@ +{ + "code": "x = 5\ny = x\nz = x + y\n\nfor x haslk;fjlasfhlkjl;sa\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 5)", + "line": 5, + "event": "uncaught_exception", + "offset": 11 + } + ] +} diff --git a/v3/tests/backend-tests/parse_error_2.txt b/v3/tests/backend-tests/parse_error_2.txt new file mode 100644 index 000000000..80070e74b --- /dev/null +++ b/v3/tests/backend-tests/parse_error_2.txt @@ -0,0 +1,5 @@ +x = 5 +y = x +z = x + y + +for x haslk;fjlasfhlkjl;sa diff --git a/v3/tests/backend-tests/parse_error_3.golden b/v3/tests/backend-tests/parse_error_3.golden new file mode 100644 index 000000000..8ae537dd0 --- /dev/null +++ b/v3/tests/backend-tests/parse_error_3.golden @@ -0,0 +1,11 @@ +{ + "code": "x = []\nfor i in range(10):\n x.append(i)\n if i == 24:\n pass\n print y\n", + "trace": [ + { + "exception_msg": "IndentationError: unindent does not match any outer indentation level (, line 6)", + "line": 6, + "event": "uncaught_exception", + "offset": 11 + } + ] +} diff --git a/v3/tests/backend-tests/parse_error_3.golden_py3 b/v3/tests/backend-tests/parse_error_3.golden_py3 new file mode 100644 index 000000000..8ae537dd0 --- /dev/null +++ b/v3/tests/backend-tests/parse_error_3.golden_py3 @@ -0,0 +1,11 @@ +{ + "code": "x = []\nfor i in range(10):\n x.append(i)\n if i == 24:\n pass\n print y\n", + "trace": [ + { + "exception_msg": "IndentationError: unindent does not match any outer indentation level (, line 6)", + "line": 6, + "event": "uncaught_exception", + "offset": 11 + } + ] +} diff --git a/v3/tests/backend-tests/parse_error_3.txt b/v3/tests/backend-tests/parse_error_3.txt new file mode 100644 index 000000000..bcc7bbf0e --- /dev/null +++ b/v3/tests/backend-tests/parse_error_3.txt @@ -0,0 +1,6 @@ +x = [] +for i in range(10): + x.append(i) + if i == 24: + pass + print y diff --git a/v3/tests/backend-tests/pie-test.golden b/v3/tests/backend-tests/pie-test.golden new file mode 100644 index 000000000..1a5218ee0 --- /dev/null +++ b/v3/tests/backend-tests/pie-test.golden @@ -0,0 +1,91 @@ +{ + "code": "import operator\nfrom math import pi, e\npie = operator.add(pi, e)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "operator" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "operator" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "operator", + "pi", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 1 + ], + "pi": 3.142, + "e": 2.718 + }, + "heap": { + "1": [ + "module", + "operator" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "operator", + "pi", + "e", + "pie" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 1 + ], + "pi": 3.142, + "e": 2.718, + "pie": 5.860 + }, + "heap": { + "1": [ + "module", + "operator" + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/pie-test.golden_py3 b/v3/tests/backend-tests/pie-test.golden_py3 new file mode 100644 index 000000000..e913056f2 --- /dev/null +++ b/v3/tests/backend-tests/pie-test.golden_py3 @@ -0,0 +1,91 @@ +{ + "code": "import operator\nfrom math import pi, e\npie = operator.add(pi, e)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "operator" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "operator", + "pi", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 1 + ], + "pi": 3.142, + "e": 2.718 + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "operator", + "pi", + "e", + "pie" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "operator": [ + "REF", + 1 + ], + "pi": 3.142, + "e": 2.718, + "pie": 5.860 + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 3, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/pie-test.txt b/v3/tests/backend-tests/pie-test.txt new file mode 100644 index 000000000..a73f77ec2 --- /dev/null +++ b/v3/tests/backend-tests/pie-test.txt @@ -0,0 +1,3 @@ +import operator +from math import pi, e +pie = operator.add(pi, e) diff --git a/v3/tests/backend-tests/py-modules.golden b/v3/tests/backend-tests/py-modules.golden new file mode 100644 index 000000000..6f5f87c33 --- /dev/null +++ b/v3/tests/backend-tests/py-modules.golden @@ -0,0 +1,132 @@ +{ + "code": "# test to make sure nothing crashes when tracing code in pure-Python\n# function calls imported from modules\nimport random\nrandom.randint(10, 100)\n\nfrom re import compile\nx = compile('foo')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "random" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "random" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "random" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "random" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "random", + "compile" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "compile": [ + "REF", + 2 + ], + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "random" + ], + "2": [ + "FUNCTION", + "compile(pattern, flags)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "random", + "compile", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "compile": [ + "REF", + 2 + ], + "x": [ + "REF", + 3 + ], + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "random" + ], + "2": [ + "FUNCTION", + "compile(pattern, flags)", + null + ], + "3": [ + "_sre.SRE_Pattern", + "<_sre.SRE_Pattern object at 0xADDR>" + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/py-modules.golden_py3 b/v3/tests/backend-tests/py-modules.golden_py3 new file mode 100644 index 000000000..e8551d9ee --- /dev/null +++ b/v3/tests/backend-tests/py-modules.golden_py3 @@ -0,0 +1,132 @@ +{ + "code": "# test to make sure nothing crashes when tracing code in pure-Python\n# function calls imported from modules\nimport random\nrandom.randint(10, 100)\n\nfrom re import compile\nx = compile('foo')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "random" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "random" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "random", + "compile" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "compile": [ + "REF", + 2 + ], + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "compile(pattern, flags)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "random", + "compile", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "compile": [ + "REF", + 2 + ], + "x": [ + "REF", + 3 + ], + "random": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "compile(pattern, flags)", + null + ], + "3": [ + "INSTANCE", + "SRE_Pattern" + ] + }, + "line": 7, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/py-modules.txt b/v3/tests/backend-tests/py-modules.txt new file mode 100644 index 000000000..eb4211809 --- /dev/null +++ b/v3/tests/backend-tests/py-modules.txt @@ -0,0 +1,7 @@ +# test to make sure nothing crashes when tracing code in pure-Python +# function calls imported from modules +import random +random.randint(10, 100) + +from re import compile +x = compile('foo') diff --git a/v3/tests/backend-tests/py3_func_annotations.golden b/v3/tests/backend-tests/py3_func_annotations.golden new file mode 100644 index 000000000..a62687849 --- /dev/null +++ b/v3/tests/backend-tests/py3_func_annotations.golden @@ -0,0 +1,11 @@ +{ + "code": "# test case of Python 3 function annotations inspired by David G. Kay\ndef remove_by_name(L: 'list of Restaurant', name: str) -> 'list of Restaurant':\n \"\"\" Given name, remove all Restaurants with that name from collection.\n \"\"\"\n result = []\n for r in L:\n if r.name != name:\n result.append(r)\n return result\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 2)", + "line": 2, + "event": "uncaught_exception", + "offset": 21 + } + ] +} diff --git a/v3/tests/backend-tests/py3_func_annotations.golden_py3 b/v3/tests/backend-tests/py3_func_annotations.golden_py3 new file mode 100644 index 000000000..20571a78e --- /dev/null +++ b/v3/tests/backend-tests/py3_func_annotations.golden_py3 @@ -0,0 +1,38 @@ +{ + "code": "# test case of Python 3 function annotations inspired by David G. Kay\ndef remove_by_name(L: 'list of Restaurant', name: str) -> 'list of Restaurant':\n \"\"\" Given name, remove all Restaurants with that name from collection.\n \"\"\"\n result = []\n for r in L:\n if r.name != name:\n result.append(r)\n return result\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "remove_by_name" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "remove_by_name": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "remove_by_name(L, name)", + null + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/py3_func_annotations.txt b/v3/tests/backend-tests/py3_func_annotations.txt new file mode 100644 index 000000000..24037afbf --- /dev/null +++ b/v3/tests/backend-tests/py3_func_annotations.txt @@ -0,0 +1,9 @@ +# test case of Python 3 function annotations inspired by David G. Kay +def remove_by_name(L: 'list of Restaurant', name: str) -> 'list of Restaurant': + """ Given name, remove all Restaurants with that name from collection. + """ + result = [] + for r in L: + if r.name != name: + result.append(r) + return result diff --git a/v3/tests/backend-tests/py3_kwonly_args.golden b/v3/tests/backend-tests/py3_kwonly_args.golden new file mode 100644 index 000000000..f8bfc9a22 --- /dev/null +++ b/v3/tests/backend-tests/py3_kwonly_args.golden @@ -0,0 +1,11 @@ +{ + "code": "# Python 3 keyword-only arguments\ndef my_sorted(iterable, *, reverse=False, key=None):\n pass\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 2)", + "line": 2, + "event": "uncaught_exception", + "offset": 26 + } + ] +} diff --git a/v3/tests/backend-tests/py3_kwonly_args.golden_py3 b/v3/tests/backend-tests/py3_kwonly_args.golden_py3 new file mode 100644 index 000000000..2affddfb3 --- /dev/null +++ b/v3/tests/backend-tests/py3_kwonly_args.golden_py3 @@ -0,0 +1,38 @@ +{ + "code": "# Python 3 keyword-only arguments\ndef my_sorted(iterable, *, reverse=False, key=None):\n pass\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "my_sorted" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "my_sorted": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "my_sorted(iterable, reverse, key)", + null + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/py3_kwonly_args.txt b/v3/tests/backend-tests/py3_kwonly_args.txt new file mode 100644 index 000000000..e49a8d85a --- /dev/null +++ b/v3/tests/backend-tests/py3_kwonly_args.txt @@ -0,0 +1,3 @@ +# Python 3 keyword-only arguments +def my_sorted(iterable, *, reverse=False, key=None): + pass diff --git a/v3/tests/backend-tests/raw_input_with_weird_params.golden b/v3/tests/backend-tests/raw_input_with_weird_params.golden new file mode 100644 index 000000000..e48e5be4e --- /dev/null +++ b/v3/tests/backend-tests/raw_input_with_weird_params.golden @@ -0,0 +1,19 @@ +{ + "code": "# these showed up in my server logs as errors:\n\nmax = raw_input(max) # max is a built-in function\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "prompt": "", + "event": "raw_input" + } + ] +} diff --git a/v3/tests/backend-tests/raw_input_with_weird_params.golden_py3 b/v3/tests/backend-tests/raw_input_with_weird_params.golden_py3 new file mode 100644 index 000000000..92b62f980 --- /dev/null +++ b/v3/tests/backend-tests/raw_input_with_weird_params.golden_py3 @@ -0,0 +1,26 @@ +{ + "code": "# these showed up in my server logs as errors:\n\nmax = raw_input(max) # max is a built-in function\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [], + "stdout": "", + "exception_msg": "NameError: name 'raw_input' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/raw_input_with_weird_params.txt b/v3/tests/backend-tests/raw_input_with_weird_params.txt new file mode 100644 index 000000000..ba59bd0ee --- /dev/null +++ b/v3/tests/backend-tests/raw_input_with_weird_params.txt @@ -0,0 +1,3 @@ +# these showed up in my server logs as errors: + +max = raw_input(max) # max is a built-in function diff --git a/v3/tests/backend-tests/restaurants.golden b/v3/tests/backend-tests/restaurants.golden new file mode 100644 index 000000000..a61d5783f --- /dev/null +++ b/v3/tests/backend-tests/restaurants.golden @@ -0,0 +1,5802 @@ +{ + "code": "# Adapted from an example by David G. Kay\nfrom collections import namedtuple\n\nRestaurant = namedtuple('Restaurant', 'name cuisine phone dish price')\n\nR1 = Restaurant(\"Taillevent\", \"French\", \"343-3434\", \"Escargots\", 24.50)\nR2 = Restaurant(\"La Tour D'Argent\", \"French\", \"343-3344\", \"Ris de Veau\", 48.50)\nR3 = Restaurant(\"Pascal\", \"French\", \"333-4444\", \"Bouillabaisse\", 32.00)\nR4 = Restaurant(\"Thai Touch\", \"Thai\", \"444-3333\", \"Mee Krob\", 10.95)\nR5 = Restaurant(\"Thai Dishes\", \"Thai\", \"333-4433\", \"Paht Woon Sen\", 8.50)\nR6 = Restaurant(\"Thai Spoon\", \"Thai\", \"334-3344\", \"Mussamun\", 9.00)\n\nRL = [R1, R2, R3, R4, R5, R6]\n\nFrenchRestaurants = [r for r in RL if r.cuisine==\"French\"]\nprint(FrenchRestaurants)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "Restaurant": [ + "REF", + 2 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "R3": [ + "REF", + 19 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "R5": [ + "REF", + 21 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "R5": [ + "REF", + 21 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "r": [ + "REF", + 17 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "r": [ + "REF", + 18 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "r": [ + "REF", + 19 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "r": [ + "REF", + 20 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "r": [ + "REF", + 21 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "r": [ + "REF", + 22 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r", + "FrenchRestaurants" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "FrenchRestaurants": [ + "REF", + 24 + ], + "r": [ + "REF", + 22 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ], + "24": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ] + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "r", + "FrenchRestaurants" + ], + "stdout": "[Restaurant(name='Taillevent', cuisine='French', phone='343-3434', dish='Escargots', price=24.5), Restaurant(name=\"La Tour D'Argent\", cuisine='French', phone='343-3344', dish='Ris de Veau', price=48.5), Restaurant(name='Pascal', cuisine='French', phone='333-4444', dish='Bouillabaisse', price=32.0)]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 20 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 22 + ], + "R1": [ + "REF", + 17 + ], + "R2": [ + "REF", + 18 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 19 + ], + "FrenchRestaurants": [ + "REF", + 24 + ], + "r": [ + "REF", + 22 + ], + "R5": [ + "REF", + 21 + ], + "RL": [ + "REF", + 23 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__getstate__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ], + [ + "__repr__", + [ + "REF", + 6 + ] + ], + [ + "__slots__", + [ + "REF", + 7 + ] + ], + [ + "_asdict", + [ + "REF", + 8 + ] + ], + [ + "_fields", + [ + "REF", + 9 + ] + ], + [ + "_make", + [ + "REF", + 10 + ] + ], + [ + "_replace", + [ + "REF", + 11 + ] + ], + [ + "cuisine", + [ + "REF", + 12 + ] + ], + [ + "dish", + [ + "REF", + 13 + ] + ], + [ + "name", + [ + "REF", + 14 + ] + ], + [ + "phone", + [ + "REF", + 15 + ] + ], + [ + "price", + [ + "REF", + 16 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "FUNCTION", + "__getstate__(self)", + null + ], + "5": [ + "staticmethod", + "" + ], + "6": [ + "FUNCTION", + "__repr__(self)", + null + ], + "7": [ + "TUPLE" + ], + "8": [ + "FUNCTION", + "_asdict(self)", + null + ], + "9": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "10": [ + "classmethod", + "" + ], + "11": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "12": [ + "property", + "" + ], + "13": [ + "property", + "" + ], + "14": [ + "property", + "" + ], + "15": [ + "property", + "" + ], + "16": [ + "property", + "" + ], + "17": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Escargots" + ], + [ + "name", + "Taillevent" + ], + [ + "phone", + "343-3434" + ], + [ + "price", + 24.500 + ] + ], + "18": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Ris de Veau" + ], + [ + "name", + "La Tour D'Argent" + ], + [ + "phone", + "343-3344" + ], + [ + "price", + 48.500 + ] + ], + "19": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "French" + ], + [ + "dish", + "Bouillabaisse" + ], + [ + "name", + "Pascal" + ], + [ + "phone", + "333-4444" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "32.0" + ] + ] + ], + "20": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mee Krob" + ], + [ + "name", + "Thai Touch" + ], + [ + "phone", + "444-3333" + ], + [ + "price", + 10.950 + ] + ], + "21": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Paht Woon Sen" + ], + [ + "name", + "Thai Dishes" + ], + [ + "phone", + "333-4433" + ], + [ + "price", + 8.500 + ] + ], + "22": [ + "INSTANCE", + "Restaurant", + [ + "cuisine", + "Thai" + ], + [ + "dish", + "Mussamun" + ], + [ + "name", + "Thai Spoon" + ], + [ + "phone", + "334-3344" + ], + [ + "price", + [ + "SPECIAL_FLOAT", + "9.0" + ] + ] + ], + "23": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ], + [ + "REF", + 22 + ] + ], + "24": [ + "LIST", + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ] + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/restaurants.golden_py3 b/v3/tests/backend-tests/restaurants.golden_py3 new file mode 100644 index 000000000..260b288b5 --- /dev/null +++ b/v3/tests/backend-tests/restaurants.golden_py3 @@ -0,0 +1,5076 @@ +{ + "code": "# Adapted from an example by David G. Kay\nfrom collections import namedtuple\n\nRestaurant = namedtuple('Restaurant', 'name cuisine phone dish price')\n\nR1 = Restaurant(\"Taillevent\", \"French\", \"343-3434\", \"Escargots\", 24.50)\nR2 = Restaurant(\"La Tour D'Argent\", \"French\", \"343-3344\", \"Ris de Veau\", 48.50)\nR3 = Restaurant(\"Pascal\", \"French\", \"333-4444\", \"Bouillabaisse\", 32.00)\nR4 = Restaurant(\"Thai Touch\", \"Thai\", \"444-3333\", \"Mee Krob\", 10.95)\nR5 = Restaurant(\"Thai Dishes\", \"Thai\", \"333-4433\", \"Paht Woon Sen\", 8.50)\nR6 = Restaurant(\"Thai Spoon\", \"Thai\", \"334-3344\", \"Mussamun\", 9.00)\n\nRL = [R1, R2, R3, R4, R5, R6]\n\nFrenchRestaurants = [r for r in RL if r.cuisine==\"French\"]\nprint(FrenchRestaurants)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 16 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "namedtuple": [ + "REF", + 1 + ], + "Restaurant": [ + "REF", + 2 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "R3": [ + "REF", + 18 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "call" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "r": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "r": [ + "REF", + 17 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "r": [ + "REF", + 18 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "r": [ + "REF", + 19 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "r": [ + "REF", + 20 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "r": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 23 + ], + "__return__": [ + "REF", + 24 + ], + "r": [ + "REF", + 21 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "r", + "__return__" + ] + } + ], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "23": [ + "INSTANCE", + "list_iterator" + ], + "24": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ] + ] + }, + "line": 15, + "event": "return" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "FrenchRestaurants" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "FrenchRestaurants": [ + "REF", + 24 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "24": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ] + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "namedtuple", + "Restaurant", + "R1", + "R2", + "R3", + "R4", + "R5", + "R6", + "RL", + "FrenchRestaurants" + ], + "stdout": "[Restaurant(name='Taillevent', cuisine='French', phone='343-3434', dish='Escargots', price=24.5), Restaurant(name=\"La Tour D'Argent\", cuisine='French', phone='343-3344', dish='Ris de Veau', price=48.5), Restaurant(name='Pascal', cuisine='French', phone='333-4444', dish='Bouillabaisse', price=32.0)]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "R4": [ + "REF", + 19 + ], + "namedtuple": [ + "REF", + 1 + ], + "R6": [ + "REF", + 21 + ], + "R1": [ + "REF", + 16 + ], + "R2": [ + "REF", + 17 + ], + "Restaurant": [ + "REF", + 2 + ], + "R3": [ + "REF", + 18 + ], + "FrenchRestaurants": [ + "REF", + 24 + ], + "R5": [ + "REF", + 20 + ], + "RL": [ + "REF", + 22 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "namedtuple(typename, field_names, verbose, rename)", + null + ], + "2": [ + "CLASS", + "Restaurant", + [ + "tuple" + ], + [ + "__getnewargs__", + [ + "REF", + 3 + ] + ], + [ + "__new__", + [ + "REF", + 4 + ] + ], + [ + "__repr__", + [ + "REF", + 5 + ] + ], + [ + "__slots__", + [ + "REF", + 6 + ] + ], + [ + "_asdict", + [ + "REF", + 7 + ] + ], + [ + "_fields", + [ + "REF", + 8 + ] + ], + [ + "_make", + [ + "REF", + 9 + ] + ], + [ + "_replace", + [ + "REF", + 10 + ] + ], + [ + "cuisine", + [ + "REF", + 11 + ] + ], + [ + "dish", + [ + "REF", + 12 + ] + ], + [ + "name", + [ + "REF", + 13 + ] + ], + [ + "phone", + [ + "REF", + 14 + ] + ], + [ + "price", + [ + "REF", + 15 + ] + ] + ], + "3": [ + "FUNCTION", + "__getnewargs__(self)", + null + ], + "4": [ + "INSTANCE", + "staticmethod" + ], + "5": [ + "FUNCTION", + "__repr__(self)", + null + ], + "6": [ + "TUPLE" + ], + "7": [ + "FUNCTION", + "_asdict(self)", + null + ], + "8": [ + "TUPLE", + "name", + "cuisine", + "phone", + "dish", + "price" + ], + "9": [ + "INSTANCE", + "classmethod" + ], + "10": [ + "FUNCTION", + "_replace(_self, **kwds)", + null + ], + "11": [ + "INSTANCE", + "property" + ], + "12": [ + "INSTANCE", + "property" + ], + "13": [ + "INSTANCE", + "property" + ], + "14": [ + "INSTANCE", + "property" + ], + "15": [ + "INSTANCE", + "property" + ], + "16": [ + "INSTANCE", + "Restaurant" + ], + "17": [ + "INSTANCE", + "Restaurant" + ], + "18": [ + "INSTANCE", + "Restaurant" + ], + "19": [ + "INSTANCE", + "Restaurant" + ], + "20": [ + "INSTANCE", + "Restaurant" + ], + "21": [ + "INSTANCE", + "Restaurant" + ], + "22": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ], + [ + "REF", + 19 + ], + [ + "REF", + 20 + ], + [ + "REF", + 21 + ] + ], + "24": [ + "LIST", + [ + "REF", + 16 + ], + [ + "REF", + 17 + ], + [ + "REF", + 18 + ] + ] + }, + "line": 16, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/restaurants.txt b/v3/tests/backend-tests/restaurants.txt new file mode 100644 index 000000000..3d7c3b186 --- /dev/null +++ b/v3/tests/backend-tests/restaurants.txt @@ -0,0 +1,16 @@ +# Adapted from an example by David G. Kay +from collections import namedtuple + +Restaurant = namedtuple('Restaurant', 'name cuisine phone dish price') + +R1 = Restaurant("Taillevent", "French", "343-3434", "Escargots", 24.50) +R2 = Restaurant("La Tour D'Argent", "French", "343-3344", "Ris de Veau", 48.50) +R3 = Restaurant("Pascal", "French", "333-4444", "Bouillabaisse", 32.00) +R4 = Restaurant("Thai Touch", "Thai", "444-3333", "Mee Krob", 10.95) +R5 = Restaurant("Thai Dishes", "Thai", "333-4433", "Paht Woon Sen", 8.50) +R6 = Restaurant("Thai Spoon", "Thai", "334-3344", "Mussamun", 9.00) + +RL = [R1, R2, R3, R4, R5, R6] + +FrenchRestaurants = [r for r in RL if r.cuisine=="French"] +print(FrenchRestaurants) diff --git a/v3/tests/backend-tests/runtime_error.golden b/v3/tests/backend-tests/runtime_error.golden new file mode 100644 index 000000000..c26590156 --- /dev/null +++ b/v3/tests/backend-tests/runtime_error.golden @@ -0,0 +1,440 @@ +{ + "code": "x = 5\nfor i in range(10):\n if i == x:\n z = x + y # ERROR!\n else:\n z = i\n print(z)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "exception_msg": "NameError: name 'y' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 4, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/runtime_error.golden_py3 b/v3/tests/backend-tests/runtime_error.golden_py3 new file mode 100644 index 000000000..c26590156 --- /dev/null +++ b/v3/tests/backend-tests/runtime_error.golden_py3 @@ -0,0 +1,440 @@ +{ + "code": "x = 5\nfor i in range(10):\n if i == x:\n z = x + y # ERROR!\n else:\n z = i\n print(z)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 0 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 1 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 2 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 3 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "i", + "z" + ], + "stdout": "0\n1\n2\n3\n4\n", + "exception_msg": "NameError: name 'y' is not defined", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 4 + }, + "heap": {}, + "line": 4, + "event": "exception" + } + ] +} diff --git a/v3/tests/backend-tests/runtime_error.txt b/v3/tests/backend-tests/runtime_error.txt new file mode 100644 index 000000000..d8be5bf4a --- /dev/null +++ b/v3/tests/backend-tests/runtime_error.txt @@ -0,0 +1,8 @@ +x = 5 +for i in range(10): + if i == x: + z = x + y # ERROR! + else: + z = i + print(z) + diff --git a/v3/tests/backend-tests/set_test.golden b/v3/tests/backend-tests/set_test.golden new file mode 100644 index 000000000..bf39a5207 --- /dev/null +++ b/v3/tests/backend-tests/set_test.golden @@ -0,0 +1,151 @@ +{ + "code": "x = set()\nx.add('a')\nx.add('a')\nx.add('b')\nx.add('c')\nx.add('b')\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a", + "b" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a", + "c", + "b" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a", + "c", + "b" + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/set_test.golden_py3 b/v3/tests/backend-tests/set_test.golden_py3 new file mode 100644 index 000000000..bf39a5207 --- /dev/null +++ b/v3/tests/backend-tests/set_test.golden_py3 @@ -0,0 +1,151 @@ +{ + "code": "x = set()\nx.add('a')\nx.add('a')\nx.add('b')\nx.add('c')\nx.add('b')\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a" + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a" + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a", + "b" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a", + "c", + "b" + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "SET", + "a", + "c", + "b" + ] + }, + "line": 6, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/set_test.txt b/v3/tests/backend-tests/set_test.txt new file mode 100644 index 000000000..72ca6fa0a --- /dev/null +++ b/v3/tests/backend-tests/set_test.txt @@ -0,0 +1,7 @@ +x = set() +x.add('a') +x.add('a') +x.add('b') +x.add('c') +x.add('b') + diff --git a/v3/tests/backend-tests/simple.golden b/v3/tests/backend-tests/simple.golden new file mode 100644 index 000000000..c3f69caa6 --- /dev/null +++ b/v3/tests/backend-tests/simple.golden @@ -0,0 +1,501 @@ +{ + "code": "x = 5\ny = 10\nz = x * y\nprint(\"HELLO WORLD\")\nfor i in range(10):\n print(z * i)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "z": 50 + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "HELLO WORLD\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "z": 50 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 8, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 8, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "y": 10, + "z": 50, + "x": 5 + }, + "heap": {}, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/simple.golden_py3 b/v3/tests/backend-tests/simple.golden_py3 new file mode 100644 index 000000000..c3f69caa6 --- /dev/null +++ b/v3/tests/backend-tests/simple.golden_py3 @@ -0,0 +1,501 @@ +{ + "code": "x = 5\ny = 10\nz = x * y\nprint(\"HELLO WORLD\")\nfor i in range(10):\n print(z * i)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5 + }, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5 + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "z": 50 + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z" + ], + "stdout": "HELLO WORLD\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "z": 50 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 0, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 1, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 2, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 3, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 4, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 5, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 6, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 7, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 8, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 8, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "x": 5, + "z": 50, + "y": 10 + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "z", + "i" + ], + "stdout": "HELLO WORLD\n0\n50\n100\n150\n200\n250\n300\n350\n400\n450\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "i": 9, + "y": 10, + "z": 50, + "x": 5 + }, + "heap": {}, + "line": 5, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/simple.txt b/v3/tests/backend-tests/simple.txt new file mode 100644 index 000000000..8b7c08a7d --- /dev/null +++ b/v3/tests/backend-tests/simple.txt @@ -0,0 +1,7 @@ +x = 5 +y = 10 +z = x * y +print("HELLO WORLD") +for i in range(10): + print(z * i) + diff --git a/v3/tests/backend-tests/three_lists.golden b/v3/tests/backend-tests/three_lists.golden new file mode 100644 index 000000000..27775034e --- /dev/null +++ b/v3/tests/backend-tests/three_lists.golden @@ -0,0 +1,632 @@ +{ + "code": "# test case submitted by Peter Wentworth (p.wentworth@ru.ac.za)\n\ndef f(xs):\n print(xs)\n\na = [10, 20, 30]\nb = a\nc = [10, 20, 30]\nd = 24\ne = (a, b, c)\n\nf(b)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "[10, 20, 30]\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "[10, 20, 30]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/three_lists.golden_py3 b/v3/tests/backend-tests/three_lists.golden_py3 new file mode 100644 index 000000000..27775034e --- /dev/null +++ b/v3/tests/backend-tests/three_lists.golden_py3 @@ -0,0 +1,632 @@ +{ + "code": "# test case submitted by Peter Wentworth (p.wentworth@ru.ac.za)\n\ndef f(xs):\n print(xs)\n\na = [10, 20, 30]\nb = a\nc = [10, 20, 30]\nd = 24\ne = (a, b, c)\n\nf(b)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "f" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "b": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 3, + "event": "call" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "xs" + ] + } + ], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "[10, 20, 30]\n", + "func_name": "f", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "xs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "f", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "f_f1", + "ordered_varnames": [ + "xs", + "__return__" + ] + } + ], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 4, + "event": "return" + }, + { + "ordered_globals": [ + "f", + "a", + "b", + "c", + "d", + "e" + ], + "stdout": "[10, 20, 30]\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "a": [ + "REF", + 2 + ], + "c": [ + "REF", + 3 + ], + "b": [ + "REF", + 2 + ], + "e": [ + "REF", + 4 + ], + "d": 24, + "f": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "f(xs)", + null + ], + "2": [ + "LIST", + 10, + 20, + 30 + ], + "3": [ + "LIST", + 10, + 20, + 30 + ], + "4": [ + "TUPLE", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ], + [ + "REF", + 3 + ] + ] + }, + "line": 12, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/three_lists.txt b/v3/tests/backend-tests/three_lists.txt new file mode 100644 index 000000000..388dffc20 --- /dev/null +++ b/v3/tests/backend-tests/three_lists.txt @@ -0,0 +1,13 @@ +# test case submitted by Peter Wentworth (p.wentworth@ru.ac.za) + +def f(xs): + print(xs) + +a = [10, 20, 30] +b = a +c = [10, 20, 30] +d = 24 +e = (a, b, c) + +f(b) + diff --git a/v3/tests/backend-tests/ttt_min.golden b/v3/tests/backend-tests/ttt_min.golden new file mode 100644 index 000000000..0f751840d --- /dev/null +++ b/v3/tests/backend-tests/ttt_min.golden @@ -0,0 +1,722 @@ +{ + "code": "# minimal tic tac toe implementation and test\n\nimport ttt_module\n\ndef interactive_player(board, symbol):\n return int(mouse_input(\"Click on board\"))\n \ng = ttt_module.TTTGame(interactive_player, interactive_player, verbose=True)\nprint(g.play())\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ttt_module": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "module", + "ttt_module" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "ttt_module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player", + "g" + ], + "stdout": "Initializing TTTGame\n", + "func_name": "", + "stack_to_render": [], + "js_output": "$('#htmlOutputDiv table td').click(function(){myVisualizer.executeCodeWithRawInputFunc($(this).attr('id'), myVisualizer.curInstr)})", + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "g": [ + "REF", + 3 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "ttt_module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ], + "3": [ + "INSTANCE", + "TTTGame", + [ + "board", + [ + "REF", + 4 + ] + ], + [ + "lines", + [ + "REF", + 5 + ] + ], + [ + "players", + [ + "REF", + 14 + ] + ], + [ + "symbols", + [ + "REF", + 15 + ] + ], + [ + "tomove", + 0 + ], + [ + "verbose", + true + ], + [ + "winner", + null + ] + ], + "4": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "5": [ + "LIST", + [ + "REF", + 6 + ], + [ + "REF", + 7 + ], + [ + "REF", + 8 + ], + [ + "REF", + 9 + ], + [ + "REF", + 10 + ], + [ + "REF", + 11 + ], + [ + "REF", + 12 + ], + [ + "REF", + 13 + ] + ], + "6": [ + "TUPLE", + 0, + 1, + 2 + ], + "7": [ + "TUPLE", + 3, + 4, + 5 + ], + "8": [ + "TUPLE", + 6, + 7, + 8 + ], + "9": [ + "TUPLE", + 0, + 3, + 6 + ], + "10": [ + "TUPLE", + 1, + 4, + 7 + ], + "11": [ + "TUPLE", + 2, + 5, + 8 + ], + "12": [ + "TUPLE", + 0, + 4, + 8 + ], + "13": [ + "TUPLE", + 2, + 4, + 6 + ], + "14": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ] + ], + "15": [ + "LIST", + "X", + "O" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player", + "g" + ], + "html_output": "
    X to play", + "stdout": "Initializing TTTGame\n
    X to play\n", + "func_name": "interactive_player", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "symbol": "X", + "board": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "interactive_player", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "interactive_player_f1", + "ordered_varnames": [ + "board", + "symbol" + ] + } + ], + "js_output": "$('#htmlOutputDiv table td').click(function(){myVisualizer.executeCodeWithRawInputFunc($(this).attr('id'), myVisualizer.curInstr)})", + "css_output": "#htmlOutputDiv table, #htmlOutputDiv td, #htmlOutputDiv th {\n background-color: white;\n border-collapse: collapse;\n border: 2px solid black; }\n#htmlOutputDiv td, #htmlOutputDiv th {\n width: 30px;\n height: 30px;\n font-family: sans-serif;\n text-align: center; }", + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "g": [ + "REF", + 3 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "ttt_module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ], + "3": [ + "INSTANCE", + "TTTGame", + [ + "board", + [ + "REF", + 4 + ] + ], + [ + "lines", + [ + "REF", + 5 + ] + ], + [ + "players", + [ + "REF", + 14 + ] + ], + [ + "symbols", + [ + "REF", + 15 + ] + ], + [ + "tomove", + 0 + ], + [ + "verbose", + true + ], + [ + "winner", + null + ] + ], + "4": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "5": [ + "LIST", + [ + "REF", + 6 + ], + [ + "REF", + 7 + ], + [ + "REF", + 8 + ], + [ + "REF", + 9 + ], + [ + "REF", + 10 + ], + [ + "REF", + 11 + ], + [ + "REF", + 12 + ], + [ + "REF", + 13 + ] + ], + "6": [ + "TUPLE", + 0, + 1, + 2 + ], + "7": [ + "TUPLE", + 3, + 4, + 5 + ], + "8": [ + "TUPLE", + 6, + 7, + 8 + ], + "9": [ + "TUPLE", + 0, + 3, + 6 + ], + "10": [ + "TUPLE", + 1, + 4, + 7 + ], + "11": [ + "TUPLE", + 2, + 5, + 8 + ], + "12": [ + "TUPLE", + 0, + 4, + 8 + ], + "13": [ + "TUPLE", + 2, + 4, + 6 + ], + "14": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ] + ], + "15": [ + "LIST", + "X", + "O" + ], + "16": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player", + "g" + ], + "html_output": "
    X to play", + "stdout": "Initializing TTTGame\n
    X to play\n", + "func_name": "interactive_player", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "symbol": "X", + "board": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "interactive_player", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "interactive_player_f1", + "ordered_varnames": [ + "board", + "symbol" + ] + } + ], + "js_output": "$('#htmlOutputDiv table td').click(function(){myVisualizer.executeCodeWithRawInputFunc($(this).attr('id'), myVisualizer.curInstr)})", + "css_output": "#htmlOutputDiv table, #htmlOutputDiv td, #htmlOutputDiv th {\n background-color: white;\n border-collapse: collapse;\n border: 2px solid black; }\n#htmlOutputDiv td, #htmlOutputDiv th {\n width: 30px;\n height: 30px;\n font-family: sans-serif;\n text-align: center; }", + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "g": [ + "REF", + 3 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "module", + "ttt_module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ], + "3": [ + "INSTANCE", + "TTTGame", + [ + "board", + [ + "REF", + 4 + ] + ], + [ + "lines", + [ + "REF", + 5 + ] + ], + [ + "players", + [ + "REF", + 14 + ] + ], + [ + "symbols", + [ + "REF", + 15 + ] + ], + [ + "tomove", + 0 + ], + [ + "verbose", + true + ], + [ + "winner", + null + ] + ], + "4": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "5": [ + "LIST", + [ + "REF", + 6 + ], + [ + "REF", + 7 + ], + [ + "REF", + 8 + ], + [ + "REF", + 9 + ], + [ + "REF", + 10 + ], + [ + "REF", + 11 + ], + [ + "REF", + 12 + ], + [ + "REF", + 13 + ] + ], + "6": [ + "TUPLE", + 0, + 1, + 2 + ], + "7": [ + "TUPLE", + 3, + 4, + 5 + ], + "8": [ + "TUPLE", + 6, + 7, + 8 + ], + "9": [ + "TUPLE", + 0, + 3, + 6 + ], + "10": [ + "TUPLE", + 1, + 4, + 7 + ], + "11": [ + "TUPLE", + 2, + 5, + 8 + ], + "12": [ + "TUPLE", + 0, + 4, + 8 + ], + "13": [ + "TUPLE", + 2, + 4, + 6 + ], + "14": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ] + ], + "15": [ + "LIST", + "X", + "O" + ], + "16": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ] + }, + "line": 6, + "event": "step_line" + }, + { + "prompt": "Click on board", + "event": "mouse_input" + } + ] +} diff --git a/v3/tests/backend-tests/ttt_min.golden_py3 b/v3/tests/backend-tests/ttt_min.golden_py3 new file mode 100644 index 000000000..fc7d2d521 --- /dev/null +++ b/v3/tests/backend-tests/ttt_min.golden_py3 @@ -0,0 +1,722 @@ +{ + "code": "# minimal tic tac toe implementation and test\n\nimport ttt_module\n\ndef interactive_player(board, symbol):\n return int(mouse_input(\"Click on board\"))\n \ng = ttt_module.TTTGame(interactive_player, interactive_player, verbose=True)\nprint(g.play())\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ttt_module": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player", + "g" + ], + "stdout": "Initializing TTTGame\n", + "func_name": "", + "stack_to_render": [], + "js_output": "$('#htmlOutputDiv table td').click(function(){myVisualizer.executeCodeWithRawInputFunc($(this).attr('id'), myVisualizer.curInstr)})", + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "g": [ + "REF", + 3 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ], + "3": [ + "INSTANCE", + "TTTGame", + [ + "board", + [ + "REF", + 4 + ] + ], + [ + "lines", + [ + "REF", + 5 + ] + ], + [ + "players", + [ + "REF", + 14 + ] + ], + [ + "symbols", + [ + "REF", + 15 + ] + ], + [ + "tomove", + 0 + ], + [ + "verbose", + true + ], + [ + "winner", + null + ] + ], + "4": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "5": [ + "LIST", + [ + "REF", + 6 + ], + [ + "REF", + 7 + ], + [ + "REF", + 8 + ], + [ + "REF", + 9 + ], + [ + "REF", + 10 + ], + [ + "REF", + 11 + ], + [ + "REF", + 12 + ], + [ + "REF", + 13 + ] + ], + "6": [ + "TUPLE", + 0, + 1, + 2 + ], + "7": [ + "TUPLE", + 3, + 4, + 5 + ], + "8": [ + "TUPLE", + 6, + 7, + 8 + ], + "9": [ + "TUPLE", + 0, + 3, + 6 + ], + "10": [ + "TUPLE", + 1, + 4, + 7 + ], + "11": [ + "TUPLE", + 2, + 5, + 8 + ], + "12": [ + "TUPLE", + 0, + 4, + 8 + ], + "13": [ + "TUPLE", + 2, + 4, + 6 + ], + "14": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ] + ], + "15": [ + "LIST", + "X", + "O" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player", + "g" + ], + "html_output": "
    X to play", + "stdout": "Initializing TTTGame\n
    X to play\n", + "func_name": "interactive_player", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "symbol": "X", + "board": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "interactive_player", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "interactive_player_f1", + "ordered_varnames": [ + "board", + "symbol" + ] + } + ], + "js_output": "$('#htmlOutputDiv table td').click(function(){myVisualizer.executeCodeWithRawInputFunc($(this).attr('id'), myVisualizer.curInstr)})", + "css_output": "#htmlOutputDiv table, #htmlOutputDiv td, #htmlOutputDiv th {\n background-color: white;\n border-collapse: collapse;\n border: 2px solid black; }\n#htmlOutputDiv td, #htmlOutputDiv th {\n width: 30px;\n height: 30px;\n font-family: sans-serif;\n text-align: center; }", + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "g": [ + "REF", + 3 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ], + "3": [ + "INSTANCE", + "TTTGame", + [ + "board", + [ + "REF", + 4 + ] + ], + [ + "lines", + [ + "REF", + 5 + ] + ], + [ + "players", + [ + "REF", + 14 + ] + ], + [ + "symbols", + [ + "REF", + 15 + ] + ], + [ + "tomove", + 0 + ], + [ + "verbose", + true + ], + [ + "winner", + null + ] + ], + "4": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "5": [ + "LIST", + [ + "REF", + 6 + ], + [ + "REF", + 7 + ], + [ + "REF", + 8 + ], + [ + "REF", + 9 + ], + [ + "REF", + 10 + ], + [ + "REF", + 11 + ], + [ + "REF", + 12 + ], + [ + "REF", + 13 + ] + ], + "6": [ + "TUPLE", + 0, + 1, + 2 + ], + "7": [ + "TUPLE", + 3, + 4, + 5 + ], + "8": [ + "TUPLE", + 6, + 7, + 8 + ], + "9": [ + "TUPLE", + 0, + 3, + 6 + ], + "10": [ + "TUPLE", + 1, + 4, + 7 + ], + "11": [ + "TUPLE", + 2, + 5, + 8 + ], + "12": [ + "TUPLE", + 0, + 4, + 8 + ], + "13": [ + "TUPLE", + 2, + 4, + 6 + ], + "14": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ] + ], + "15": [ + "LIST", + "X", + "O" + ], + "16": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "ttt_module", + "interactive_player", + "g" + ], + "html_output": "
    X to play", + "stdout": "Initializing TTTGame\n
    X to play\n", + "func_name": "interactive_player", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "symbol": "X", + "board": [ + "REF", + 16 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "interactive_player", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "interactive_player_f1", + "ordered_varnames": [ + "board", + "symbol" + ] + } + ], + "js_output": "$('#htmlOutputDiv table td').click(function(){myVisualizer.executeCodeWithRawInputFunc($(this).attr('id'), myVisualizer.curInstr)})", + "css_output": "#htmlOutputDiv table, #htmlOutputDiv td, #htmlOutputDiv th {\n background-color: white;\n border-collapse: collapse;\n border: 2px solid black; }\n#htmlOutputDiv td, #htmlOutputDiv th {\n width: 30px;\n height: 30px;\n font-family: sans-serif;\n text-align: center; }", + "globals": { + "ttt_module": [ + "REF", + 1 + ], + "g": [ + "REF", + 3 + ], + "interactive_player": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "INSTANCE", + "module" + ], + "2": [ + "FUNCTION", + "interactive_player(board, symbol)", + null + ], + "3": [ + "INSTANCE", + "TTTGame", + [ + "board", + [ + "REF", + 4 + ] + ], + [ + "lines", + [ + "REF", + 5 + ] + ], + [ + "players", + [ + "REF", + 14 + ] + ], + [ + "symbols", + [ + "REF", + 15 + ] + ], + [ + "tomove", + 0 + ], + [ + "verbose", + true + ], + [ + "winner", + null + ] + ], + "4": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "5": [ + "LIST", + [ + "REF", + 6 + ], + [ + "REF", + 7 + ], + [ + "REF", + 8 + ], + [ + "REF", + 9 + ], + [ + "REF", + 10 + ], + [ + "REF", + 11 + ], + [ + "REF", + 12 + ], + [ + "REF", + 13 + ] + ], + "6": [ + "TUPLE", + 0, + 1, + 2 + ], + "7": [ + "TUPLE", + 3, + 4, + 5 + ], + "8": [ + "TUPLE", + 6, + 7, + 8 + ], + "9": [ + "TUPLE", + 0, + 3, + 6 + ], + "10": [ + "TUPLE", + 1, + 4, + 7 + ], + "11": [ + "TUPLE", + 2, + 5, + 8 + ], + "12": [ + "TUPLE", + 0, + 4, + 8 + ], + "13": [ + "TUPLE", + 2, + 4, + 6 + ], + "14": [ + "LIST", + [ + "REF", + 2 + ], + [ + "REF", + 2 + ] + ], + "15": [ + "LIST", + "X", + "O" + ], + "16": [ + "LIST", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ] + }, + "line": 6, + "event": "step_line" + }, + { + "prompt": "Click on board", + "event": "mouse_input" + } + ] +} diff --git a/v3/tests/backend-tests/ttt_min.txt b/v3/tests/backend-tests/ttt_min.txt new file mode 100644 index 000000000..b52529788 --- /dev/null +++ b/v3/tests/backend-tests/ttt_min.txt @@ -0,0 +1,9 @@ +# minimal tic tac toe implementation and test + +import ttt_module + +def interactive_player(board, symbol): + return int(mouse_input("Click on board")) + +g = ttt_module.TTTGame(interactive_player, interactive_player, verbose=True) +print(g.play()) diff --git a/v3/tests/backend-tests/tuple_test.golden b/v3/tests/backend-tests/tuple_test.golden new file mode 100644 index 000000000..f1c5b4fc3 --- /dev/null +++ b/v3/tests/backend-tests/tuple_test.golden @@ -0,0 +1,72 @@ +{ + "code": "x = (1, 2, 3)\ny = (4,)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2, + 3 + ], + "2": [ + "TUPLE", + 4 + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/tuple_test.golden_py3 b/v3/tests/backend-tests/tuple_test.golden_py3 new file mode 100644 index 000000000..f1c5b4fc3 --- /dev/null +++ b/v3/tests/backend-tests/tuple_test.golden_py3 @@ -0,0 +1,72 @@ +{ + "code": "x = (1, 2, 3)\ny = (4,)\n\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2, + 3 + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": [ + "REF", + 2 + ], + "x": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "TUPLE", + 1, + 2, + 3 + ], + "2": [ + "TUPLE", + 4 + ] + }, + "line": 2, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/tuple_test.txt b/v3/tests/backend-tests/tuple_test.txt new file mode 100644 index 000000000..de68176ca --- /dev/null +++ b/v3/tests/backend-tests/tuple_test.txt @@ -0,0 +1,3 @@ +x = (1, 2, 3) +y = (4,) + diff --git a/v3/tests/backend-tests/two_funcs.golden b/v3/tests/backend-tests/two_funcs.golden new file mode 100644 index 000000000..9a2a15184 --- /dev/null +++ b/v3/tests/backend-tests/two_funcs.golden @@ -0,0 +1,1453 @@ +{ + "code": "def add(a, b, c):\n d = a + b\n return c + d\n\ndef double_add(a, b, c):\n x = add(a, b, c)\n y = add(a, b, c)\n return x + y\n\nx = 5\ny = 10\nz = x * y\nprint(add(x, y, z))\nprint(double_add(x, y, z))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "add" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "add": [ + "REF", + 1 + ], + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5, + "add": [ + "REF", + 1 + ], + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10, + "y": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x", + "y" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "__return__": 130, + "y": 65, + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n130\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 14, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/two_funcs.golden_py3 b/v3/tests/backend-tests/two_funcs.golden_py3 new file mode 100644 index 000000000..9a2a15184 --- /dev/null +++ b/v3/tests/backend-tests/two_funcs.golden_py3 @@ -0,0 +1,1453 @@ +{ + "code": "def add(a, b, c):\n d = a + b\n return c + d\n\ndef double_add(a, b, c):\n x = add(a, b, c)\n y = add(a, b, c)\n return x + y\n\nx = 5\ny = 10\nz = x * y\nprint(add(x, y, z))\nprint(double_add(x, y, z))\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "add" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "add": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ] + }, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "add": [ + "REF", + 1 + ], + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": 5, + "add": [ + "REF", + 1 + ], + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 11, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f1", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 5, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c" + ] + }, + { + "frame_id": 3, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f3", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c", + "d" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10 + }, + "is_highlighted": false, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x" + ] + }, + { + "frame_id": 4, + "encoded_locals": { + "a": 5, + "__return__": 65, + "c": 50, + "b": 10, + "d": 15 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "add_f4", + "ordered_varnames": [ + "a", + "b", + "c", + "d", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 3, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "x": 65, + "c": 50, + "b": 10, + "y": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x", + "y" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n", + "func_name": "double_add", + "stack_to_render": [ + { + "frame_id": 2, + "encoded_locals": { + "a": 5, + "c": 50, + "b": 10, + "__return__": 130, + "y": 65, + "x": 65 + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "double_add", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "double_add_f2", + "ordered_varnames": [ + "a", + "b", + "c", + "x", + "y", + "__return__" + ] + } + ], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 8, + "event": "return" + }, + { + "ordered_globals": [ + "add", + "double_add", + "x", + "y", + "z" + ], + "stdout": "65\n130\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": 10, + "x": 5, + "add": [ + "REF", + 1 + ], + "z": 50, + "double_add": [ + "REF", + 2 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "add(a, b, c)", + null + ], + "2": [ + "FUNCTION", + "double_add(a, b, c)", + null + ] + }, + "line": 14, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/two_funcs.txt b/v3/tests/backend-tests/two_funcs.txt new file mode 100644 index 000000000..32959fbd6 --- /dev/null +++ b/v3/tests/backend-tests/two_funcs.txt @@ -0,0 +1,14 @@ +def add(a, b, c): + d = a + b + return c + d + +def double_add(a, b, c): + x = add(a, b, c) + y = add(a, b, c) + return x + y + +x = 5 +y = 10 +z = x * y +print(add(x, y, z)) +print(double_add(x, y, z)) diff --git a/v3/tests/backend-tests/unicode-py2-ultimate.golden b/v3/tests/backend-tests/unicode-py2-ultimate.golden new file mode 100644 index 000000000..5dcd837e5 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py2-ultimate.golden @@ -0,0 +1,1925 @@ +{ + "code": "# The ultimate Unicode test for Python 2\n\nx = '\u263a' # this is a REGULAR str with some funky bytes, NOT a smiley\ny = u'\u263a' # this is a unicode string U+263A representing a smiley\nprint x\nprint y\nassert x != y\n\nx_lst = [x]\nx_lst *= 3\n\nz = '\\x8e' # this string isn't valid unicode\nprint z\n\nprint x, y, z\n\nxyz_lst = [x, y, z]\nxyz_lst *= 3\ntypes_lst = [repr(type(e)) for e in xyz_lst]\nprint xyz_lst\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": "\u263a" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x": "\u263a" + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x": "\u263a" + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x": "\u263a" + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "__warningregistry__": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x_lst": [ + "REF", + 6 + ], + "__warningregistry__": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x_lst": [ + "REF", + 6 + ], + "__warningregistry__": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x_lst": [ + "REF", + 6 + ], + "z": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 13, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x_lst": [ + "REF", + 6 + ], + "z": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "y": "\u00e2\u0098\u00ba", + "x_lst": [ + "REF", + 6 + ], + "z": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 18, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\u263a", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\u00e2\u0098\u00ba", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\u263a", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\u00e2\u0098\u00ba", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\u263a", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\u00e2\u0098\u00ba", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd" + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ] + }, + "line": 19, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e", + "types_lst" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd", + "types_lst": [ + "REF", + 8 + ] + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ], + "8": [ + "LIST", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 20, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "y", + "__warningregistry__", + "x_lst", + "z", + "xyz_lst", + "e", + "types_lst" + ], + "stdout": "\u263a\n\u00e2\u0098\u00ba\n\ufffd\n\u263a \u00e2\u0098\u00ba \ufffd\n['\\xe2\\x98\\xba', u'\\xe2\\x98\\xba', '\\x8e', '\\xe2\\x98\\xba', u'\\xe2\\x98\\xba', '\\x8e', '\\xe2\\x98\\xba', u'\\xe2\\x98\\xba', '\\x8e']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "__warningregistry__": [ + "REF", + 1 + ], + "x_lst": [ + "REF", + 6 + ], + "xyz_lst": [ + "REF", + 7 + ], + "y": "\u00e2\u0098\u00ba", + "x": "\u263a", + "z": "\ufffd", + "types_lst": [ + "REF", + 8 + ] + }, + "heap": { + "1": [ + "DICT", + [ + [ + "REF", + 2 + ], + true + ] + ], + "2": [ + "TUPLE", + "Unicode unequal comparison failed to convert both arguments to Unicode - interpreting them as being unequal", + [ + "REF", + 3 + ], + 7 + ], + "3": [ + "CLASS", + "UnicodeWarning", + [ + "Warning" + ], + [ + "__init__", + [ + "REF", + 4 + ] + ], + [ + "__new__", + [ + "REF", + 5 + ] + ] + ], + "4": [ + "wrapper_descriptor", + "" + ], + "5": [ + "FUNCTION", + "__new__(...)", + null + ], + "6": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "7": [ + "LIST", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd", + "\u263a", + "\u00e2\u0098\u00ba", + "\ufffd" + ], + "8": [ + "LIST", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 20, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py2-ultimate.golden_py3 b/v3/tests/backend-tests/unicode-py2-ultimate.golden_py3 new file mode 100644 index 000000000..c11f5ba9f --- /dev/null +++ b/v3/tests/backend-tests/unicode-py2-ultimate.golden_py3 @@ -0,0 +1,11 @@ +{ + "code": "# The ultimate Unicode test for Python 2\n\nx = '\u263a' # this is a REGULAR str with some funky bytes, NOT a smiley\ny = u'\u263a' # this is a unicode string U+263A representing a smiley\nprint x\nprint y\nassert x != y\n\nx_lst = [x]\nx_lst *= 3\n\nz = '\\x8e' # this string isn't valid unicode\nprint z\n\nprint x, y, z\n\nxyz_lst = [x, y, z]\nxyz_lst *= 3\ntypes_lst = [repr(type(e)) for e in xyz_lst]\nprint xyz_lst\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 4)", + "line": 4, + "event": "uncaught_exception", + "offset": 10 + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py2-ultimate.txt b/v3/tests/backend-tests/unicode-py2-ultimate.txt new file mode 100644 index 000000000..dba4df33f --- /dev/null +++ b/v3/tests/backend-tests/unicode-py2-ultimate.txt @@ -0,0 +1,20 @@ +# The ultimate Unicode test for Python 2 + +x = '☺' # this is a REGULAR str with some funky bytes, NOT a smiley +y = u'☺' # this is a unicode string U+263A representing a smiley +print x +print y +assert x != y + +x_lst = [x] +x_lst *= 3 + +z = '\x8e' # this string isn't valid unicode +print z + +print x, y, z + +xyz_lst = [x, y, z] +xyz_lst *= 3 +types_lst = [repr(type(e)) for e in xyz_lst] +print xyz_lst diff --git a/v3/tests/backend-tests/unicode-py2.golden b/v3/tests/backend-tests/unicode-py2.golden new file mode 100644 index 000000000..fe9905ab0 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py2.golden @@ -0,0 +1,163 @@ +{ + "code": "# for Python 2 only\nyinyang = u'\\u262F'\nsmiley = '''\u263a'''\nfrownie = u'\\u2639'\nheart = r'\u2661'\n\nlst = [smiley, frownie]\nlst2 = lst * 5\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "smiley": "\u263a" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "frownie": "\u2639", + "smiley": "\u263a" + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "heart": "\u2661", + "smiley": "\u263a", + "frownie": "\u2639" + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart", + "lst" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "heart": "\u2661", + "lst": [ + "REF", + 1 + ], + "smiley": "\u263a", + "frownie": "\u2639" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u2639" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart", + "lst", + "lst2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "heart": "\u2661", + "lst2": [ + "REF", + 2 + ], + "smiley": "\u263a", + "lst": [ + "REF", + 1 + ], + "yinyang": "\u262f", + "frownie": "\u2639" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u2639" + ], + "2": [ + "LIST", + "\u263a", + "\u2639", + "\u263a", + "\u2639", + "\u263a", + "\u2639", + "\u263a", + "\u2639", + "\u263a", + "\u2639" + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py2.golden_py3 b/v3/tests/backend-tests/unicode-py2.golden_py3 new file mode 100644 index 000000000..98ab39693 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py2.golden_py3 @@ -0,0 +1,11 @@ +{ + "code": "# for Python 2 only\nyinyang = u'\\u262F'\nsmiley = '''\u263a'''\nfrownie = u'\\u2639'\nheart = r'\u2661'\n\nlst = [smiley, frownie]\nlst2 = lst * 5\n", + "trace": [ + { + "exception_msg": "SyntaxError: invalid syntax (, line 2)", + "line": 2, + "event": "uncaught_exception", + "offset": 19 + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py2.txt b/v3/tests/backend-tests/unicode-py2.txt new file mode 100644 index 000000000..e1ed0bbb5 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py2.txt @@ -0,0 +1,8 @@ +# for Python 2 only +yinyang = u'\u262F' +smiley = '''☺''' +frownie = u'\u2639' +heart = r'♡' + +lst = [smiley, frownie] +lst2 = lst * 5 diff --git a/v3/tests/backend-tests/unicode-py3-ultimate.golden b/v3/tests/backend-tests/unicode-py3-ultimate.golden new file mode 100644 index 000000000..2847f4979 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py3-ultimate.golden @@ -0,0 +1,637 @@ +{ + "code": "# The ultimate Unicode test for Python 3\n\nx = '\u263a' # this is a unicode string U+263A representing a smiley\nprint(x)\n\nx_lst = [x]\nx_lst *= 3\n\nz = '\\x8e'\nprint(z)\n\nprint(x + ' ' + z)\n\nxz_lst = [x, z]\nxz_lst *= 3\ntypes_lst = [repr(type(e)) for e in xz_lst]\nprint(xz_lst)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": "\u263a" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": "\u263a" + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z" + ], + "stdout": "\u263a\n\ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "e": "\u263a", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "e": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "e": "\u263a", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "e": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "e": "\u263a", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\ufffd", + "e": "\ufffd", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e", + "types_lst" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "x_lst": [ + "REF", + 1 + ], + "xz_lst": [ + "REF", + 2 + ], + "x": "\u263a", + "z": "\ufffd", + "types_lst": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ], + "3": [ + "LIST", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "e", + "types_lst" + ], + "stdout": "\u263a\n\ufffd\n\u263a \ufffd\n['\\xe2\\x98\\xba', '\\x8e', '\\xe2\\x98\\xba', '\\x8e', '\\xe2\\x98\\xba', '\\x8e']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "e": "\ufffd", + "x_lst": [ + "REF", + 1 + ], + "xz_lst": [ + "REF", + 2 + ], + "x": "\u263a", + "z": "\ufffd", + "types_lst": [ + "REF", + 3 + ] + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd", + "\u263a", + "\ufffd" + ], + "3": [ + "LIST", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 17, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py3-ultimate.golden_py3 b/v3/tests/backend-tests/unicode-py3-ultimate.golden_py3 new file mode 100644 index 000000000..13736dd43 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py3-ultimate.golden_py3 @@ -0,0 +1,982 @@ +{ + "code": "# The ultimate Unicode test for Python 3\n\nx = '\u263a' # this is a unicode string U+263A representing a smiley\nprint(x)\n\nx_lst = [x]\nx_lst *= 3\n\nz = '\\x8e'\nprint(z)\n\nprint(x + ' ' + z)\n\nxz_lst = [x, z]\nxz_lst *= 3\ntypes_lst = [repr(type(e)) for e in xz_lst]\nprint(xz_lst)\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": "\u263a" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "x" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x": "\u263a" + }, + "heap": {}, + "line": 6, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a" + ] + }, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 9, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z" + ], + "stdout": "\u263a\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 10, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z" + ], + "stdout": "\u263a\n\u008e\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 12, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ] + }, + "line": 14, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e" + ] + }, + "line": 15, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "call" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": "\u263a" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": "\u008e" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": "\u263a" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": "\u008e" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": "\u263a" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "e": "\u008e" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ] + }, + "line": 16, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + ".0": [ + "REF", + 3 + ], + "__return__": [ + "REF", + 4 + ], + "e": "\u008e" + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "_f1", + "ordered_varnames": [ + ".0", + "e", + "__return__" + ] + } + ], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "3": [ + "INSTANCE", + "list_iterator" + ], + "4": [ + "LIST", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 16, + "event": "return" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "types_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "types_lst": [ + "REF", + 4 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "4": [ + "LIST", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 17, + "event": "step_line" + }, + { + "ordered_globals": [ + "x", + "x_lst", + "z", + "xz_lst", + "types_lst" + ], + "stdout": "\u263a\n\u008e\n\u263a \u008e\n['\u263a', '\\x8e', '\u263a', '\\x8e', '\u263a', '\\x8e']\n", + "func_name": "", + "stack_to_render": [], + "globals": { + "xz_lst": [ + "REF", + 2 + ], + "x_lst": [ + "REF", + 1 + ], + "z": "\u008e", + "types_lst": [ + "REF", + 4 + ], + "x": "\u263a" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u263a", + "\u263a" + ], + "2": [ + "LIST", + "\u263a", + "\u008e", + "\u263a", + "\u008e", + "\u263a", + "\u008e" + ], + "4": [ + "LIST", + "", + "", + "", + "", + "", + "" + ] + }, + "line": 17, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py3-ultimate.txt b/v3/tests/backend-tests/unicode-py3-ultimate.txt new file mode 100644 index 000000000..fc8545566 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py3-ultimate.txt @@ -0,0 +1,17 @@ +# The ultimate Unicode test for Python 3 + +x = '☺' # this is a unicode string U+263A representing a smiley +print(x) + +x_lst = [x] +x_lst *= 3 + +z = '\x8e' +print(z) + +print(x + ' ' + z) + +xz_lst = [x, z] +xz_lst *= 3 +types_lst = [repr(type(e)) for e in xz_lst] +print(xz_lst) diff --git a/v3/tests/backend-tests/unicode-py3.golden b/v3/tests/backend-tests/unicode-py3.golden new file mode 100644 index 000000000..809d111c2 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py3.golden @@ -0,0 +1,163 @@ +{ + "code": "# for Python 3 only\nyinyang = '\\u262F'\nsmiley = '''\u263a'''\nfrownie = '\\u2639'\nheart = r'\u2661'\n\nlst = [smiley, frownie]\nlst2 = lst * 5\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\\u262F" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\\u262F", + "smiley": "\u263a" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\\u262F", + "frownie": "\\u2639", + "smiley": "\u263a" + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\\u262F", + "heart": "\u2661", + "smiley": "\u263a", + "frownie": "\\u2639" + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart", + "lst" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\\u262F", + "heart": "\u2661", + "lst": [ + "REF", + 1 + ], + "smiley": "\u263a", + "frownie": "\\u2639" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\\u2639" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart", + "lst", + "lst2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "heart": "\u2661", + "lst2": [ + "REF", + 2 + ], + "smiley": "\u263a", + "lst": [ + "REF", + 1 + ], + "yinyang": "\\u262F", + "frownie": "\\u2639" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\\u2639" + ], + "2": [ + "LIST", + "\u263a", + "\\u2639", + "\u263a", + "\\u2639", + "\u263a", + "\\u2639", + "\u263a", + "\\u2639", + "\u263a", + "\\u2639" + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py3.golden_py3 b/v3/tests/backend-tests/unicode-py3.golden_py3 new file mode 100644 index 000000000..8fe2d4c13 --- /dev/null +++ b/v3/tests/backend-tests/unicode-py3.golden_py3 @@ -0,0 +1,163 @@ +{ + "code": "# for Python 3 only\nyinyang = '\\u262F'\nsmiley = '''\u263a'''\nfrownie = '\\u2639'\nheart = r'\u2661'\n\nlst = [smiley, frownie]\nlst2 = lst * 5\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f" + }, + "heap": {}, + "line": 3, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "smiley": "\u263a" + }, + "heap": {}, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "frownie": "\u2639", + "smiley": "\u263a" + }, + "heap": {}, + "line": 5, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "heart": "\u2661", + "smiley": "\u263a", + "frownie": "\u2639" + }, + "heap": {}, + "line": 7, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart", + "lst" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "yinyang": "\u262f", + "heart": "\u2661", + "lst": [ + "REF", + 1 + ], + "smiley": "\u263a", + "frownie": "\u2639" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u2639" + ] + }, + "line": 8, + "event": "step_line" + }, + { + "ordered_globals": [ + "yinyang", + "smiley", + "frownie", + "heart", + "lst", + "lst2" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "heart": "\u2661", + "lst2": [ + "REF", + 2 + ], + "smiley": "\u263a", + "lst": [ + "REF", + 1 + ], + "yinyang": "\u262f", + "frownie": "\u2639" + }, + "heap": { + "1": [ + "LIST", + "\u263a", + "\u2639" + ], + "2": [ + "LIST", + "\u263a", + "\u2639", + "\u263a", + "\u2639", + "\u263a", + "\u2639", + "\u263a", + "\u2639", + "\u263a", + "\u2639" + ] + }, + "line": 8, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/unicode-py3.txt b/v3/tests/backend-tests/unicode-py3.txt new file mode 100644 index 000000000..3ab168d8f --- /dev/null +++ b/v3/tests/backend-tests/unicode-py3.txt @@ -0,0 +1,8 @@ +# for Python 3 only +yinyang = '\u262F' +smiley = '''☺''' +frownie = '\u2639' +heart = r'♡' + +lst = [smiley, frownie] +lst2 = lst * 5 diff --git a/v3/tests/backend-tests/varargs.golden b/v3/tests/backend-tests/varargs.golden new file mode 100644 index 000000000..64cd90d22 --- /dev/null +++ b/v3/tests/backend-tests/varargs.golden @@ -0,0 +1,267 @@ +{ + "code": "def parrot(mandatory, mandatory2, *args, **kwargs):\n pass\n\nparrot('a', 'b', 'c', 'd', 'e', name='Philip', age='35')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "parrot", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "args": [ + "REF", + 3 + ], + "mandatory": "a", + "mandatory2": "b", + "kwargs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "parrot", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "parrot_f1", + "ordered_varnames": [ + "mandatory", + "mandatory2", + "args", + "kwargs" + ] + } + ], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ], + "2": [ + "DICT", + [ + "age", + "35" + ], + [ + "name", + "Philip" + ] + ], + "3": [ + "TUPLE", + "c", + "d", + "e" + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "parrot", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "args": [ + "REF", + 3 + ], + "mandatory": "a", + "mandatory2": "b", + "kwargs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "parrot", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "parrot_f1", + "ordered_varnames": [ + "mandatory", + "mandatory2", + "args", + "kwargs" + ] + } + ], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ], + "2": [ + "DICT", + [ + "age", + "35" + ], + [ + "name", + "Philip" + ] + ], + "3": [ + "TUPLE", + "c", + "d", + "e" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "parrot", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "args": [ + "REF", + 3 + ], + "mandatory": "a", + "mandatory2": "b", + "kwargs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "parrot", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "parrot_f1", + "ordered_varnames": [ + "mandatory", + "mandatory2", + "args", + "kwargs", + "__return__" + ] + } + ], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ], + "2": [ + "DICT", + [ + "age", + "35" + ], + [ + "name", + "Philip" + ] + ], + "3": [ + "TUPLE", + "c", + "d", + "e" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/varargs.golden_py3 b/v3/tests/backend-tests/varargs.golden_py3 new file mode 100644 index 000000000..64cd90d22 --- /dev/null +++ b/v3/tests/backend-tests/varargs.golden_py3 @@ -0,0 +1,267 @@ +{ + "code": "def parrot(mandatory, mandatory2, *args, **kwargs):\n pass\n\nparrot('a', 'b', 'c', 'd', 'e', name='Philip', age='35')\n", + "trace": [ + { + "ordered_globals": [], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": {}, + "heap": {}, + "line": 1, + "event": "step_line" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ] + }, + "line": 4, + "event": "step_line" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "parrot", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "args": [ + "REF", + 3 + ], + "mandatory": "a", + "mandatory2": "b", + "kwargs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "parrot", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "parrot_f1", + "ordered_varnames": [ + "mandatory", + "mandatory2", + "args", + "kwargs" + ] + } + ], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ], + "2": [ + "DICT", + [ + "age", + "35" + ], + [ + "name", + "Philip" + ] + ], + "3": [ + "TUPLE", + "c", + "d", + "e" + ] + }, + "line": 1, + "event": "call" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "parrot", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "args": [ + "REF", + 3 + ], + "mandatory": "a", + "mandatory2": "b", + "kwargs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "parrot", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "parrot_f1", + "ordered_varnames": [ + "mandatory", + "mandatory2", + "args", + "kwargs" + ] + } + ], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ], + "2": [ + "DICT", + [ + "age", + "35" + ], + [ + "name", + "Philip" + ] + ], + "3": [ + "TUPLE", + "c", + "d", + "e" + ] + }, + "line": 2, + "event": "step_line" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "parrot", + "stack_to_render": [ + { + "frame_id": 1, + "encoded_locals": { + "__return__": null, + "args": [ + "REF", + 3 + ], + "mandatory": "a", + "mandatory2": "b", + "kwargs": [ + "REF", + 2 + ] + }, + "is_highlighted": true, + "is_parent": false, + "func_name": "parrot", + "is_zombie": false, + "parent_frame_id_list": [], + "unique_hash": "parrot_f1", + "ordered_varnames": [ + "mandatory", + "mandatory2", + "args", + "kwargs", + "__return__" + ] + } + ], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ], + "2": [ + "DICT", + [ + "age", + "35" + ], + [ + "name", + "Philip" + ] + ], + "3": [ + "TUPLE", + "c", + "d", + "e" + ] + }, + "line": 2, + "event": "return" + }, + { + "ordered_globals": [ + "parrot" + ], + "stdout": "", + "func_name": "", + "stack_to_render": [], + "globals": { + "parrot": [ + "REF", + 1 + ] + }, + "heap": { + "1": [ + "FUNCTION", + "parrot(mandatory, mandatory2, *args, **kwargs)", + null + ] + }, + "line": 4, + "event": "return" + } + ] +} diff --git a/v3/tests/backend-tests/varargs.txt b/v3/tests/backend-tests/varargs.txt new file mode 100644 index 000000000..6e26086ea --- /dev/null +++ b/v3/tests/backend-tests/varargs.txt @@ -0,0 +1,4 @@ +def parrot(mandatory, mandatory2, *args, **kwargs): + pass + +parrot('a', 'b', 'c', 'd', 'e', name='Philip', age='35') diff --git a/v3/tests/diff_py23_golden_files.py b/v3/tests/diff_py23_golden_files.py new file mode 100644 index 000000000..904cb6d04 --- /dev/null +++ b/v3/tests/diff_py23_golden_files.py @@ -0,0 +1,7 @@ +import os, itertools, subprocess + +for (dn, sd, files) in itertools.chain(os.walk('backend-tests/'), os.walk('../example-code/')): + for f in files: + bn, ext = os.path.splitext(f) + if ext == '.golden': + subprocess.call(['diff', '-u', os.path.join(dn, bn + ext), os.path.join(dn, bn + '.golden_py3')]) diff --git a/v3/tests/frontend-tests/basic-data-structures.py b/v3/tests/frontend-tests/basic-data-structures.py new file mode 100644 index 000000000..0204e2c8d --- /dev/null +++ b/v3/tests/frontend-tests/basic-data-structures.py @@ -0,0 +1,24 @@ +# numbers! +age = 26 +pi = 3.14159 + +# strings! +s = 'Rutherford Birchard Hayes' +tokens = s.split() + +# list (mutable sequence) +beatles = ['John', 'Paul', 'George'] + +# tuple (immutable sequence) +ages = (18, 21, 28, 21, 22) + +# set (no order, no duplicates) +uniqueAges = set() # empty set +uniqueAges = set(ages) +uniqueAges.remove(21) + +# dict - mapping unique keys to values +netWorth = {} +netWorth['Donald Trump'] = 3000000000 +netWorth['Bill Gates'] = 58000000000 +netWorth['Joe Postdoc'] = 20000 diff --git a/v3/tests/frontend-tests/binary-tree.py b/v3/tests/frontend-tests/binary-tree.py new file mode 100644 index 000000000..0ff9409e7 --- /dev/null +++ b/v3/tests/frontend-tests/binary-tree.py @@ -0,0 +1 @@ +t = [[['a', 'b'], ['c', 'd']], [[1,2], [3,4]]] diff --git a/v3/tests/frontend-tests/circular.py b/v3/tests/frontend-tests/circular.py new file mode 100644 index 000000000..d6d690f6c --- /dev/null +++ b/v3/tests/frontend-tests/circular.py @@ -0,0 +1,9 @@ +x = [1,2] +y = [1,2] +z = [1,2] +w = [1,2] + +x[1] = y +y[1] = z +z[1] = w +w[1] = x diff --git a/v3/tests/frontend-tests/criss-cross.py b/v3/tests/frontend-tests/criss-cross.py new file mode 100644 index 000000000..5018ecdd4 --- /dev/null +++ b/v3/tests/frontend-tests/criss-cross.py @@ -0,0 +1,3 @@ +x = [1,2] +y = [3,x] +x[1] = y diff --git a/v3/tests/frontend-tests/double-nudge.py b/v3/tests/frontend-tests/double-nudge.py new file mode 100644 index 000000000..b6e55f773 --- /dev/null +++ b/v3/tests/frontend-tests/double-nudge.py @@ -0,0 +1,6 @@ +x = [1, [2, None]] +y = [1, 2] +z = [1, 2] + +x[1][0] = y # should nudge y to over the right +z[1] = x # should nudge BOTH x and y over to the right diff --git a/v3/tests/frontend-tests/failed-tests/README b/v3/tests/frontend-tests/failed-tests/README new file mode 100644 index 000000000..beb455229 --- /dev/null +++ b/v3/tests/frontend-tests/failed-tests/README @@ -0,0 +1,2 @@ +this directory is where the .png files of failed frontend tests get +stored by ../opt_frontend_golden_test.py diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.10.png new file mode 100644 index 000000000..ce7b15aa4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.11.png new file mode 100644 index 000000000..cfeccf35b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.12.png new file mode 100644 index 000000000..658fb0759 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.13.png new file mode 100644 index 000000000..84d344063 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.14.png new file mode 100644 index 000000000..dd312d000 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.15.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.15.png new file mode 100644 index 000000000..1084042bf Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.16.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.16.png new file mode 100644 index 000000000..966c5107d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.17.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.17.png new file mode 100644 index 000000000..0d3fa49ea Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.18.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.18.png new file mode 100644 index 000000000..0d3fa49ea Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.19.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.19.png new file mode 100644 index 000000000..0615ab4a3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.2.png new file mode 100644 index 000000000..dc74115b1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.20.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.20.png new file mode 100644 index 000000000..620bc3fb7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.21.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.21.png new file mode 100644 index 000000000..620bc3fb7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.22.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.22.png new file mode 100644 index 000000000..9213cb664 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.23.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.23.png new file mode 100644 index 000000000..0e13a6af9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.24.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.24.png new file mode 100644 index 000000000..fc3d4d963 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.25.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.25.png new file mode 100644 index 000000000..d096295ae Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.26.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.26.png new file mode 100644 index 000000000..d096295ae Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.27.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.27.png new file mode 100644 index 000000000..71a4d81b1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.28.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.28.png new file mode 100644 index 000000000..b45be68d3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.29.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.29.png new file mode 100644 index 000000000..b45be68d3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.29.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.3.png new file mode 100644 index 000000000..a2b252cb9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.30.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.30.png new file mode 100644 index 000000000..363a06672 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.30.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.31.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.31.png new file mode 100644 index 000000000..7f79a3391 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.31.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.32.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.32.png new file mode 100644 index 000000000..685a29876 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.32.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.4.png new file mode 100644 index 000000000..8138e2e54 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.5.png new file mode 100644 index 000000000..156d5f9d4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.6.png new file mode 100644 index 000000000..252bbeedb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.7.png new file mode 100644 index 000000000..3fafddfd8 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.8.png new file mode 100644 index 000000000..c50cc7539 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.9.png new file mode 100644 index 000000000..5efd3b273 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.2.png new file mode 100644 index 000000000..074316b20 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.3.png new file mode 100644 index 000000000..00d454fd1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.4.png new file mode 100644 index 000000000..eb2615528 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.5.png new file mode 100644 index 000000000..b839e00d2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/aliasing8.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.10.png new file mode 100644 index 000000000..0860e0e54 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.11.png new file mode 100644 index 000000000..4432f75d1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.12.png new file mode 100644 index 000000000..a16c2c272 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.13.png new file mode 100644 index 000000000..436e93756 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.14.png new file mode 100644 index 000000000..b73245799 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.2.png new file mode 100644 index 000000000..953aa911b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.3.png new file mode 100644 index 000000000..a4b690746 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.4.png new file mode 100644 index 000000000..baf937bbd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.5.png new file mode 100644 index 000000000..328b2b666 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.6.png new file mode 100644 index 000000000..a0d5f0a5b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.7.png new file mode 100644 index 000000000..6f1b9058a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.8.png new file mode 100644 index 000000000..d32ba7cb5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.9.png new file mode 100644 index 000000000..901ac8fa4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/basic-data-structures.py.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/binary-tree.py.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/binary-tree.py.step.2.png new file mode 100644 index 000000000..a9dfdbf17 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/binary-tree.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.2.png new file mode 100644 index 000000000..f44a64597 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.3.png new file mode 100644 index 000000000..1c050074d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.4.png new file mode 100644 index 000000000..a735cc7bf Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.5.png new file mode 100644 index 000000000..003d68ed0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.6.png new file mode 100644 index 000000000..9f7abd2ff Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.7.png new file mode 100644 index 000000000..aef2497d9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.8.png new file mode 100644 index 000000000..8641ccaca Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.9.png new file mode 100644 index 000000000..56cca856b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/circular.py.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.10.png new file mode 100644 index 000000000..20c6647c7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.11.png new file mode 100644 index 000000000..205f12a26 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.12.png new file mode 100644 index 000000000..ab32457b1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.13.png new file mode 100644 index 000000000..3f9838268 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.14.png new file mode 100644 index 000000000..3f9838268 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.15.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.15.png new file mode 100644 index 000000000..1b730e3a5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.16.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.16.png new file mode 100644 index 000000000..0f8ef4528 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.2.png new file mode 100644 index 000000000..122cfe307 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.3.png new file mode 100644 index 000000000..cd0f28720 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.4.png new file mode 100644 index 000000000..acfcb4aaa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.5.png new file mode 100644 index 000000000..acfcb4aaa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.6.png new file mode 100644 index 000000000..5265b6757 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.7.png new file mode 100644 index 000000000..14310f98f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.8.png new file mode 100644 index 000000000..14310f98f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.9.png new file mode 100644 index 000000000..8087a38ce Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/closure3.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.2.png new file mode 100644 index 000000000..d602755c6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.3.png new file mode 100644 index 000000000..ac6f38a8b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.4.png new file mode 100644 index 000000000..6c8991230 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/criss-cross.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.2.png new file mode 100644 index 000000000..12825e858 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.3.png new file mode 100644 index 000000000..67cb9e591 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.4.png new file mode 100644 index 000000000..2033d90bc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.5.png new file mode 100644 index 000000000..ef333bd95 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.6.png new file mode 100644 index 000000000..de579a8d5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/double-nudge.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.10.png new file mode 100644 index 000000000..d8fac5146 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.11.png new file mode 100644 index 000000000..d8fac5146 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.12.png new file mode 100644 index 000000000..bf2c60d9a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.13.png new file mode 100644 index 000000000..bf2c60d9a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.14.png new file mode 100644 index 000000000..bf2c60d9a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.15.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.15.png new file mode 100644 index 000000000..e2d63ba47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.16.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.16.png new file mode 100644 index 000000000..e2d63ba47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.17.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.17.png new file mode 100644 index 000000000..e2d63ba47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.18.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.18.png new file mode 100644 index 000000000..e9ccceb34 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.19.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.19.png new file mode 100644 index 000000000..e9ccceb34 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.2.png new file mode 100644 index 000000000..162420b98 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.20.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.20.png new file mode 100644 index 000000000..e9ccceb34 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.21.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.21.png new file mode 100644 index 000000000..bd2837bdd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.22.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.22.png new file mode 100644 index 000000000..54db2756a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.23.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.23.png new file mode 100644 index 000000000..63dc72f60 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.24.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.24.png new file mode 100644 index 000000000..732070acc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.25.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.25.png new file mode 100644 index 000000000..82bb19e51 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.26.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.26.png new file mode 100644 index 000000000..099aecc9c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.27.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.27.png new file mode 100644 index 000000000..05ccfce99 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.3.png new file mode 100644 index 000000000..b44e8266f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.4.png new file mode 100644 index 000000000..b44e8266f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.5.png new file mode 100644 index 000000000..b44e8266f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.6.png new file mode 100644 index 000000000..ee40735b9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.7.png new file mode 100644 index 000000000..ee40735b9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.8.png new file mode 100644 index 000000000..ee40735b9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.9.png new file mode 100644 index 000000000..d8fac5146 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/fact.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.10.png new file mode 100644 index 000000000..740491b2a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.11.png new file mode 100644 index 000000000..740491b2a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.12.png new file mode 100644 index 000000000..740491b2a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.13.png new file mode 100644 index 000000000..82ea7a79e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.14.png new file mode 100644 index 000000000..82ea7a79e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.15.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.15.png new file mode 100644 index 000000000..7c10fcc9f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.16.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.16.png new file mode 100644 index 000000000..a2ddf242d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.17.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.17.png new file mode 100644 index 000000000..a2ddf242d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.18.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.18.png new file mode 100644 index 000000000..7f82c53fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.19.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.19.png new file mode 100644 index 000000000..7f82c53fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.2.png new file mode 100644 index 000000000..2f1269ce6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.20.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.20.png new file mode 100644 index 000000000..7f82c53fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.3.png new file mode 100644 index 000000000..b81c64cd6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.4.png new file mode 100644 index 000000000..072757d06 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.5.png new file mode 100644 index 000000000..072757d06 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.6.png new file mode 100644 index 000000000..d161f4329 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.7.png new file mode 100644 index 000000000..05441f73b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.8.png new file mode 100644 index 000000000..05441f73b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.9.png new file mode 100644 index 000000000..05441f73b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/filter.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.10.png new file mode 100644 index 000000000..ac1e25774 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.11.png new file mode 100644 index 000000000..b5d615143 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.12.png new file mode 100644 index 000000000..359cef590 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.13.png new file mode 100644 index 000000000..1b5503dfa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.14.png new file mode 100644 index 000000000..d01c82f3d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.15.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.15.png new file mode 100644 index 000000000..d01c82f3d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.16.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.16.png new file mode 100644 index 000000000..90966c779 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.17.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.17.png new file mode 100644 index 000000000..7f484f896 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.18.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.18.png new file mode 100644 index 000000000..bdfe631f2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.19.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.19.png new file mode 100644 index 000000000..39a413cf6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.2.png new file mode 100644 index 000000000..714e375da Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.20.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.20.png new file mode 100644 index 000000000..e509ca0d6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.21.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.21.png new file mode 100644 index 000000000..f2df9ceb6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.22.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.22.png new file mode 100644 index 000000000..6b89706a4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.23.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.23.png new file mode 100644 index 000000000..8ff65562f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.24.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.24.png new file mode 100644 index 000000000..d28aa13f4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.25.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.25.png new file mode 100644 index 000000000..5a0bb14bc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.26.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.26.png new file mode 100644 index 000000000..c8d9c9981 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.27.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.27.png new file mode 100644 index 000000000..7271d791f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.28.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.28.png new file mode 100644 index 000000000..2a1f55e4e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.29.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.29.png new file mode 100644 index 000000000..2a1f55e4e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.29.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.3.png new file mode 100644 index 000000000..2f3214cad Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.30.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.30.png new file mode 100644 index 000000000..2e7090cd8 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.30.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.4.png new file mode 100644 index 000000000..0b46bcea5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.5.png new file mode 100644 index 000000000..c29223c7b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.6.png new file mode 100644 index 000000000..a823339ab Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.7.png new file mode 100644 index 000000000..f8d85ac28 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.8.png new file mode 100644 index 000000000..c208d0739 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.9.png new file mode 100644 index 000000000..0daadd628 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/ll1.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.10.png new file mode 100644 index 000000000..a746c6b44 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.11.png new file mode 100644 index 000000000..8937eb0df Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.2.png new file mode 100644 index 000000000..50dcfef1c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.3.png new file mode 100644 index 000000000..2a9878903 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.4.png new file mode 100644 index 000000000..eef30004c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.5.png new file mode 100644 index 000000000..eef30004c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.6.png new file mode 100644 index 000000000..2aef6fc61 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.7.png new file mode 100644 index 000000000..e77095a12 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.8.png new file mode 100644 index 000000000..e77095a12 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.9.png new file mode 100644 index 000000000..d401420d0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/oop_inherit.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.10.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.10.png new file mode 100644 index 000000000..c23f31ce1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.11.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.11.png new file mode 100644 index 000000000..c23f31ce1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.12.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.12.png new file mode 100644 index 000000000..c23f31ce1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.13.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.13.png new file mode 100644 index 000000000..cc5208330 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.14.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.14.png new file mode 100644 index 000000000..cc5208330 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.15.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.15.png new file mode 100644 index 000000000..cc5208330 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.16.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.16.png new file mode 100644 index 000000000..bef2c7a90 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.17.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.17.png new file mode 100644 index 000000000..bef2c7a90 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.18.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.18.png new file mode 100644 index 000000000..bef2c7a90 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.19.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.19.png new file mode 100644 index 000000000..93c275586 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.2.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.2.png new file mode 100644 index 000000000..8fb0dbf9f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.20.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.20.png new file mode 100644 index 000000000..93c275586 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.21.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.21.png new file mode 100644 index 000000000..93c275586 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.22.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.22.png new file mode 100644 index 000000000..5d8a39e47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.23.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.23.png new file mode 100644 index 000000000..b7217edc4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.24.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.24.png new file mode 100644 index 000000000..036ed54fd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.25.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.25.png new file mode 100644 index 000000000..540f00970 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.26.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.26.png new file mode 100644 index 000000000..bd33273be Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.27.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.27.png new file mode 100644 index 000000000..fe3f897e6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.28.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.28.png new file mode 100644 index 000000000..7a21edde4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.3.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.3.png new file mode 100644 index 000000000..6f9a2bef6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.4.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.4.png new file mode 100644 index 000000000..3e9f84cc9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.5.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.5.png new file mode 100644 index 000000000..3e9f84cc9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.6.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.6.png new file mode 100644 index 000000000..3e9f84cc9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.7.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.7.png new file mode 100644 index 000000000..d87cc078a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.8.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.8.png new file mode 100644 index 000000000..d87cc078a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.9.png b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.9.png new file mode 100644 index 000000000..d87cc078a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/composingprograms/sum-list.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.10.png new file mode 100644 index 000000000..e91c13bca Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.11.png new file mode 100644 index 000000000..df5b7d562 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.12.png new file mode 100644 index 000000000..7afa6bd64 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.13.png new file mode 100644 index 000000000..d24ab8b77 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.14.png new file mode 100644 index 000000000..1127bdcb4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.15.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.15.png new file mode 100644 index 000000000..0206d0f9b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.16.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.16.png new file mode 100644 index 000000000..b3b57891b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.17.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.17.png new file mode 100644 index 000000000..c2bdd86ad Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.18.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.18.png new file mode 100644 index 000000000..c2bdd86ad Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.19.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.19.png new file mode 100644 index 000000000..0c2bacfa7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.2.png new file mode 100644 index 000000000..9ef4923d4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.20.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.20.png new file mode 100644 index 000000000..df13a6d7d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.21.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.21.png new file mode 100644 index 000000000..df13a6d7d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.22.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.22.png new file mode 100644 index 000000000..100df1ad2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.23.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.23.png new file mode 100644 index 000000000..eb4bd93ff Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.24.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.24.png new file mode 100644 index 000000000..b2dd58fda Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.25.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.25.png new file mode 100644 index 000000000..21e5c3da9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.26.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.26.png new file mode 100644 index 000000000..21e5c3da9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.27.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.27.png new file mode 100644 index 000000000..0d855afe7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.28.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.28.png new file mode 100644 index 000000000..85c05fafc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.29.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.29.png new file mode 100644 index 000000000..85c05fafc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.29.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.3.png new file mode 100644 index 000000000..f91442f17 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.30.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.30.png new file mode 100644 index 000000000..12dde6277 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.30.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.31.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.31.png new file mode 100644 index 000000000..a86720560 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.31.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.32.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.32.png new file mode 100644 index 000000000..a6a62419d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.32.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.4.png new file mode 100644 index 000000000..f9ef164e7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.5.png new file mode 100644 index 000000000..359cf9987 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.6.png new file mode 100644 index 000000000..a07dc2606 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.7.png new file mode 100644 index 000000000..6a6353f23 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.8.png new file mode 100644 index 000000000..58cd97468 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.9.png new file mode 100644 index 000000000..e3c3e761c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.2.png new file mode 100644 index 000000000..197c5c91e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.3.png new file mode 100644 index 000000000..9d64b0c87 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.4.png new file mode 100644 index 000000000..d630f4efe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.5.png new file mode 100644 index 000000000..e6a83bbad Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/aliasing8.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.10.png new file mode 100644 index 000000000..068013214 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.11.png new file mode 100644 index 000000000..11d4ff12f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.12.png new file mode 100644 index 000000000..e0d4ae52f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.13.png new file mode 100644 index 000000000..71c061677 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.14.png new file mode 100644 index 000000000..57cfed5d2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.2.png new file mode 100644 index 000000000..d16603658 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.3.png new file mode 100644 index 000000000..331b748d5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.4.png new file mode 100644 index 000000000..f0c8d696f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.5.png new file mode 100644 index 000000000..b299bec38 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.6.png new file mode 100644 index 000000000..f457c98a3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.7.png new file mode 100644 index 000000000..67ed044ac Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.8.png new file mode 100644 index 000000000..e2e33ae7f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.9.png new file mode 100644 index 000000000..31d442809 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/basic-data-structures.py.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/binary-tree.py.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/binary-tree.py.step.2.png new file mode 100644 index 000000000..6f40a5937 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/binary-tree.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.2.png new file mode 100644 index 000000000..7de6f61cb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.3.png new file mode 100644 index 000000000..84b02c7b6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.4.png new file mode 100644 index 000000000..a960f575d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.5.png new file mode 100644 index 000000000..23deff82f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.6.png new file mode 100644 index 000000000..bae16101f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.7.png new file mode 100644 index 000000000..e20dcf08d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.8.png new file mode 100644 index 000000000..6f6bc5118 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.9.png new file mode 100644 index 000000000..eed5f0fae Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/circular.py.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.10.png new file mode 100644 index 000000000..c770165bd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.11.png new file mode 100644 index 000000000..53abe7fd7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.12.png new file mode 100644 index 000000000..af4197b04 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.13.png new file mode 100644 index 000000000..e7de67d6e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.14.png new file mode 100644 index 000000000..e7de67d6e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.15.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.15.png new file mode 100644 index 000000000..663865f29 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.16.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.16.png new file mode 100644 index 000000000..af4197b04 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.2.png new file mode 100644 index 000000000..60fe1724a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.3.png new file mode 100644 index 000000000..cc1066a48 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.4.png new file mode 100644 index 000000000..73c91bb0c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.5.png new file mode 100644 index 000000000..73c91bb0c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.6.png new file mode 100644 index 000000000..5f601a472 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.7.png new file mode 100644 index 000000000..78204cbf5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.8.png new file mode 100644 index 000000000..78204cbf5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.9.png new file mode 100644 index 000000000..7b8f24035 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/closure3.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.2.png new file mode 100644 index 000000000..54390de80 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.3.png new file mode 100644 index 000000000..9d4abe631 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.4.png new file mode 100644 index 000000000..c363b1d47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/criss-cross.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.2.png new file mode 100644 index 000000000..3889706be Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.3.png new file mode 100644 index 000000000..cf1ddc3fa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.4.png new file mode 100644 index 000000000..3e4dead42 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.5.png new file mode 100644 index 000000000..1ba3a0535 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.6.png new file mode 100644 index 000000000..ea42e5e50 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/double-nudge.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.10.png new file mode 100644 index 000000000..9d65f4e95 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.11.png new file mode 100644 index 000000000..9d65f4e95 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.12.png new file mode 100644 index 000000000..585537cc3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.13.png new file mode 100644 index 000000000..585537cc3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.14.png new file mode 100644 index 000000000..585537cc3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.15.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.15.png new file mode 100644 index 000000000..f2d8ad63c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.16.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.16.png new file mode 100644 index 000000000..f2d8ad63c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.17.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.17.png new file mode 100644 index 000000000..f2d8ad63c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.18.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.18.png new file mode 100644 index 000000000..1d1216501 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.19.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.19.png new file mode 100644 index 000000000..1d1216501 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.2.png new file mode 100644 index 000000000..04cd6a92d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.20.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.20.png new file mode 100644 index 000000000..1d1216501 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.21.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.21.png new file mode 100644 index 000000000..104bd33d2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.22.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.22.png new file mode 100644 index 000000000..3074fa390 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.23.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.23.png new file mode 100644 index 000000000..047505515 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.24.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.24.png new file mode 100644 index 000000000..bcc39f0ed Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.25.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.25.png new file mode 100644 index 000000000..d0c9c9280 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.26.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.26.png new file mode 100644 index 000000000..b643b9e7a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.27.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.27.png new file mode 100644 index 000000000..04cd6a92d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.3.png new file mode 100644 index 000000000..7aa97cea0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.4.png new file mode 100644 index 000000000..7aa97cea0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.5.png new file mode 100644 index 000000000..7aa97cea0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.6.png new file mode 100644 index 000000000..32b2270f0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.7.png new file mode 100644 index 000000000..32b2270f0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.8.png new file mode 100644 index 000000000..32b2270f0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.9.png new file mode 100644 index 000000000..9d65f4e95 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/fact.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.10.png new file mode 100644 index 000000000..c227aa3ba Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.11.png new file mode 100644 index 000000000..c227aa3ba Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.12.png new file mode 100644 index 000000000..c227aa3ba Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.13.png new file mode 100644 index 000000000..9ed0a9342 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.14.png new file mode 100644 index 000000000..9ed0a9342 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.15.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.15.png new file mode 100644 index 000000000..972df506e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.16.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.16.png new file mode 100644 index 000000000..dc5ea66a6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.17.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.17.png new file mode 100644 index 000000000..dc5ea66a6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.18.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.18.png new file mode 100644 index 000000000..49a7b9147 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.19.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.19.png new file mode 100644 index 000000000..49a7b9147 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.2.png new file mode 100644 index 000000000..b5fa14601 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.20.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.20.png new file mode 100644 index 000000000..49a7b9147 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.3.png new file mode 100644 index 000000000..c347ed785 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.4.png new file mode 100644 index 000000000..74a03fed3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.5.png new file mode 100644 index 000000000..74a03fed3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.6.png new file mode 100644 index 000000000..6acfa7b7c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.7.png new file mode 100644 index 000000000..8722b1cfb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.8.png new file mode 100644 index 000000000..8722b1cfb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.9.png new file mode 100644 index 000000000..8722b1cfb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/filter.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.10.png new file mode 100644 index 000000000..d276f782e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.11.png new file mode 100644 index 000000000..afdce9c4a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.12.png new file mode 100644 index 000000000..d9dd1289d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.13.png new file mode 100644 index 000000000..bc4a1973f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.14.png new file mode 100644 index 000000000..24961e974 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.15.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.15.png new file mode 100644 index 000000000..24961e974 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.16.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.16.png new file mode 100644 index 000000000..dee266cf2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.17.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.17.png new file mode 100644 index 000000000..5498be203 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.18.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.18.png new file mode 100644 index 000000000..4c3c74645 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.19.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.19.png new file mode 100644 index 000000000..5a8b8e141 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.2.png new file mode 100644 index 000000000..000f9b672 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.20.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.20.png new file mode 100644 index 000000000..007f5d619 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.21.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.21.png new file mode 100644 index 000000000..e3cf93bda Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.22.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.22.png new file mode 100644 index 000000000..061889118 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.23.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.23.png new file mode 100644 index 000000000..edeff949d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.24.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.24.png new file mode 100644 index 000000000..f02fc8b22 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.25.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.25.png new file mode 100644 index 000000000..2bec314fc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.26.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.26.png new file mode 100644 index 000000000..984b23370 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.27.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.27.png new file mode 100644 index 000000000..b09fa0137 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.28.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.28.png new file mode 100644 index 000000000..67438f1b5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.29.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.29.png new file mode 100644 index 000000000..67438f1b5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.29.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.3.png new file mode 100644 index 000000000..d00b11cfd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.30.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.30.png new file mode 100644 index 000000000..8d0745dfb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.30.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.4.png new file mode 100644 index 000000000..d4d955a19 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.5.png new file mode 100644 index 000000000..28f53b236 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.6.png new file mode 100644 index 000000000..aaeed8e71 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.7.png new file mode 100644 index 000000000..19ed582c6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.8.png new file mode 100644 index 000000000..b76364188 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.9.png new file mode 100644 index 000000000..c37d31a65 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/ll1.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.10.png new file mode 100644 index 000000000..ded0cb85e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.11.png new file mode 100644 index 000000000..951693177 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.2.png new file mode 100644 index 000000000..2f380b9ae Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.3.png new file mode 100644 index 000000000..f7cdbd8e6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.4.png new file mode 100644 index 000000000..1f7c3f05b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.5.png new file mode 100644 index 000000000..1f7c3f05b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.6.png new file mode 100644 index 000000000..4da8e834b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.7.png new file mode 100644 index 000000000..c831725eb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.8.png new file mode 100644 index 000000000..c831725eb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.9.png new file mode 100644 index 000000000..4c1cc0c97 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/oop_inherit.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.10.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.10.png new file mode 100644 index 000000000..2c3309a17 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.11.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.11.png new file mode 100644 index 000000000..2c3309a17 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.12.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.12.png new file mode 100644 index 000000000..2c3309a17 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.13.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.13.png new file mode 100644 index 000000000..0b6c66e07 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.14.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.14.png new file mode 100644 index 000000000..0b6c66e07 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.15.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.15.png new file mode 100644 index 000000000..0b6c66e07 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.16.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.16.png new file mode 100644 index 000000000..8aa928348 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.17.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.17.png new file mode 100644 index 000000000..8aa928348 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.18.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.18.png new file mode 100644 index 000000000..8aa928348 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.19.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.19.png new file mode 100644 index 000000000..43b3374f0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.2.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.2.png new file mode 100644 index 000000000..a7ad3f8f1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.20.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.20.png new file mode 100644 index 000000000..43b3374f0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.21.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.21.png new file mode 100644 index 000000000..43b3374f0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.22.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.22.png new file mode 100644 index 000000000..7d4dd6cad Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.23.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.23.png new file mode 100644 index 000000000..59bcb9211 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.24.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.24.png new file mode 100644 index 000000000..425ccaec6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.25.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.25.png new file mode 100644 index 000000000..62aa672b2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.26.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.26.png new file mode 100644 index 000000000..e0e06844d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.27.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.27.png new file mode 100644 index 000000000..a2a425a08 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.28.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.28.png new file mode 100644 index 000000000..64453be8b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.3.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.3.png new file mode 100644 index 000000000..ab31db6ec Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.4.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.4.png new file mode 100644 index 000000000..71256b15a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.5.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.5.png new file mode 100644 index 000000000..71256b15a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.6.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.6.png new file mode 100644 index 000000000..71256b15a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.7.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.7.png new file mode 100644 index 000000000..237b24826 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.8.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.8.png new file mode 100644 index 000000000..237b24826 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.9.png b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.9.png new file mode 100644 index 000000000..237b24826 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/csc108h/sum-list.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.10.png new file mode 100644 index 000000000..ce7b15aa4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.11.png new file mode 100644 index 000000000..cfeccf35b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.12.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.12.png new file mode 100644 index 000000000..658fb0759 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.13.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.13.png new file mode 100644 index 000000000..84d344063 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.14.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.14.png new file mode 100644 index 000000000..dd312d000 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.15.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.15.png new file mode 100644 index 000000000..1084042bf Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.16.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.16.png new file mode 100644 index 000000000..966c5107d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.17.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.17.png new file mode 100644 index 000000000..0d3fa49ea Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.18.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.18.png new file mode 100644 index 000000000..0d3fa49ea Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.19.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.19.png new file mode 100644 index 000000000..0615ab4a3 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.2.png new file mode 100644 index 000000000..dc74115b1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.20.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.20.png new file mode 100644 index 000000000..620bc3fb7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.21.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.21.png new file mode 100644 index 000000000..620bc3fb7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.22.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.22.png new file mode 100644 index 000000000..9213cb664 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.23.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.23.png new file mode 100644 index 000000000..e0bac689d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.24.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.24.png new file mode 100644 index 000000000..501e445fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.25.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.25.png new file mode 100644 index 000000000..39e44c67c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.26.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.26.png new file mode 100644 index 000000000..39e44c67c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.27.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.27.png new file mode 100644 index 000000000..96e6a8c1f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.28.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.28.png new file mode 100644 index 000000000..35341b08b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.29.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.29.png new file mode 100644 index 000000000..35341b08b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.29.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.3.png new file mode 100644 index 000000000..a2b252cb9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.30.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.30.png new file mode 100644 index 000000000..a2f488ad7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.30.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.31.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.31.png new file mode 100644 index 000000000..7b5308f71 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.31.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.32.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.32.png new file mode 100644 index 000000000..450d3b05b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.32.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.4.png new file mode 100644 index 000000000..8138e2e54 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.5.png new file mode 100644 index 000000000..156d5f9d4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.6.png new file mode 100644 index 000000000..252bbeedb Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.7.png new file mode 100644 index 000000000..3fafddfd8 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.8.png new file mode 100644 index 000000000..c50cc7539 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.9.png new file mode 100644 index 000000000..5efd3b273 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.2.png new file mode 100644 index 000000000..074316b20 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.3.png new file mode 100644 index 000000000..00d454fd1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.4.png new file mode 100644 index 000000000..eb2615528 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.5.png new file mode 100644 index 000000000..b839e00d2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/aliasing8.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.10.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.10.png new file mode 100644 index 000000000..0860e0e54 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.11.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.11.png new file mode 100644 index 000000000..4432f75d1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.12.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.12.png new file mode 100644 index 000000000..a16c2c272 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.13.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.13.png new file mode 100644 index 000000000..436e93756 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.14.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.14.png new file mode 100644 index 000000000..b73245799 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.2.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.2.png new file mode 100644 index 000000000..953aa911b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.3.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.3.png new file mode 100644 index 000000000..a4b690746 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.4.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.4.png new file mode 100644 index 000000000..baf937bbd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.5.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.5.png new file mode 100644 index 000000000..328b2b666 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.6.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.6.png new file mode 100644 index 000000000..a0d5f0a5b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.7.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.7.png new file mode 100644 index 000000000..6f1b9058a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.8.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.8.png new file mode 100644 index 000000000..d32ba7cb5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.9.png b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.9.png new file mode 100644 index 000000000..901ac8fa4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/basic-data-structures.py.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/binary-tree.py.step.2.png b/v3/tests/frontend-tests/golden-files/regular/binary-tree.py.step.2.png new file mode 100644 index 000000000..a9dfdbf17 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/binary-tree.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.2.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.2.png new file mode 100644 index 000000000..f44a64597 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.3.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.3.png new file mode 100644 index 000000000..1c050074d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.4.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.4.png new file mode 100644 index 000000000..a735cc7bf Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.5.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.5.png new file mode 100644 index 000000000..003d68ed0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.6.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.6.png new file mode 100644 index 000000000..9f7abd2ff Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.7.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.7.png new file mode 100644 index 000000000..aef2497d9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.8.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.8.png new file mode 100644 index 000000000..8641ccaca Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/circular.py.step.9.png b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.9.png new file mode 100644 index 000000000..56cca856b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/circular.py.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.10.png new file mode 100644 index 000000000..20c6647c7 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.11.png new file mode 100644 index 000000000..205f12a26 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.12.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.12.png new file mode 100644 index 000000000..ab32457b1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.13.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.13.png new file mode 100644 index 000000000..3f9838268 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.14.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.14.png new file mode 100644 index 000000000..3f9838268 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.15.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.15.png new file mode 100644 index 000000000..1b730e3a5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.16.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.16.png new file mode 100644 index 000000000..ab32457b1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.2.png new file mode 100644 index 000000000..122cfe307 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.3.png new file mode 100644 index 000000000..cd0f28720 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.4.png new file mode 100644 index 000000000..acfcb4aaa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.5.png new file mode 100644 index 000000000..acfcb4aaa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.6.png new file mode 100644 index 000000000..5265b6757 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.7.png new file mode 100644 index 000000000..14310f98f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.8.png new file mode 100644 index 000000000..14310f98f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.9.png new file mode 100644 index 000000000..8087a38ce Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/closure3.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.2.png b/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.2.png new file mode 100644 index 000000000..d602755c6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.3.png b/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.3.png new file mode 100644 index 000000000..ac6f38a8b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.4.png b/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.4.png new file mode 100644 index 000000000..6c8991230 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/criss-cross.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.2.png b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.2.png new file mode 100644 index 000000000..12825e858 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.3.png b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.3.png new file mode 100644 index 000000000..67cb9e591 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.4.png b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.4.png new file mode 100644 index 000000000..2033d90bc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.5.png b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.5.png new file mode 100644 index 000000000..ef333bd95 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.6.png b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.6.png new file mode 100644 index 000000000..de579a8d5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/double-nudge.py.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.10.png new file mode 100644 index 000000000..d8fac5146 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.11.png new file mode 100644 index 000000000..d8fac5146 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.12.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.12.png new file mode 100644 index 000000000..bf2c60d9a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.13.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.13.png new file mode 100644 index 000000000..bf2c60d9a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.14.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.14.png new file mode 100644 index 000000000..bf2c60d9a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.15.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.15.png new file mode 100644 index 000000000..e2d63ba47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.16.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.16.png new file mode 100644 index 000000000..e2d63ba47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.17.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.17.png new file mode 100644 index 000000000..e2d63ba47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.18.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.18.png new file mode 100644 index 000000000..e9ccceb34 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.19.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.19.png new file mode 100644 index 000000000..e9ccceb34 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.2.png new file mode 100644 index 000000000..162420b98 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.20.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.20.png new file mode 100644 index 000000000..e9ccceb34 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.21.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.21.png new file mode 100644 index 000000000..bd2837bdd Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.22.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.22.png new file mode 100644 index 000000000..acc8c3710 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.23.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.23.png new file mode 100644 index 000000000..624400f13 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.24.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.24.png new file mode 100644 index 000000000..73468b4d9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.25.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.25.png new file mode 100644 index 000000000..447fca63d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.26.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.26.png new file mode 100644 index 000000000..988f28d45 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.27.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.27.png new file mode 100644 index 000000000..162420b98 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.3.png new file mode 100644 index 000000000..b44e8266f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.4.png new file mode 100644 index 000000000..b44e8266f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.5.png new file mode 100644 index 000000000..b44e8266f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.6.png new file mode 100644 index 000000000..ee40735b9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.7.png new file mode 100644 index 000000000..ee40735b9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.8.png new file mode 100644 index 000000000..ee40735b9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.9.png new file mode 100644 index 000000000..d8fac5146 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/fact.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.10.png new file mode 100644 index 000000000..740491b2a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.11.png new file mode 100644 index 000000000..740491b2a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.12.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.12.png new file mode 100644 index 000000000..740491b2a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.13.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.13.png new file mode 100644 index 000000000..82ea7a79e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.14.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.14.png new file mode 100644 index 000000000..82ea7a79e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.15.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.15.png new file mode 100644 index 000000000..7c10fcc9f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.16.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.16.png new file mode 100644 index 000000000..a2ddf242d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.17.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.17.png new file mode 100644 index 000000000..a2ddf242d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.18.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.18.png new file mode 100644 index 000000000..7f82c53fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.19.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.19.png new file mode 100644 index 000000000..7f82c53fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.2.png new file mode 100644 index 000000000..2f1269ce6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.20.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.20.png new file mode 100644 index 000000000..7f82c53fe Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.3.png new file mode 100644 index 000000000..b81c64cd6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.4.png new file mode 100644 index 000000000..072757d06 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.5.png new file mode 100644 index 000000000..072757d06 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.6.png new file mode 100644 index 000000000..d161f4329 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.7.png new file mode 100644 index 000000000..05441f73b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.8.png new file mode 100644 index 000000000..05441f73b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.9.png new file mode 100644 index 000000000..05441f73b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/filter.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.10.png new file mode 100644 index 000000000..ac1e25774 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.11.png new file mode 100644 index 000000000..b5d615143 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.12.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.12.png new file mode 100644 index 000000000..359cef590 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.13.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.13.png new file mode 100644 index 000000000..1b5503dfa Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.14.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.14.png new file mode 100644 index 000000000..d01c82f3d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.15.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.15.png new file mode 100644 index 000000000..d01c82f3d Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.16.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.16.png new file mode 100644 index 000000000..90966c779 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.17.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.17.png new file mode 100644 index 000000000..7f484f896 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.18.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.18.png new file mode 100644 index 000000000..bdfe631f2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.19.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.19.png new file mode 100644 index 000000000..39a413cf6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.2.png new file mode 100644 index 000000000..714e375da Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.20.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.20.png new file mode 100644 index 000000000..e509ca0d6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.21.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.21.png new file mode 100644 index 000000000..f2df9ceb6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.22.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.22.png new file mode 100644 index 000000000..6b89706a4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.23.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.23.png new file mode 100644 index 000000000..8ff65562f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.24.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.24.png new file mode 100644 index 000000000..d28aa13f4 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.25.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.25.png new file mode 100644 index 000000000..5a0bb14bc Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.26.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.26.png new file mode 100644 index 000000000..c8d9c9981 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.27.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.27.png new file mode 100644 index 000000000..7271d791f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.28.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.28.png new file mode 100644 index 000000000..2a1f55e4e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.29.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.29.png new file mode 100644 index 000000000..2a1f55e4e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.29.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.3.png new file mode 100644 index 000000000..2f3214cad Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.30.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.30.png new file mode 100644 index 000000000..2e7090cd8 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.30.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.4.png new file mode 100644 index 000000000..0b46bcea5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.5.png new file mode 100644 index 000000000..c29223c7b Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.6.png new file mode 100644 index 000000000..a823339ab Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.7.png new file mode 100644 index 000000000..f8d85ac28 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.8.png new file mode 100644 index 000000000..c208d0739 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.9.png new file mode 100644 index 000000000..0daadd628 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/ll1.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.10.png new file mode 100644 index 000000000..d5142b0d2 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.11.png new file mode 100644 index 000000000..a61b62a1f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.2.png new file mode 100644 index 000000000..50dcfef1c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.3.png new file mode 100644 index 000000000..2a9878903 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.4.png new file mode 100644 index 000000000..eef30004c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.5.png new file mode 100644 index 000000000..eef30004c Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.6.png new file mode 100644 index 000000000..2aef6fc61 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.7.png new file mode 100644 index 000000000..e77095a12 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.8.png new file mode 100644 index 000000000..e77095a12 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.9.png new file mode 100644 index 000000000..d401420d0 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/oop_inherit.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.10.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.10.png new file mode 100644 index 000000000..c23f31ce1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.10.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.11.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.11.png new file mode 100644 index 000000000..c23f31ce1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.11.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.12.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.12.png new file mode 100644 index 000000000..c23f31ce1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.12.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.13.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.13.png new file mode 100644 index 000000000..cc5208330 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.13.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.14.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.14.png new file mode 100644 index 000000000..cc5208330 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.14.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.15.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.15.png new file mode 100644 index 000000000..cc5208330 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.15.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.16.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.16.png new file mode 100644 index 000000000..bef2c7a90 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.16.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.17.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.17.png new file mode 100644 index 000000000..bef2c7a90 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.17.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.18.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.18.png new file mode 100644 index 000000000..bef2c7a90 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.18.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.19.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.19.png new file mode 100644 index 000000000..93c275586 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.19.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.2.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.2.png new file mode 100644 index 000000000..8fb0dbf9f Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.2.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.20.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.20.png new file mode 100644 index 000000000..93c275586 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.20.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.21.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.21.png new file mode 100644 index 000000000..93c275586 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.21.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.22.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.22.png new file mode 100644 index 000000000..5d8a39e47 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.22.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.23.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.23.png new file mode 100644 index 000000000..f81ef9574 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.23.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.24.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.24.png new file mode 100644 index 000000000..1d416359e Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.24.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.25.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.25.png new file mode 100644 index 000000000..e73dc83ee Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.25.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.26.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.26.png new file mode 100644 index 000000000..325fe7e16 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.26.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.27.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.27.png new file mode 100644 index 000000000..94b35e9e5 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.27.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.28.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.28.png new file mode 100644 index 000000000..d70e3e6a1 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.28.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.3.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.3.png new file mode 100644 index 000000000..6f9a2bef6 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.3.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.4.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.4.png new file mode 100644 index 000000000..3e9f84cc9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.4.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.5.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.5.png new file mode 100644 index 000000000..3e9f84cc9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.5.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.6.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.6.png new file mode 100644 index 000000000..3e9f84cc9 Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.6.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.7.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.7.png new file mode 100644 index 000000000..d87cc078a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.7.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.8.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.8.png new file mode 100644 index 000000000..d87cc078a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.8.png differ diff --git a/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.9.png b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.9.png new file mode 100644 index 000000000..d87cc078a Binary files /dev/null and b/v3/tests/frontend-tests/golden-files/regular/sum-list.txt.step.9.png differ diff --git a/v3/tests/frontend-tests/opt-screenshot-test.js b/v3/tests/frontend-tests/opt-screenshot-test.js new file mode 100644 index 000000000..67133423b --- /dev/null +++ b/v3/tests/frontend-tests/opt-screenshot-test.js @@ -0,0 +1,77 @@ +// Uses PhantomJS (phantomjs.org) to call Online Python Tutor to +// visualize and render screenshots of a Python file as .png images + +// Created by Philip Guo on 2013-11-23 + +var DEBUG = true; + +var page = require('webpage').create(); +var system = require('system'); +var fs = require('fs'); + +if (system.args.length < 3) { + console.log('\nUsage:'); + console.log('phantomjs opt-screenshot-test.js

    Functionally + * equivalent to {@link #hasNextLine()}. + */ + public static boolean hasNextChar() { + scanner.useDelimiter(EMPTY_PATTERN); + boolean result = scanner.hasNext(); + scanner.useDelimiter(WHITESPACE_PATTERN); + return result; + } + + + /** + * Read and return the next line. + */ + public static String readLine() { + String line; + try { line = scanner.nextLine(); savePosition(); } + catch (Exception e) { line = null; } + return line; + } + + /** + * Read and return the next character. + */ + public static char readChar() { + scanner.useDelimiter(EMPTY_PATTERN); + String ch = scanner.next(); + assert (ch.length() == 1) : "Internal (Std)In.readChar() error!" + + " Please contact the authors."; + scanner.useDelimiter(WHITESPACE_PATTERN); + char result = ch.charAt(0); + savePosition(); + return result; + } + + + /** + * Read and return the remainder of the input as a string. + */ + public static String readAll() { + if (!scanner.hasNextLine()) + return ""; + + String result = scanner.useDelimiter(EVERYTHING_PATTERN).next(); + // not that important to reset delimeter, since now scanner is empty + scanner.useDelimiter(WHITESPACE_PATTERN); // but let's do it anyway + savePosition(); + return result; + } + + + /** + * Read and return the next string. + */ + public static String readString() { + String result = scanner.next(); + savePosition(); + return result; + } + + /** + * Read and return the next int. + */ + public static int readInt() { + int result = 0; + result = scanner.nextInt(); + savePosition(); + return result; + } + + /** + * Read and return the next double. + */ + public static double readDouble() { + double result = scanner.nextDouble(); + savePosition(); + return result; + } + + /** + * Read and return the next float. + */ + public static float readFloat() { + float result = scanner.nextFloat(); + savePosition(); + return result; + } + + /** + * Read and return the next long. + */ + public static long readLong() { + long result = scanner.nextLong(); + savePosition(); + return result; + } + + /** + * Read and return the next short. + */ + public static short readShort() { + short result = scanner.nextShort(); + savePosition(); + return result; + } + + /** + * Read and return the next byte. + */ + public static byte readByte() { + byte result = scanner.nextByte(); + savePosition(); + return result; + } + + /** + * Read and return the next boolean, allowing case-insensitive + * "true" or "1" for true, and "false" or "0" for false. + */ + public static boolean readBoolean() { + String s = readString(); + savePosition(); + if (s.equalsIgnoreCase("true")) return true; + if (s.equalsIgnoreCase("false")) return false; + if (s.equals("1")) return true; + if (s.equals("0")) return false; + throw new java.util.InputMismatchException(); + } + + /** + * Read all strings until the end of input is reached, and return them. + */ + public static String[] readAllStrings() { + // we could use readAll.trim().split(), but that's not consistent + // since trim() uses characters 0x00..0x20 as whitespace + String[] tokens = WHITESPACE_PATTERN.split(readAll()); + if (tokens.length == 0 || tokens[0].length() > 0) + return tokens; + String[] decapitokens = new String[tokens.length-1]; + for (int i=0; i < tokens.length-1; i++) + decapitokens[i] = tokens[i+1]; + savePosition(); + return decapitokens; + } + + /** + * Read all ints until the end of input is reached, and return them. + */ + public static int[] readAllInts() { + String[] fields = readAllStrings(); + int[] vals = new int[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Integer.parseInt(fields[i]); + savePosition(); + return vals; + } + + /** + * Read all doubles until the end of input is reached, and return them. + */ + public static double[] readAllDoubles() { + String[] fields = readAllStrings(); + double[] vals = new double[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Double.parseDouble(fields[i]); + savePosition(); + return vals; + } + + /*** end: section (2 of 2) of code duplicated from In to StdIn */ + + + /** + * If StdIn changes, use this to reinitialize the scanner. + */ + private static void resync() { + setScanner(new Scanner(new java.io.BufferedInputStream(System.in), + charsetName)); + } + + private static void setScanner(Scanner scanner) { + StdIn.scanner = scanner; + StdIn.scanner.useLocale(usLocale); + savePosition(); + } + + // do this once when StdIn is initialized + static { + resync(); + } + + /** + * Reads all ints from stdin. + * @deprecated For more consistency, use {@link #readAllInts()} + */ + public static int[] readInts() { + return readAllInts(); + } + + /** + * Reads all doubles from stdin. + * @deprecated For more consistency, use {@link #readAllDoubles()} + */ + public static double[] readDoubles() { + return readAllDoubles(); + } + + /** + * Reads all Strings from stdin. + * @deprecated For more consistency, use {@link #readAllStrings()} + */ + public static String[] readStrings() { + return readAllStrings(); + } + + + /** + * Interactive test of basic functionality. + */ + public static void main(String[] args) { + + System.out.println("Type a string: "); + String s = StdIn.readString(); + System.out.println("Your string was: " + s); + System.out.println(); + + System.out.println("Type an int: "); + int a = StdIn.readInt(); + System.out.println("Your int was: " + a); + System.out.println(); + + System.out.println("Type a boolean: "); + boolean b = StdIn.readBoolean(); + System.out.println("Your boolean was: " + b); + System.out.println(); + + System.out.println("Type a double: "); + double c = StdIn.readDouble(); + System.out.println("Your double was: " + c); + System.out.println(); + + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdInTest.java b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdInTest.java new file mode 100644 index 000000000..b17c6e97d --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdInTest.java @@ -0,0 +1,341 @@ +package stdlibpack; +/** + * Test client for StdIn and In. + **/ + +import java.util.Scanner; +import java.util.Arrays; +import java.lang.reflect.Array; +import java.lang.reflect.Method; +import java.io.ByteArrayInputStream; +import java.net.URL; +import java.net.URLClassLoader; + +public class StdInTest { + + // make a printable/readable version of an object + public static Object escape(Object original) { + if (original instanceof Character) { + char u = (char) ((Character)original); + int idx = "\b\t\n\f\r\"\'\\".indexOf(u); + if (idx >= 0) + return "\\"+"btnfr\"\'\\".charAt(idx); + if (u < 32) + return "\\"+Integer.toOctalString(u); + if (u > 126) + return "\\u"+String.format("%04X", (int)u); + return original; + } + else if (original instanceof String) { + StringBuilder result = new StringBuilder(); + for (char c : ((String)original).toCharArray()) + result.append(escape(c)); + return "\"" + result.toString() + "\""; + } + else if (original.getClass().isArray()) { + StringBuilder result = new StringBuilder("["); + int len = Array.getLength(original); + for (int i=0; iStandard output. This class provides methods for writing strings + * and numbers to standard output. + *

    + * For additional documentation, see Section 1.5 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdOut { + + // force Unicode UTF-8 encoding; otherwise it's system dependent + private static final String charsetName = "UTF-8"; + + // assume language = English, country = US for consistency with StdIn + private static final Locale US_LOCALE = new Locale("en", "US"); + + // send output here + private static PrintWriter out; + + // this is called before invoking any methods + public static void resync() { + try { + out = new PrintWriter(new OutputStreamWriter(System.out, charsetName), true); + } + catch (UnsupportedEncodingException e) { System.out.println(e); } + } + + static { + resync(); + } + + // don't instantiate + private StdOut() { } + + // close the output stream (not required) + /** + * Close standard output. + */ + public static void close() { + out.close(); + } + + /** + * Terminate the current line by printing the line separator string. + */ + public static void println() { + out.println(); + } + + /** + * Print an object to standard output and then terminate the line. + */ + public static void println(Object x) { + out.println(x); + } + + /** + * Print a boolean to standard output and then terminate the line. + */ + public static void println(boolean x) { + out.println(x); + } + + /** + * Print a char to standard output and then terminate the line. + */ + public static void println(char x) { + out.println(x); + } + + /** + * Print a double to standard output and then terminate the line. + */ + public static void println(double x) { + out.println(x); + } + + /** + * Print a float to standard output and then terminate the line. + */ + public static void println(float x) { + out.println(x); + } + + /** + * Print an int to standard output and then terminate the line. + */ + public static void println(int x) { + out.println(x); + } + + /** + * Print a long to standard output and then terminate the line. + */ + public static void println(long x) { + out.println(x); + } + + /** + * Print a short to standard output and then terminate the line. + */ + public static void println(short x) { + out.println(x); + } + + /** + * Print a byte to standard output and then terminate the line. + */ + public static void println(byte x) { + out.println(x); + } + + /** + * Flush standard output. + */ + public static void print() { + out.flush(); + } + + /** + * Print an Object to standard output and flush standard output. + */ + public static void print(Object x) { + out.print(x); + out.flush(); + } + + /** + * Print a boolean to standard output and flush standard output. + */ + public static void print(boolean x) { + out.print(x); + out.flush(); + } + + /** + * Print a char to standard output and flush standard output. + */ + public static void print(char x) { + out.print(x); + out.flush(); + } + + /** + * Print a double to standard output and flush standard output. + */ + public static void print(double x) { + out.print(x); + out.flush(); + } + + /** + * Print a float to standard output and flush standard output. + */ + public static void print(float x) { + out.print(x); + out.flush(); + } + + /** + * Print an int to standard output and flush standard output. + */ + public static void print(int x) { + out.print(x); + out.flush(); + } + + /** + * Print a long to standard output and flush standard output. + */ + public static void print(long x) { + out.print(x); + out.flush(); + } + + /** + * Print a short to standard output and flush standard output. + */ + public static void print(short x) { + out.print(x); + out.flush(); + } + + /** + * Print a byte to standard output and flush standard output. + */ + public static void print(byte x) { + out.print(x); + out.flush(); + } + + /** + * Print a formatted string to standard output using the specified + * format string and arguments, and flush standard output. + */ + public static void printf(String format, Object... args) { + out.printf(US_LOCALE, format, args); + out.flush(); + } + + /** + * Print a formatted string to standard output using the specified + * locale, format string, and arguments, and flush standard output. + */ + public static void printf(Locale locale, String format, Object... args) { + out.printf(locale, format, args); + out.flush(); + } + + // This method is just here to test the class + public static void main(String[] args) { + + // write to stdout + StdOut.println("Test"); + StdOut.println(17); + StdOut.println(true); + StdOut.printf("%.6f\n", 1.0/7.0); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdRandom.java b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdRandom.java new file mode 100644 index 000000000..328a4962f --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdRandom.java @@ -0,0 +1,348 @@ +package stdlibpack; +/************************************************************************* + * Compilation: javac StdRandom.java + * Execution: java StdRandom + * + * A library of static methods to generate pseudo-random numbers from + * different distributions (bernoulli, uniform, gaussian, discrete, + * and exponential). Also includes a method for shuffling an array. + * + * + * % java StdRandom 5 + * seed = 1316600602069 + * 59 16.81826 true 8.83954 0 + * 32 91.32098 true 9.11026 0 + * 35 10.11874 true 8.95396 3 + * 92 32.88401 true 8.87089 0 + * 72 92.55791 true 9.46241 0 + * + * % java StdRandom 5 + * seed = 1316600616575 + * 96 60.17070 true 8.72821 0 + * 79 32.01607 true 8.58159 0 + * 81 59.49065 true 9.10423 1 + * 96 51.65818 true 9.02102 0 + * 99 17.55771 true 8.99762 0 + * + * % java StdRandom 5 1316600616575 + * seed = 1316600616575 + * 96 60.17070 true 8.72821 0 + * 79 32.01607 true 8.58159 0 + * 81 59.49065 true 9.10423 1 + * 96 51.65818 true 9.02102 0 + * 99 17.55771 true 8.99762 0 + * + * + * Remark + * ------ + * - Relies on randomness of nextDouble() method in java.util.Random + * to generate pseudorandom numbers in [0, 1). + * + * - This library allows you to set and get the pseudorandom number seed. + * + * - See http://www.honeylocust.com/RngPack/ for an industrial + * strength random number generator in Java. + * + *************************************************************************/ + +import java.util.Random; + +/** + * Standard random. This class provides methods for generating + * random number from various distributions. + *

    + * For additional documentation, see Section 2.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdRandom { + + private static Random random; // pseudo-random number generator + private static long seed; // pseudo-random number generator seed + + // static initializer + static { + // this is how the seed was set in Java 1.4 + seed = System.currentTimeMillis(); + random = new Random(seed); + } + + // don't instantiate + private StdRandom() { } + + /** + * Set the seed of the psedurandom number generator. + */ + public static void setSeed(long s) { + seed = s; + random = new Random(seed); + } + + /** + * Get the seed of the psedurandom number generator. + */ + public static long getSeed() { + return seed; + } + + /** + * Return real number uniformly in [0, 1). + */ + public static double uniform() { + return random.nextDouble(); + } + + /** + * Return an integer uniformly between 0 (inclusive) and N (exclusive). + */ + public static int uniform(int N) { + return random.nextInt(N); + } + + /////////////////////////////////////////////////////////////////////////// + // STATIC METHODS BELOW RELY ON JAVA.UTIL.RANDOM ONLY INDIRECTLY VIA + // THE STATIC METHODS ABOVE. + /////////////////////////////////////////////////////////////////////////// + + /** + * Return real number uniformly in [0, 1). + */ + public static double random() { + return uniform(); + } + + /** + * Return int uniformly in [a, b). + */ + public static int uniform(int a, int b) { + return a + uniform(b - a); + } + + /** + * Return real number uniformly in [a, b). + */ + public static double uniform(double a, double b) { + return a + uniform() * (b-a); + } + + /** + * Return a boolean, which is true with probability p, and false otherwise. + */ + public static boolean bernoulli(double p) { + return uniform() < p; + } + + /** + * Return a boolean, which is true with probability .5, and false otherwise. + */ + public static boolean bernoulli() { + return bernoulli(0.5); + } + + /** + * Return a real number with a standard Gaussian distribution. + */ + public static double gaussian() { + // use the polar form of the Box-Muller transform + double r, x, y; + do { + x = uniform(-1.0, 1.0); + y = uniform(-1.0, 1.0); + r = x*x + y*y; + } while (r >= 1 || r == 0); + return x * Math.sqrt(-2 * Math.log(r) / r); + + // Remark: y * Math.sqrt(-2 * Math.log(r) / r) + // is an independent random gaussian + } + + /** + * Return a real number from a gaussian distribution with given mean and stddev + */ + public static double gaussian(double mean, double stddev) { + return mean + stddev * gaussian(); + } + + /** + * Return an integer with a geometric distribution with mean 1/p. + */ + public static int geometric(double p) { + // using algorithm given by Knuth + return (int) Math.ceil(Math.log(uniform()) / Math.log(1.0 - p)); + } + + /** + * Return an integer with a Poisson distribution with mean lambda. + */ + public static int poisson(double lambda) { + // using algorithm given by Knuth + // see http://en.wikipedia.org/wiki/Poisson_distribution + int k = 0; + double p = 1.0; + double L = Math.exp(-lambda); + do { + k++; + p *= uniform(); + } while (p >= L); + return k-1; + } + + /** + * Return a real number with a Pareto distribution with parameter alpha. + */ + public static double pareto(double alpha) { + return Math.pow(1 - uniform(), -1.0/alpha) - 1.0; + } + + /** + * Return a real number with a Cauchy distribution. + */ + public static double cauchy() { + return Math.tan(Math.PI * (uniform() - 0.5)); + } + + /** + * Return a number from a discrete distribution: i with probability a[i]. + * Precondition: array entries are nonnegative and their sum (very nearly) equals 1.0. + */ + public static int discrete(double[] a) { + double EPSILON = 1E-14; + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + if (a[i] < 0.0) throw new IllegalArgumentException("array entry " + i + " is negative: " + a[i]); + sum = sum + a[i]; + } + if (sum > 1.0 + EPSILON || sum < 1.0 - EPSILON) + throw new IllegalArgumentException("sum of array entries not equal to one: " + sum); + + // the for loop may not return a value when both r is (nearly) 1.0 and when the + // cumulative sum is less than 1.0 (as a result of floating-point roundoff error) + while (true) { + double r = uniform(); + sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum = sum + a[i]; + if (sum > r) return i; + } + } + } + + /** + * Return a real number from an exponential distribution with rate lambda. + */ + public static double exp(double lambda) { + return -Math.log(1 - uniform()) / lambda; + } + + /** + * Rearrange the elements of an array in random order. + */ + public static void shuffle(Object[] a) { + int N = a.length; + for (int i = 0; i < N; i++) { + int r = i + uniform(N-i); // between i and N-1 + Object temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of a double array in random order. + */ + public static void shuffle(double[] a) { + int N = a.length; + for (int i = 0; i < N; i++) { + int r = i + uniform(N-i); // between i and N-1 + double temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of an int array in random order. + */ + public static void shuffle(int[] a) { + int N = a.length; + for (int i = 0; i < N; i++) { + int r = i + uniform(N-i); // between i and N-1 + int temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + + /** + * Rearrange the elements of the subarray a[lo..hi] in random order. + */ + public static void shuffle(Object[] a, int lo, int hi) { + if (lo < 0 || lo > hi || hi >= a.length) { + throw new IndexOutOfBoundsException("Illegal subarray range"); + } + for (int i = lo; i <= hi; i++) { + int r = i + uniform(hi-i+1); // between i and hi + Object temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of the subarray a[lo..hi] in random order. + */ + public static void shuffle(double[] a, int lo, int hi) { + if (lo < 0 || lo > hi || hi >= a.length) { + throw new IndexOutOfBoundsException("Illegal subarray range"); + } + for (int i = lo; i <= hi; i++) { + int r = i + uniform(hi-i+1); // between i and hi + double temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of the subarray a[lo..hi] in random order. + */ + public static void shuffle(int[] a, int lo, int hi) { + if (lo < 0 || lo > hi || hi >= a.length) { + throw new IndexOutOfBoundsException("Illegal subarray range"); + } + for (int i = lo; i <= hi; i++) { + int r = i + uniform(hi-i+1); // between i and hi + int temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Unit test. + */ + public static void main(String[] args) { + int N = Integer.parseInt(args[0]); + if (args.length == 2) StdRandom.setSeed(Long.parseLong(args[1])); + double[] t = { .5, .3, .1, .1 }; + + StdOut.println("seed = " + StdRandom.getSeed()); + for (int i = 0; i < N; i++) { + StdOut.printf("%2d " , uniform(100)); + StdOut.printf("%8.5f ", uniform(10.0, 99.0)); + StdOut.printf("%5b " , bernoulli(.5)); + StdOut.printf("%7.5f ", gaussian(9.0, .2)); + StdOut.printf("%2d " , discrete(t)); + StdOut.println(); + } + + String[] a = "A B C D E F G".split(" "); + for (String s : a) + StdOut.print(s + " "); + StdOut.println(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdStats.java b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdStats.java new file mode 100644 index 000000000..ea5159560 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/StdStats.java @@ -0,0 +1,337 @@ +package stdlibpack; + +/************************************************************************* + * Compilation: javac StdStats.java + * Execution: java StdStats < input.txt + * + * Library of statistical functions. + * + * The test client reads an array of real numbers from standard + * input, and computes the minimum, mean, maximum, and + * standard deviation. + * + * The functions all throw a NullPointerException if the array + * passed in is null. + + * % more tiny.txt + * 5 + * 3.0 1.0 2.0 5.0 4.0 + * + * % java StdStats < tiny.txt + * min 1.000 + * mean 3.000 + * max 5.000 + * std dev 1.581 + * + *************************************************************************/ + +/** + * Standard statistics. This class provides methods for computing + * statistics such as min, max, mean, sample standard deviation, and + * sample variance. + *

    + * For additional documentation, see + * Section 2.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdStats { + + private StdStats() { } + + /** + * Return maximum value in array, -infinity if no such value. + */ + public static double max(double[] a) { + double max = Double.NEGATIVE_INFINITY; + for (int i = 0; i < a.length; i++) { + if (a[i] > max) max = a[i]; + } + return max; + } + + /** + * Return maximum value in subarray a[lo..hi], -infinity if no such value. + */ + public static double max(double[] a, int lo, int hi) { + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + double max = Double.NEGATIVE_INFINITY; + for (int i = lo; i <= hi; i++) { + if (a[i] > max) max = a[i]; + } + return max; + } + + /** + * Return maximum value of array, Integer.MIN_VALUE if no such value + */ + public static int max(int[] a) { + int max = Integer.MIN_VALUE; + for (int i = 0; i < a.length; i++) { + if (a[i] > max) max = a[i]; + } + return max; + } + + /** + * Return minimum value in array, +infinity if no such value. + */ + public static double min(double[] a) { + double min = Double.POSITIVE_INFINITY; + for (int i = 0; i < a.length; i++) { + if (a[i] < min) min = a[i]; + } + return min; + } + + /** + * Return minimum value in subarray a[lo..hi], +infinity if no such value. + */ + public static double min(double[] a, int lo, int hi) { + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + double min = Double.POSITIVE_INFINITY; + for (int i = lo; i <= hi; i++) { + if (a[i] < min) min = a[i]; + } + return min; + } + + /** + * Return minimum value of array, Integer.MAX_VALUE if no such value + */ + public static int min(int[] a) { + int min = Integer.MAX_VALUE; + for (int i = 0; i < a.length; i++) { + if (a[i] < min) min = a[i]; + } + return min; + } + + /** + * Return average value in array, NaN if no such value. + */ + public static double mean(double[] a) { + if (a.length == 0) return Double.NaN; + double sum = sum(a); + return sum / a.length; + } + + /** + * Return average value in subarray a[lo..hi], NaN if no such value. + */ + public static double mean(double[] a, int lo, int hi) { + int length = hi - lo + 1; + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + if (length == 0) return Double.NaN; + double sum = sum(a, lo, hi); + return sum / length; + } + + /** + * Return average value in array, NaN if no such value. + */ + public static double mean(int[] a) { + if (a.length == 0) return Double.NaN; + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum = sum + a[i]; + } + return sum / a.length; + } + + /** + * Return sample variance of array, NaN if no such value. + */ + public static double var(double[] a) { + if (a.length == 0) return Double.NaN; + double avg = mean(a); + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / (a.length - 1); + } + + /** + * Return sample variance of subarray a[lo..hi], NaN if no such value. + */ + public static double var(double[] a, int lo, int hi) { + int length = hi - lo + 1; + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + if (length == 0) return Double.NaN; + double avg = mean(a, lo, hi); + double sum = 0.0; + for (int i = lo; i <= hi; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / (length - 1); + } + + /** + * Return sample variance of array, NaN if no such value. + */ + public static double var(int[] a) { + if (a.length == 0) return Double.NaN; + double avg = mean(a); + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / (a.length - 1); + } + + /** + * Return population variance of array, NaN if no such value. + */ + public static double varp(double[] a) { + if (a.length == 0) return Double.NaN; + double avg = mean(a); + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / a.length; + } + + /** + * Return population variance of subarray a[lo..hi], NaN if no such value. + */ + public static double varp(double[] a, int lo, int hi) { + int length = hi - lo + 1; + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + if (length == 0) return Double.NaN; + double avg = mean(a, lo, hi); + double sum = 0.0; + for (int i = lo; i <= hi; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / length; + } + + + /** + * Return sample standard deviation of array, NaN if no such value. + */ + public static double stddev(double[] a) { + return Math.sqrt(var(a)); + } + + /** + * Return sample standard deviation of subarray a[lo..hi], NaN if no such value. + */ + public static double stddev(double[] a, int lo, int hi) { + return Math.sqrt(var(a, lo, hi)); + } + + /** + * Return sample standard deviation of array, NaN if no such value. + */ + public static double stddev(int[] a) { + return Math.sqrt(var(a)); + } + + /** + * Return population standard deviation of array, NaN if no such value. + */ + public static double stddevp(double[] a) { + return Math.sqrt(varp(a)); + } + + /** + * Return population standard deviation of subarray a[lo..hi], NaN if no such value. + */ + public static double stddevp(double[] a, int lo, int hi) { + return Math.sqrt(varp(a, lo, hi)); + } + + /** + * Return sum of all values in array. + */ + public static double sum(double[] a) { + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += a[i]; + } + return sum; + } + + /** + * Return sum of all values in subarray a[lo..hi]. + */ + public static double sum(double[] a, int lo, int hi) { + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + double sum = 0.0; + for (int i = lo; i <= hi; i++) { + sum += a[i]; + } + return sum; + } + + /** + * Return sum of all values in array. + */ + public static int sum(int[] a) { + int sum = 0; + for (int i = 0; i < a.length; i++) { + sum += a[i]; + } + return sum; + } + + /** + * Plot points (i, a[i]) to standard draw. + */ + public static void plotPoints(double[] a) { + int N = a.length; + StdDraw.setXscale(0, N-1); + StdDraw.setPenRadius(1.0 / (3.0 * N)); + for (int i = 0; i < N; i++) { + StdDraw.point(i, a[i]); + } + } + + /** + * Plot line segments connecting points (i, a[i]) to standard draw. + */ + public static void plotLines(double[] a) { + int N = a.length; + StdDraw.setXscale(0, N-1); + StdDraw.setPenRadius(); + for (int i = 1; i < N; i++) { + StdDraw.line(i-1, a[i-1], i, a[i]); + } + } + + /** + * Plot bars from (0, a[i]) to (i, a[i]) to standard draw. + */ + public static void plotBars(double[] a) { + int N = a.length; + StdDraw.setXscale(0, N-1); + for (int i = 0; i < N; i++) { + StdDraw.filledRectangle(i, a[i]/2, .25, a[i]/2); + } + } + + + /** + * Test client. + * Convert command-line arguments to array of doubles and call various methods. + */ + public static void main(String[] args) { + double[] a = StdArrayIO.readDouble1D(); + StdOut.printf(" min %7.3f\n", min(a)); + StdOut.printf(" mean %7.3f\n", mean(a)); + StdOut.printf(" max %7.3f\n", max(a)); + StdOut.printf(" std dev %7.3f\n", stddev(a)); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/stdlibpack/Stopwatch.java b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/Stopwatch.java new file mode 100644 index 000000000..d8589009e --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/stdlibpack/Stopwatch.java @@ -0,0 +1,47 @@ +package stdlibpack; + + +/************************************************************************* + * Compilation: javac Stopwatch.java + * + * + *************************************************************************/ + +/** + * Stopwatch. This class is a data type for measuring + * the running time (wall clock) of a program. + *

    + * For additional documentation, see + * Section 3.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + */ + + + +public class Stopwatch { + + private final long start; + + private String startString; + + /** + * Create a stopwatch object. + */ + public Stopwatch() { + start = System.currentTimeMillis(); + + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("HH:mm:ss.SSS"); + startString = sdf.format(start); + } + + + /** + * Return elapsed time (in seconds) since this object was created. + */ + public double elapsedTime() { + long now = System.currentTimeMillis(); + return (now - start) / 1000.0; + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/.gitignore b/v4-cokapi/backends/java/java_jail/cp/traceprinter/.gitignore new file mode 100644 index 000000000..60c153095 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/.gitignore @@ -0,0 +1 @@ +!compile \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/InMemory.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/InMemory.java new file mode 100644 index 000000000..cca642032 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/InMemory.java @@ -0,0 +1,235 @@ +/***************************************************************************** + +traceprinter: a Java package to print traces of Java programs +David Pritchard (daveagp@gmail.com), created May 2013 + +The contents of this directory are released under the GNU Affero +General Public License, versions 3 or later. See LICENSE or visit: +http://www.gnu.org/licenses/agpl.html + +See README for documentation on this package. + +This file was originally based on +com.sun.tools.example.trace.Trace, written by Robert Field. + +******************************************************************************/ + +package traceprinter; + +import com.sun.jdi.*; +import com.sun.jdi.connect.*; + +import java.util.regex.*; +import java.util.*; +import java.io.*; + +import javax.tools.*; + +import traceprinter.ramtools.*; + +import javax.json.*; + +public class InMemory { + + String usercode; + JsonObject optionsObject; + JsonArray argsArray; + String givenStdin; + String mainClass; + VirtualMachine vm; + static String stdin; + Map bytecode; + + public final static long startTime = System.currentTimeMillis(); + + public static void main(String[] args) { + + JDI2JSON.userlog("Debugger VM maxMemory: " + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M"); + + // just a sanity check, can the debugger VM see this NoopMain? + traceprinter.shoelace.NoopMain.main(null); + // however, the debuggee might or might not be able to. + // use the CLASSPATH environment variable so that it includes + // the parent directory of traceprinter; using -cp does not + // reliably pass on to the debuggee. + + try { + new InMemory( + Json.createReader(new InputStreamReader + (System.in, "UTF-8")) + .readObject()); + } + catch (IOException e) { + System.out.print(JDI2JSON.compileErrorOutput("[could not read user code]", + "Internal IOException in php->java", + 1, 1)); + } + } + + // convenience version of JDI2JSON method + void compileError(String msg, long row, long col) { + try { + PrintStream out = new PrintStream(System.out, true, "UTF-8"); + out.print(JDI2JSON.compileErrorOutput(usercode, msg, row, col)); + } + catch (UnsupportedEncodingException e) { //fallback + System.out.print(JDI2JSON.compileErrorOutput(usercode, msg, row, col)); + } + } + + // figure out the class name, then compile and run main([]) + InMemory(JsonObject frontend_data) { + this.usercode = frontend_data.getJsonString("usercode").getString(); + this.optionsObject = frontend_data.getJsonObject("options"); + this.argsArray = frontend_data.getJsonArray("args"); + this.givenStdin = frontend_data.getJsonString("stdin").getString(); + stdin = this.givenStdin; + + if (frontend_data.containsKey("visualizer_args") && (!frontend_data.isNull("visualizer_args"))) { + JsonObject visualizer_args = frontend_data.getJsonObject("visualizer_args"); + if (visualizer_args.getJsonNumber("MAX_STEPS") != null) + JSONTracingThread.MAX_STEPS = visualizer_args.getJsonNumber("MAX_STEPS").intValue(); + if (visualizer_args.getJsonNumber("MAX_STACK_SIZE") != null) + JSONTracingThread.MAX_STACK_SIZE = visualizer_args.getJsonNumber("MAX_STACK_SIZE").intValue(); + if (visualizer_args.getJsonNumber("MAX_WALLTIME_SECONDS") != null) + JSONTracingThread.MAX_WALLTIME_SECONDS = visualizer_args.getJsonNumber("MAX_WALLTIME_SECONDS").intValue(); + } + + // not 100% accurate, if people have multiple top-level classes + public inner classes + Pattern p = Pattern.compile("public\\s+class\\s+([a-zA-Z0-9_]+)\\b"); + Matcher m = p.matcher(usercode); + if (!m.find()) { + compileError("Error: Make sure your code includes 'public class \u00ABClassName\u00BB'", 1, 1); + return; + } + + mainClass = m.group(1); + + for (String S: JDI2JSON.PU_stdlib) { + if (mainClass.equals(S)) { + compileError("You cannot use a class named "+S+" since it conflicts with a 'stdlib' class name", 1, 1); + return; + } + } + + CompileToBytes c2b = new CompileToBytes(); + + c2b.compilerOutput = new StringWriter(); + c2b.options = Arrays.asList("-g -Xmaxerrs 1".split(" ")); + DiagnosticCollector errorCollector = new DiagnosticCollector<>(); + c2b.diagnosticListener = errorCollector; + + bytecode = c2b.compileFile(mainClass, usercode); + + if (bytecode == null) { + for (Diagnostic err : errorCollector.getDiagnostics()) + if (err.getKind() == Diagnostic.Kind.ERROR) { + compileError("Error: " + err.getMessage(null), Math.max(0, err.getLineNumber()), + Math.max(0, err.getColumnNumber())); + return; + } + compileError("Compiler did not work, but reported no ERROR?!?!", 0, 0); + return; + } + + vm = launchVM("traceprinter.shoelace.NoopMain"); + vm.setDebugTraceMode(0); + + JSONTracingThread tt = new JSONTracingThread(this); + tt.start(); + + vm.resume(); + } + + VirtualMachine launchVM(String className) { + LaunchingConnector connector = theCommandLineLaunchConnector(); + try { + + java.util.Map args + = connector.defaultArguments(); + + /* what are the other options? on my system, + + for (java.util.Map.Entry arg: args.entrySet()) { + System.out.print(arg.getKey()+" "); + System.out.print("["+arg.getValue().value()+"]: "); + System.out.println(arg.getValue().description()); + } + + prints out: + +home [/java/jre]: Home directory of the SDK or runtime environment used to launch the application +options []: Launched VM options +main []: Main class and arguments, or if -jar is an option, the main jar file and arguments +suspend [true]: All threads will be suspended before execution of main +quote ["]: Character used to combine space-delimited text into a single command line argument +vmexec [java]: Name of the Java VM launcher + + For more info, see +http://docs.oracle.com/javase/7/docs/jdk/api/jpda/jdi/com/sun/jdi/connect/Connector.Argument.html + */ + + ((Connector.Argument)(args.get("main"))).setValue(className); + + String options = ""; + + // inherit the classpath. if it were not for this, the CLASSPATH environment + // variable would be inherited, but the -cp command-line option would not. + // note that -cp overrides CLASSPATH. + + options += "-cp " + System.getProperty("java.class.path") + " "; + + // set a memory limit + + options += "-Xmx512m" + " "; // changed by pgbovine + + options += "-Dfile.encoding=UTF-8" + " "; + + options += "-Djava.awt.headless=true" + " "; + + ((Connector.Argument)(args.get("options"))).setValue(options); + + // System.out.println("About to call LaunchingConnector.launch..."); + VirtualMachine result = connector.launch(args); + //System.out.println("...done"); + return result; + } catch (VMStartException exc) { + System.out.println("Hoeyx!"); + System.out.println("Failed in launchTarget: " + exc.getMessage()); + exc.printStackTrace(); + byte[] b = new byte[100000]; + System.out.println(exc.process().exitValue()); + try { + BufferedReader in = new BufferedReader(new InputStreamReader(exc.process().getErrorStream())); + String inputLine; + while ((inputLine = in.readLine()) != null) + System.out.println(inputLine); + in = new BufferedReader(new InputStreamReader(exc.process().getInputStream())); + while ((inputLine = in.readLine()) != null) + System.out.println(inputLine); + + } + catch (java.io.IOException excx) { + System.out.println("Crud"); + } + } catch (java.io.IOException exc) { + System.out.println("Failed in launchTarget: " + exc.getMessage()); + exc.printStackTrace(); + } catch (IllegalConnectorArgumentsException exc) { + System.out.println("Hoeyy!"); + for (String S : exc.argumentNames()) { + System.out.println(S); + } + System.out.println(exc); + } + return null; // when caught + } + + LaunchingConnector theCommandLineLaunchConnector() { + for (Connector connector : + Bootstrap.virtualMachineManager().allConnectors()) + if (connector.name().equals("com.sun.jdi.CommandLineLaunch")) + return (LaunchingConnector)connector; + throw new Error("No launching connector"); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/JDI2JSON.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/JDI2JSON.java new file mode 100644 index 000000000..dc44f3127 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/JDI2JSON.java @@ -0,0 +1,825 @@ +/***************************************************************************** + +traceprinter: a Java package to print traces of Java programs +David Pritchard (daveagp@gmail.com), created May 2013 + +The contents of this directory are released under the GNU Affero +General Public License, versions 3 or later. See LICENSE or visit: +http://www.gnu.org/licenses/agpl.html + +See README for documentation on this package. + +******************************************************************************/ + +package traceprinter; + +import java.util.*; +import com.sun.jdi.*; +import com.sun.jdi.request.*; +import com.sun.jdi.event.*; + +import java.io.*; +import javax.json.*; + +public class JDI2JSON { + + private class InputPuller { + InputStreamReader vm_link; + StringWriter contents = new java.io.StringWriter(); + String getContents() { + return contents.toString(); + } + InputPuller(InputStream ir) { + try { + vm_link = new InputStreamReader(ir, "UTF-8"); + } + catch (UnsupportedEncodingException e) { + throw new RuntimeException("Encoding error!"); + } + } + void pull() { + int BUFFER_SIZE = 2048; + char[] cbuf = new char[BUFFER_SIZE]; + int count; + try { + while (vm_link.ready() + && ((count = vm_link.read(cbuf, 0, BUFFER_SIZE)) >= 0)) { + contents.write(cbuf, 0, count); + } + } + catch(IOException e) { + throw new RuntimeException("I/O Error!"); + } + } + } + + private VirtualMachine vm; + private InputPuller stdout, stderr; + private JsonObject last_ep = null; + private TreeMap heap; + private TreeSet heap_done; + + /* private ArrayList frame_stack = new ArrayList();*/ + private long frame_ticker = 0; + + public List staticListable = new ArrayList<>(); + + public ReferenceType stdinRT = null; + + public static StringBuilder userlogged; + + public static boolean showVoid = true; + + boolean showStringsAsValues = true; + boolean showAllFields = false; + + public JDI2JSON(VirtualMachine vm, InputStream vm_stdout, InputStream vm_stderr, JsonObject optionsObject) { + stdout = new InputPuller(vm_stdout); + stderr = new InputPuller(vm_stderr); + //frame_stack.add(frame_ticker++); + if (optionsObject.containsKey("showStringsAsValues")) + showStringsAsValues + = optionsObject.getBoolean("showStringsAsValues"); + if (optionsObject.containsKey("showAllFields")) + showAllFields = optionsObject.getBoolean("showAllFields"); + } + + public static void userlog(String S) { + if (userlogged == null) userlogged = new StringBuilder(); + userlogged.append(S).append("\n"); + } + + // returns null when nothing changed since the last time + // (or when only event type changed and new value is "step_line") + public ArrayList convertExecutionPoint(Event e, Location loc, ThreadReference t) { + stdout.pull(); + stderr.pull(); + + //System.out.println(e); + + ArrayList results = new ArrayList<>(); + + if (loc.method().name().indexOf("access$")>=0) return results; // don't visualize synthetic access$000 methods + + heap_done = new TreeSet(); + heap = new TreeMap<>(); + + JsonValue returnValue = null; + + JsonObjectBuilder result = Json.createObjectBuilder(); + result.add("stdout", stdout.getContents()); + if (e instanceof MethodEntryEvent) { + result.add("event", "call"); + //frame_stack.add(frame_ticker++); + result.add("line", loc.lineNumber()); + } + else if (e instanceof MethodExitEvent) { + returnValue = convertValue(((MethodExitEvent)e).returnValue()); + result.add("event", "return"); + result.add("line", loc.lineNumber()); + } + else if (e instanceof BreakpointEvent || e instanceof StepEvent) { + result.add("event", "step_line"); + result.add("line", loc.lineNumber()); + } + else if (e instanceof ExceptionEvent) { + // we could compare this with null to see if it was caught. + // Location katch = ((ExceptionEvent)e).catchLocation(); + + // but it turns out we don't care, since either the code + // keeps going or just halts appropriately anyway. + + result.add("event", "exception"); + + result.add("exception_msg", exceptionMessage((ExceptionEvent)e)); + } + + JsonArrayBuilder frames = Json.createArrayBuilder(); + StackFrame lastNonUserFrame = null; + try { + boolean firstFrame = true; + for (StackFrame sf : t.frames()) { + if (!showFramesInLocation(sf.location())) { + lastNonUserFrame = sf; + continue; + } + + if (lastNonUserFrame != null) { + frame_ticker++; + frames.add(convertFrameStub(lastNonUserFrame)); + lastNonUserFrame = null; + } + frame_ticker++; + frames.add(convertFrame(sf, firstFrame, returnValue)); + firstFrame = false; + returnValue = null; + } + } + catch (IncompatibleThreadStateException ex) { + //thread was not suspended .. should not normally happen + + throw new RuntimeException("ITSE"); + } + result.add("stack_to_render", frames); + + //if (e instanceof MethodExitEvent) + // frame_stack.remove(frame_stack.size()-1); + + JsonObjectBuilder statics = Json.createObjectBuilder(); + JsonArrayBuilder statics_a = Json.createArrayBuilder(); + for (ReferenceType rt : staticListable) + if (rt.isInitialized() && !in_builtin_package(rt.name())) + for (Field f : rt.visibleFields()) + if (f.isStatic()) { + statics.add(rt.name()+"."+f.name(), + convertValue(rt.getValue(f))); + statics_a.add(rt.name()+"."+f.name()); + } + if (stdinRT != null && stdinRT.isInitialized()) { + int stdinPosition = ((IntegerValue)stdinRT.getValue(stdinRT.fieldByName("position"))).value(); + result.add("stdinPosition", stdinPosition); + /* statics.add("stdin.Position", stdinPosition); + statics_a.add("stdin.Position");*/ + } + + result.add("globals", statics); + result.add("ordered_globals", statics_a); + + result.add("func_name", loc.method().name()); + + JsonObjectBuilder heapDescription = Json.createObjectBuilder(); + convertHeap(heapDescription); + result.add("heap", heapDescription); + + JsonObject this_ep = result.build(); + if (reallyChanged(last_ep, this_ep)) { + results.add(this_ep); + last_ep = this_ep; + } + + + + return results; + } + + public static String[] builtin_packages = {"java", "javax", "sun", "com.sun", "traceprinter"}; + + public static String[] PU_stdlib = {"BinaryIn", "BinaryOut", "BinaryStdIn", "BinaryStdOut", + "Copy", "Draw", "DrawListener", "In", "InTest", + "Out", "Picture", "StdArrayIO", "StdAudio", + "StdDraw", "StdDraw3D", "StdIn", "StdInTest", + "StdOut", "StdRandom", "StdStats", "Stopwatch", "Stack", "Queue", "ST", "Point", "ST"}; + + // input format: [package.]ClassName:lineno or [package.]ClassName + public boolean in_builtin_package(String S) { + S = S.split(":")[0]; + for (String badPrefix: builtin_packages) + if (S.startsWith(badPrefix+".")) + return true; + for (String badClass: PU_stdlib) { + if (S.equals(badClass)) + return true; + if (S.startsWith(badClass+"$")) + return true; + } + return false; + } + + private boolean showFramesInLocation(Location loc) { + return (!in_builtin_package(loc.toString()) + && !loc.method().name().contains("$access")); + // skip synthetic accessor methods + } + + private boolean showGuts(ReferenceType rt) { + return (rt.name().matches("(^|\\.)Point") || + !in_builtin_package(rt.name())); + } + + public boolean reportEventsAtLocation(Location loc) { + if (in_builtin_package(loc.toString())) + return false; + + if (loc.toString().contains("$$Lambda$")) + return false; + + if (loc.lineNumber() <= 0) { + userlog(loc.toString()); + return true; + } + + return true; + } + + private JsonObject createReturnEventFrom(Location loc, JsonObject base_ep, JsonValue returned) { + try { + JsonObjectBuilder result = Json.createObjectBuilder(); + result.add("event", "return"); + result.add("line", loc.lineNumber()); + for (Map.Entry me : base_ep.entrySet()) { + if (me.getKey().equals("event") || me.getKey().equals("line")) + {} + else if (me.getKey().equals("stack_to_render")) { + JsonArray old_stack_to_render = (JsonArray)me.getValue(); + JsonObject old_top_frame = (JsonObject)(old_stack_to_render.get(0)); + JsonObject old_top_frame_vars = (JsonObject)(old_top_frame.get("encoded_locals")); + JsonArray old_top_frame_vars_o = (JsonArray)(old_top_frame.get("ordered_varnames")); + result.add("stack_to_render", + jsonModifiedArray(old_stack_to_render, 0, + jsonModifiedObject + (jsonModifiedObject + (old_top_frame, + "encoded_locals", + jsonModifiedObject(old_top_frame_vars, "__return__", returned)), + "ordered_varnames", + jsonModifiedArray(old_top_frame_vars_o, -1, jsonString("__return__"))))); + } + else result.add(me.getKey(), me.getValue()); + } + return result.build(); + } + catch (IndexOutOfBoundsException exc) { + return base_ep; + } + } + + // issue: the frontend uses persistent frame ids but JDI doesn't provide them + // approach 1, trying to compute them, seems intractable (esp. w/ callbacks) + // approach 2, using an id based on stack depth, does not work w/ frontend + // approach 3, just give each frame at each execution point a unique id, + // is what we do. but we also want to skip animating e.p.'s where nothing changed, + // and if only the frame ids changed, we should treat it as if nothing changed + private boolean reallyChanged(JsonObject old_ep, JsonObject new_ep) { + if (old_ep == null) return true; + return !stripFrameIDs(new_ep).equals(stripFrameIDs(old_ep)); + } + + private JsonObject stripFrameIDs(JsonObject ep) { + JsonArrayBuilder result = Json.createArrayBuilder(); + for (JsonValue frame : (JsonArray)(ep.get("stack_to_render"))) { + result.add(jsonModifiedObject + (jsonModifiedObject( (JsonObject)frame, + "unique_hash", + jsonString("")), + "frame_id", + jsonInt(0))); + } + return jsonModifiedObject(ep, "stack_to_render", result.build()); + } + + private JsonObjectBuilder convertFrame(StackFrame sf, boolean highlight, JsonValue returnValue) { + JsonObjectBuilder result = Json.createObjectBuilder(); + JsonArrayBuilder result_ordered = Json.createArrayBuilder(); + if (sf.thisObject() != null) { + result.add("this", convertValue(sf.thisObject())); + result_ordered.add("this"); + } + + // list args first + /* KNOWN ISSUE: + .arguments() gets the args which have names in LocalVariableTable, + but if there are none, we get an IllegalArgExc, and can use .getArgumentValues() + However, sometimes some args have names but not all. Such as within synthetic + lambda methods like "lambda$inc$0". For an unknown reason, trying .arguments() + causes a JDWP error in such frames. So sadly, those frames are incomplete. */ + + boolean JDWPerror = false; + try { + sf.getArgumentValues(); + } + catch (com.sun.jdi.InternalException e) { + if (e.toString().contains("Unexpected JDWP Error: 35")) // expect JDWP error 35 + JDWPerror = true; + else { + throw e; + } + } + + List frame_vars = null, frame_args = null; + boolean completed_args = false; + try { + // args make sense to show first + frame_args = sf.location().method().arguments(); //throwing statement + completed_args = !JDWPerror && frame_args.size() == sf.getArgumentValues().size(); + for (LocalVariable lv : frame_args) { + //System.out.println(sf.location().method().getClass()); + if (lv.name().equals("args")) { + Value v = sf.getValue(lv); + if (v instanceof ArrayReference && ((ArrayReference)v).length()==0) continue; + } + try { + result.add(lv.name(), + convertValue(sf.getValue(lv))); + result_ordered.add(lv.name()); + } + catch (IllegalArgumentException exc) { + System.out.println("That shouldn't happen!"); + } + } + } + catch (AbsentInformationException e) { + } + // args did not have names, like a functional interface call... + // although hopefully a future Java version will give them names! + if (!completed_args && !JDWPerror) { + try { + List anon_args = sf.getArgumentValues(); + for (int i=0; i orderByHash = null; + int offset = 0; + for (LocalVariable lv : frame_vars) + if (!lv.isArgument()) + if (showAllFields || !lv.name().endsWith("$")) { // skip for-loop synthetics (exists in Java 7, but not 8) + try { + result.add(lv.name(), + convertValue(sf.getValue(lv))); + if (orderByHash == null) { + offset = lv.hashCode(); + orderByHash = new TreeMap<>(); + } + orderByHash.put(lv.hashCode() - offset, lv.name()); + } + catch (IllegalArgumentException exc) { + // variable not yet defined, don't list it + } + } + if (orderByHash != null) // maybe no local vars + for (Map.Entry me : orderByHash.entrySet()) + result_ordered.add(me.getValue()); + } + catch (AbsentInformationException ex) { + //System.out.println("AIE: can't list variables in " + sf.location()); + } + if (returnValue != null && (showVoid || returnValue != convertVoid)) { + result.add("__return__", returnValue); + result_ordered.add("__return__"); + } + return Json.createObjectBuilder() + .add("func_name", sf.location().method().name()+":"+sf.location().lineNumber()) + .add("encoded_locals", result) + .add("ordered_varnames", result_ordered) + .add("parent_frame_id_list", Json.createArrayBuilder()) + .add("is_highlighted", highlight)//frame_stack.size()-1) + .add("is_zombie", false) + .add("is_parent", false) + .add("unique_hash", ""+frame_ticker)//frame_stack.get(level)) + .add("frame_id", frame_ticker);//frame_stack.get(level)); + } + + // used to show a single non-user frame when there is + // non-user code running between two user frames + private JsonObjectBuilder convertFrameStub(StackFrame sf) { + return Json.createObjectBuilder() + .add("func_name", "\u22EE\n"+sf.location().declaringType().name()+"."+sf.location().method().name()) + .add("encoded_locals", Json.createObjectBuilder())//.add("...", "...")) + .add("ordered_varnames", Json.createArrayBuilder())//.add("...")) + .add("parent_frame_id_list", Json.createArrayBuilder()) + .add("is_highlighted", false)//frame_stack.size()-1) + .add("is_zombie", false) + .add("is_parent", false) + .add("unique_hash", ""+frame_ticker)//frame_stack.get(level)) + .add("frame_id", frame_ticker);//frame_stack.get(level)); + } + + void convertHeap(JsonObjectBuilder result) { + heap_done = new java.util.TreeSet<>(); + while (!heap.isEmpty()) { + Map.Entry first = heap.firstEntry(); + ObjectReference obj = first.getValue(); + long id = first.getKey(); + heap.remove(id); + if (heap_done.contains(id)) + continue; + heap_done.add(id); + result.add(""+id, convertObject(obj, true)); + } + } + + List wrapperTypes = + new ArrayList + (Arrays.asList + ("Byte Short Integer Long Float Double Character Boolean".split(" "))); + + private JsonValue convertObject(ObjectReference obj, boolean fullVersion) { + if (showStringsAsValues && obj.referenceType().name().startsWith("java.lang.") + && wrapperTypes.contains(obj.referenceType().name().substring(10))) { + return convertValue(obj.getValue(obj.referenceType().fieldByName("value"))); + } + + JsonArrayBuilder result = Json.createArrayBuilder(); + + // abbreviated versions are for references to objects + if (!fullVersion) { + result.add("REF").add(obj.uniqueID()); + heap.put(obj.uniqueID(), obj); + return result.build(); + } + + // full versions are for describing the objects themselves, + // in the heap + + else if (obj instanceof ArrayReference) { + ArrayReference ao = (ArrayReference)obj; + int L = ao.length(); + result.add("LIST"); + heap_done.add(obj.uniqueID()); + + class Help { + // is it a zero integer? + boolean isz(Value v) { + return v instanceof IntegerValue && ((IntegerValue)v).intValue() == 0; + } + } + Help help = new Help(); + + + for (int i=0; i= 4) { + result.add(convertValue(ao.getValue(i))); + result.add(Json.createArrayBuilder().add("ELIDE").add(j-i-2)); + result.add(convertValue(ao.getValue(j-1))); + } + else for (int k=i; k 0) { + Field first = rt.fieldByName("first"); + ObjectReference thisNode = (ObjectReference)obj.getValue(first); + ReferenceType nodeRT = thisNode.referenceType(); + Field val = nodeRT.fieldByName("item"); + Field next = nodeRT.fieldByName("next"); + for (int i = 0; i < queueLength; i++) { + Value v = thisNode.getValue(val); + result.add(convertValue(v)); + thisNode = (ObjectReference) thisNode.getValue(next); + } + } + return result.build(); + } + + if (obj.referenceType().name().equals("Stack")) { + heap_done.add(obj.uniqueID()); + ReferenceType rt = obj.referenceType(); + Field length = rt.fieldByName("N"); + int queueLength = ((IntegerValue)obj.getValue(length)).value(); + result.add("STACK"); + if (queueLength > 0) { + Field first = rt.fieldByName("first"); + ObjectReference thisNode = (ObjectReference)obj.getValue(first); + ReferenceType nodeRT = thisNode.referenceType(); + Field val = nodeRT.fieldByName("item"); + Field next = nodeRT.fieldByName("next"); + for (int i = 0; i < queueLength; i++) { + Value v = thisNode.getValue(val); + result.add(convertValue(v)); + thisNode = (ObjectReference) thisNode.getValue(next); + } + } + return result.build(); + } + + // st handling code by Will Gwozdz + if (obj.referenceType().name().equals("ST")) { + heap_done.add(obj.uniqueID()); + ReferenceType rt = obj.referenceType(); + result.add("DICT"); + Field first = rt.fieldByName("first"); + ObjectReference firstNode = (ObjectReference)obj.getValue(first); + + class stHandler { + public void loadResultFromSymbolTree(ObjectReference n, JsonArrayBuilder result) { + if (n == null) + return; + ReferenceType nt = n.referenceType(); + Field left = nt.fieldByName("left"); + Field right = nt.fieldByName("right"); + Field key = nt.fieldByName("key"); + Field value = nt.fieldByName("value"); + //System.out.println(n.uniqueID()); + loadResultFromSymbolTree((ObjectReference)n.getValue(left), result); + if (n.getValue(value) != null) { + result.add(Json.createArrayBuilder().add(convertValue(n.getValue(key))) + .add(convertValue(n.getValue(value))).build()); + } + loadResultFromSymbolTree((ObjectReference)n.getValue(right), result); + } + } + + new stHandler().loadResultFromSymbolTree(firstNode, result); //recursively add key, value pairs to the result + return result.build(); + } + + // now deal with Objects. + heap_done.add(obj.uniqueID()); + result.add("INSTANCE"); + if (obj.referenceType().name().startsWith("java.lang.") + && wrapperTypes.contains(obj.referenceType().name().substring(10))) { + result.add(obj.referenceType().name().substring(10)); + result.add(jsonArray("___NO_LABEL!___",//jsonArray("NO-LABEL"), // don't show a label or label cell for wrapper instance field + convertValue(obj.getValue(obj.referenceType().fieldByName("value"))))); + } + else { + String fullName = obj.referenceType().name(); + if (fullName.indexOf("$") > 0) { + // inner, local, anonymous or lambda class + if (fullName.contains("$$Lambda")) { + fullName = "λ" + fullName.substring(fullName.indexOf("$$Lambda")+9); // skip $$lambda$ + try { + String interf = ((ClassType)obj.referenceType()).interfaces().get(0).name(); + if (interf.startsWith("java.util.function.")) + interf = interf.substring(19); + + fullName += " ["+interf+"]"; + } + catch (Exception e) {} + } + // more cases here? + else { + fullName=fullName.substring(1+fullName.indexOf('$')); + if (fullName.matches("[0-9]+")) + fullName = "anonymous class " + fullName; + else if (fullName.substring(0, 1).matches("[0-9]+")) + fullName = "local class " + fullName.substring(1); + } + } + result.add(fullName); + } + if (showGuts(obj.referenceType())) { + // fields: -inherited -hidden +synthetic + // visibleFields: +inherited -hidden +synthetic + // allFields: +inherited +hidden +repeated_synthetic + for (Map.Entry me : + obj.getValues + ( + showAllFields ? + obj.referenceType().allFields() : + obj.referenceType().visibleFields() ) + .entrySet() + ) { + if (!me.getKey().isStatic() + && (showAllFields || !me.getKey().isSynthetic()) + ) + result.add(Json.createArrayBuilder() + .add + (( + showAllFields ? + me.getKey().declaringType().name()+"." : + "" + )+me.getKey().name()) + .add(convertValue(me.getValue()))); + } + } + else if (obj.referenceType().name().equals("Stopwatch")) { + ReferenceType rt = obj.referenceType(); + Field f = rt.fieldByName("startString"); + result.add(Json.createArrayBuilder().add("started at").add( + Json.createArrayBuilder().add("NUMBER-LITERAL").add( + convertValue(obj.getValue(f))))); + } + return result.build(); + } + } + + private JsonArray convertVoid = jsonArray("VOID"); + + private JsonArray jsonArray(Object... args) { + JsonArrayBuilder result = Json.createArrayBuilder(); + for (Object o : args) { + if (o instanceof JsonValue) + result.add((JsonValue)o); + else if (o instanceof String) + result.add((String)o); + else throw new RuntimeException("Add more cases to JDI2JSON.jsonArray(Object...)"); + } + return result.build(); + } + + private JsonValue convertValue(Value v) { + if (v instanceof BooleanValue) { + if (((BooleanValue)v).value()==true) + return JsonValue.TRUE; + else + return JsonValue.FALSE; + } + else if (v instanceof ByteValue) return jsonInt(((ByteValue)v).value()); + else if (v instanceof ShortValue) return jsonInt(((ShortValue)v).value()); + else if (v instanceof IntegerValue) return jsonInt(((IntegerValue)v).value()); + // some longs can't be represented as doubles, they won't survive the json conversion + else if (v instanceof LongValue) return jsonArray("NUMBER-LITERAL", jsonString(""+((LongValue)v).value())); + // floats who hold integer values will end up as integers after json conversion + // also, this lets us pass "Infinity" and other IEEE non-numbers + else if (v instanceof FloatValue) return jsonArray("NUMBER-LITERAL", jsonString(""+((FloatValue)v).value())); + else if (v instanceof DoubleValue) return jsonArray("NUMBER-LITERAL", jsonString(""+((DoubleValue)v).value())); + else if (v instanceof CharValue) return jsonArray("CHAR-LITERAL", jsonString(((CharValue)v).value()+"")); + else if (v instanceof VoidValue) return convertVoid; + else if (!(v instanceof ObjectReference)) return JsonValue.NULL; //not a hack + else if (showStringsAsValues && v instanceof StringReference) + return jsonString(((StringReference)v).value()); + else { + ObjectReference obj = (ObjectReference)v; + heap.put(obj.uniqueID(), obj); + return convertObject(obj, false); + } + } + + static JsonObject compileErrorOutput(String usercode, String errmsg, long row, long col) { + return output(usercode, + Json.createArrayBuilder().add + (Json.createObjectBuilder() + .add("line", ""+row) + .add("event", "uncaught_exception") + .add("offset", ""+col) + .add("exception_msg", errmsg)) + .build() + ); + } + + static String fakify(String realcode) { + String[] x = realcode.split("\n", -1); + for (int i=0; i<"); + if (pos >= 0) + x[i] = x[i].substring(pos+4); + } + StringBuilder sb = new StringBuilder(); + for (String s:x) {sb.append("\n");sb.append(s);} + return sb.substring(1); + } + + static JsonObject output(String usercode, JsonArray trace) { + JsonObjectBuilder result = Json.createObjectBuilder(); + result + .add("code", fakify(usercode)) + .add("stdin", InMemory.stdin) + .add("trace", trace); + if (userlogged != null) result.add("userlog", userlogged.toString()); + return result.build(); + } + + String exceptionMessage(ExceptionEvent event) { + ObjectReference exc = event.exception(); + ReferenceType excType = exc.referenceType(); + try { + // this is the logical approach, but gives "Unexpected JDWP Error: 502" in invokeMethod + // even if we suspend-and-resume the thread t + /*ThreadReference t = event.thread(); + Method mm = excType.methodsByName("getMessage").get(0); + t.suspend(); + Value v = exc.invokeMethod(t, mm, new ArrayList(), 0); + t.resume(); + StringReference sr = (StringReference) v; + String detail = sr.value();*/ + + // so instead we just look for the longest detailMessage + String detail = ""; + for (Field ff: excType.allFields()) + if (ff.name().equals("detailMessage")) { + StringReference sr = (StringReference) exc.getValue(ff); + String thisMsg = sr == null ? null : sr.value(); + if (thisMsg != null && thisMsg.length() > detail.length()) + detail = thisMsg; + } + + if (detail.equals("")) + return excType.name(); // NullPointerException has no detail msg + + return excType.name()+": "+detail; + } + catch (Exception e) { + System.out.println("Failed to convert exception"); + System.out.println(e); + e.printStackTrace(System.out); + for (Field ff : excType.visibleFields()) + System.out.println(ff); + return "fail dynamic message lookup"; + } + } + + + + /* JSON utility methods */ + + static JsonValue jsonInt(long l) { + return Json.createArrayBuilder().add(l).build().getJsonNumber(0); + } + + static JsonValue jsonReal(double d) { + return Json.createArrayBuilder().add(d).build().getJsonNumber(0); + } + + static JsonValue jsonString(String S) { + return Json.createArrayBuilder().add(S).build().getJsonString(0); + } + + static JsonObject jsonModifiedObject(JsonObject obj, String S, JsonValue v) { + JsonObjectBuilder result = Json.createObjectBuilder(); + result.add(S, v); + for (Map.Entry me : obj.entrySet()) { + if (!S.equals(me.getKey())) + result.add(me.getKey(), me.getValue()); + } + return result.build(); + } + + // add at specified position, or end if -1 + static JsonArray jsonModifiedArray(JsonArray arr, int tgt, JsonValue v) { + JsonArrayBuilder result = Json.createArrayBuilder(); + int i = 0; + for (JsonValue w : arr) { + if (i == tgt) result.add(v); + else result.add(w); + i++; + } + if (tgt == -1) + result.add(v); + return result.build(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/JSONTracingThread.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/JSONTracingThread.java new file mode 100644 index 000000000..009881d4f --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/JSONTracingThread.java @@ -0,0 +1,323 @@ +/***************************************************************************** + +traceprinter: a Java package to print traces of Java programs +David Pritchard (daveagp@gmail.com), created May 2013 + +The contents of this directory are released under the GNU Affero +General Public License, versions 3 or later. See LICENSE or visit: +http://www.gnu.org/licenses/agpl.html + +See README for documentation on this package. + +This file was originally based on +com.sun.tools.example.trace.EventThread, written by Robert Field. + +******************************************************************************/ + +package traceprinter; + +import com.sun.jdi.*; +import com.sun.jdi.request.*; +import com.sun.jdi.event.*; + +import java.util.*; +import java.io.*; +import javax.json.*; + +/* + * Original author: Robert Field, see + * + * This version: David Pritchard (http://dave-pritchard.net) + */ + +public class JSONTracingThread extends Thread { + + private final VirtualMachine vm; // Running VM + private String[] no_breakpoint_requests = {"java.*", "javax.*", "sun.*", "com.sun.*", "Stack", "Queue", "ST", + "jdk.internal.org.objectweb.asm.*" // for creating lambda classes + }; + + private boolean connected = true; // Connected to VM + private boolean vmDied = true; // VMDeath occurred + + private EventRequestManager mgr; + + private JDI2JSON jdi2json; + + static int MAX_STEPS = 256; + + static double MAX_WALLTIME_SECONDS = 15; // modified by pgbovine + + private int steps = 0; + + static int MAX_STACK_SIZE = 16; + + private String usercode; + + private InMemory im; + + private VMCommander vmc; + + private JsonArrayBuilder output = Json.createArrayBuilder(); + + JSONTracingThread(InMemory im) { + super("event-handler"); + this.vm = im.vm; + this.im = im; + this.usercode = im.usercode; + mgr = vm.eventRequestManager(); + jdi2json = new JDI2JSON(vm, + vm.process().getInputStream(), + vm.process().getErrorStream(), + im.optionsObject); + setEventRequests(); + } + + void setEventRequests() { + ExceptionRequest excReq = mgr.createExceptionRequest(null, true, true); + excReq.setSuspendPolicy(EventRequest.SUSPEND_ALL); + for (String clob : no_breakpoint_requests) + excReq.addClassExclusionFilter(clob); + excReq.enable(); + + MethodEntryRequest menr = mgr.createMethodEntryRequest(); + for (String clob : no_breakpoint_requests) + menr.addClassExclusionFilter(clob); + menr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD); + menr.enable(); + + MethodExitRequest mexr = mgr.createMethodExitRequest(); + for (String clob : no_breakpoint_requests) + mexr.addClassExclusionFilter(clob); + mexr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD); + mexr.enable(); + + ThreadDeathRequest tdr = mgr.createThreadDeathRequest(); + tdr.setSuspendPolicy(EventRequest.SUSPEND_ALL); + tdr.enable(); + + ClassPrepareRequest cpr = mgr.createClassPrepareRequest(); + for (String clob : no_breakpoint_requests) + cpr.addClassExclusionFilter(clob); + cpr.setSuspendPolicy(EventRequest.SUSPEND_ALL); + cpr.enable(); + } + + @Override + public void run() { + StepRequest request = null; + final EventQueue queue = vm.eventQueue(); + while (connected) { + try { + final EventSet eventSet = queue.remove(); + for (Event ev : new Iterable(){public Iterator iterator(){return eventSet.eventIterator();}}) { + + + //System.out.println("in run: " + steps+" "+ev+" "+(System.currentTimeMillis()-startTime)); + + // System.out.println(currentTimeMillis()); + if (System.currentTimeMillis() > MAX_WALLTIME_SECONDS * 1000 + InMemory.startTime) { + output.add(Json.createObjectBuilder() + .add("exception_msg", "") + .add("event", "instruction_limit_reached")); + + try { + PrintStream out = new PrintStream(System.out, true, "UTF-8"); + String outputString = JDI2JSON.output(usercode, output.build()).toString(); + out.print(outputString); + } catch (UnsupportedEncodingException e) { + System.out.print("UEE"); + } + System.exit(0); + vm.exit(0); // might take a long time + } + + + handleEvent(ev); + if (request != null && request.isEnabled()) { + request.disable(); + } + if (request != null) { + mgr.deleteEventRequest(request); + request = null; + } + if (ev instanceof LocatableEvent && + jdi2json.reportEventsAtLocation(((LocatableEvent)ev).location()) + || + (ev.toString().contains("NoopMain"))) + { + request = mgr. + createStepRequest(((LocatableEvent)ev).thread(), + StepRequest.STEP_MIN, + StepRequest.STEP_INTO); + request.addCountFilter(1); // next step only + request.enable(); + } + } + eventSet.resume(); + } catch (InterruptedException exc) { + exc.printStackTrace(); + // Ignore + } catch (VMDisconnectedException discExc) { + handleDisconnectedException(); + break; + } + } + String outputString = null; + try { + if (vmc == null) { + outputString = JDI2JSON.compileErrorOutput(usercode, "Internal error: there was an error starting the debuggee VM.", 0, 0).toString(); + } + else { + vmc.join(); + if (vmc.success == null) { + outputString = JDI2JSON.compileErrorOutput(usercode, "Success is null?", 0, 0).toString(); + } + else if (vmc.success == false) { + outputString = JDI2JSON.compileErrorOutput(usercode, vmc.errorMessage, 1, 1).toString(); + } + else { + outputString = JDI2JSON.output(usercode, output.build()).toString(); + } + } + } + catch (Exception e) { + e.printStackTrace(System.out); + } + + try { + PrintStream out = new PrintStream(System.out, true, "UTF-8"); + out.print(outputString); + } catch (UnsupportedEncodingException e) { + System.out.print(outputString); + } + } + + ThreadReference theThread = null; + + private Thread handleEvent(Event event) { + //System.out.println(event); + if (event instanceof ClassPrepareEvent) { + classPrepareEvent((ClassPrepareEvent)event); + } else if (event instanceof VMDeathEvent) { + vmDeathEvent((VMDeathEvent)event); + } else if (event instanceof VMDisconnectEvent) { + vmDisconnectEvent((VMDisconnectEvent)event); + } + + if (event instanceof LocatableEvent) { + //System.out.println("in handle subloop: " + steps+" "+event); + if (theThread == null) + theThread = ((LocatableEvent)event).thread(); + else { + if (theThread != ((LocatableEvent)event).thread()) + throw new RuntimeException("Assumes one thread!"); + } + Location loc = ((LocatableEvent)event).location(); + try { + if (loc.sourceName().equals("NoopMain.java") && steps == 0) { + steps++; + vmc = new VMCommander(im, theThread); + vmc.start(); + } + } catch (AbsentInformationException e) {} + + if (steps < MAX_STEPS && jdi2json.reportEventsAtLocation(loc) + || event instanceof ExceptionEvent && ((ExceptionEvent)event).catchLocation()==null) { + try { + for (JsonObject ep : jdi2json.convertExecutionPoint(event, loc, theThread)) { + output.add(ep); + steps++; + int stackSize = ((JsonArray)ep.get("stack_to_render")).size(); + + boolean quit = false; + if (stackSize >= MAX_STACK_SIZE) { + output.add(Json.createObjectBuilder() + .add("exception_msg", "") + .add("event", "instruction_limit_reached")); + quit = true; + } + if (steps == MAX_STEPS) { + output.add(Json.createObjectBuilder() + .add("exception_msg", "") + .add("event", "instruction_limit_reached")); + quit = true; + } + if (quit) + vm.exit(0); + } + if (event instanceof ExceptionEvent && ((ExceptionEvent)event).catchLocation()==null) { + vm.exit(0); + } + } catch (RuntimeException e) { + System.out.println("Error " + e.toString()); + e.printStackTrace(); + } + } + } + return null; + } + + /*** + * A VMDisconnectedException has happened while dealing with + * another event. We need to flush the event queue, dealing only + * with exit events (VMDeath, VMDisconnect) so that we terminate + * correctly. + */ + synchronized void handleDisconnectedException() { + EventQueue queue = vm.eventQueue(); + while (connected) { + try { + EventSet eventSet = queue.remove(); + EventIterator iter = eventSet.eventIterator(); + while (iter.hasNext()) { + Event event = iter.nextEvent(); + if (event instanceof VMDeathEvent) { + vmDeathEvent((VMDeathEvent)event); + } else if (event instanceof VMDisconnectEvent) { + vmDisconnectEvent((VMDisconnectEvent)event); + } + } + eventSet.resume(); // Resume the VM + } catch (InterruptedException exc) { + // ignore + } + } + } + + private void classPrepareEvent(ClassPrepareEvent event) { + //System.out.println("CPE!"); + ReferenceType rt = event.referenceType(); + + if (!rt.name().equals("traceprinter.shoelace.NoopMain")) { + if (rt.name().equals("StdIn")) + jdi2json.stdinRT = rt; + + if (jdi2json.in_builtin_package(rt.name())) + return; + } + + jdi2json.staticListable.add(rt); + + //System.out.println(rt.name()); + try { + for (Location loc : rt.allLineLocations()) { + BreakpointRequest br = mgr.createBreakpointRequest(loc); + br.enable(); + } + } + catch (AbsentInformationException e) { + if (!rt.name().contains("$Lambda$")) + System.out.println("AIE!" + rt.name()); + } + } + + public void vmDeathEvent(VMDeathEvent event) { + vmDied = true; + } + + public void vmDisconnectEvent(VMDisconnectEvent event) { + connected = false; + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/LICENSE b/v4-cokapi/backends/java/java_jail/cp/traceprinter/LICENSE new file mode 100644 index 000000000..2def0e883 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/MEMORY-NOTES b/v4-cokapi/backends/java/java_jail/cp/traceprinter/MEMORY-NOTES new file mode 100644 index 000000000..b0e6476d2 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/MEMORY-NOTES @@ -0,0 +1,75 @@ +These are notes from when I tried to try to figure out how much +memory is needed to run the java visualizer within a safeexec jail. +I created these notes in summer 2013 but didn't post them until +January 2014. Read them at your discretion. -- Dave Pritchard + +Memory usage, part 1 +==================== +By default, java may use a lot of memory. You can, sort of, try to +control it. Here are the defaults on my machine: + +./java -XX:+PrintFlagsFinal -version | pcregrep "\b(MaxHeapSize|InitialHeapSize|ThreadStackSize)" + +prints the output + + uintx InitialHeapSize := 130770560 {product} + uintx MaxHeapSize := 2092957696 {product} + intx ThreadStackSize = 1024 {pd product} + +which means that the heap uses 124M initially and 2G at maximum. + +You can control MaxHeapSize with "java -Xmx" (this is the most +important for us) and the other two above with -Xms, -Xss. + +How much memory does Java actually use? How much can the user +actually access? There is naturally some overhead between these two +numbers, for the stuff running the VM, and for the default class +files and stuff inside the VM. You can write + + long maxBytes = Runtime.getRuntime().maxMemory(); + System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M"); + +I am not sure which of the controlling and reporting numbers +correspond to user or user+VM memory. But as an example, for me, if +I run java with -Xmx1024M, then the above reports "Max memory: +910M", while the largest int[] that Java will let me allocate is +about new int[175_000_000] (or about 7*10^8 bytes ~ 667M). + +Memory usage, part 2 +==================== +The way that traceprinter works, we actually have two VMs. One is +the debugger, which is started first, and whose -Xmx setting is +done by the command-line (or whoever calls java +traceprinter.InMemory). The second, debugee, VM has its -Xmx set +according to the options string used by LaunchingConnector.launch() +in InMemory.launchVM. + +The -Xmx used for one VM affects only that machine, and does not +affect the -Xmx for the other machine, as far as I can tell from +testing. + +What is a reasonable setting for the maximum memory of our two +machines? My system default, 2GB, seems a little excessive. All of +the visualizer examples run with -Xmx128M on both VMs, so I am +using this for now. (This gives the user about 80M of usable space, +using the new int[] test.) + +Memory usage, part 3 +==================== +Now let's consider the fact that we want to run all of this under +safeexec. On my machine, it appears that the limits enforced by +safeexec successfully limit the sum of the memories used by both +VMs. So the --mem option for safeexec must be at least 256*1024 K. +However, there seems to be more overhead somewhere along the line, +as, + +safeexec --mem 300000 gives "Could not create the Java Virtual Machine" + +safeexec --mem 400000 gives "# There is insufficient memory for the Java Runtime Environment to continue" + (on safeexec's stdout) + and/or "Command terminated by signal (6: SIGABRT)" + (on safeexec's stderr) + +while + +safeexec --mem 500000 seems to work without any problems. diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/README b/v4-cokapi/backends/java/java_jail/cp/traceprinter/README new file mode 100644 index 000000000..f6fdc6859 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/README @@ -0,0 +1,55 @@ +traceprinter: a Java package to print traces of Java programs +David Pritchard (daveagp@gmail.com), created May 2013 + +The contents of this directory are released under the GNU Affero +General Public License, versions 3 or later. See LICENSE or visit: +http://www.gnu.org/licenses/agpl.html + +This project would not be possible without the package +com.sun.tools.example.trace, written by Robert Field. +http://www.docjar.com/docs/api/com/sun/tools/example/trace/package-index.html +The traceprinter package was initially created from that package. + +Try the visualizer this was built for: + http://cscircles.cemc.uwaterloo.ca/java-visualize/ + +=== +NEWS + +A big update on June 11 2013 makes everything compile and execute in memory, +so no writing to the file system is needed, and no considerations for +simultaneous users are necessary. + +=== +WHAT DOES THIS PACKAGE DO AND WHAT DOES IT CONTAIN? + +traceprinter.InMemory: the main class. It takes java file source code + from standard input. Then it outputs a text (JSON) + version of what the program didwhen executed. + +The output format is described here: + https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/docs/opt-trace-format.md +This allows us to use the javascript frontend from OnlinePythonTutor +to visualize Java instead of Python. + +traceprinter.ramtools: compiles the java files to bytecode in memory. + +Then, InMemory uses the JDI to start a debuggee JVM, load the bytecode into +it, and then execute it. + +traceprinter.VMCommander: drives injection and execution into debuggee. + +traceprinter.shoelace: contains all fixed code run by the debugee JVM. + +traceprinter.JSONTracingThread: event handling loop. + +traceprinter.JDI2JSON: used to convert everything to text output. + +=== +FLOW OF EXECUTION + +InMemory will get things started, and passes the ball briefly to +JSONTracingThread. But once the debuggee takes it first step, the +VMCommander drives the execution of the debuggee VM. Again, the +code it causes to run, will drive the event loop in JSONTracingThread +some more, which in turn uses JDI2JSON to output things nicely. diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/TODO b/v4-cokapi/backends/java/java_jail/cp/traceprinter/TODO new file mode 100644 index 000000000..d211b9ae7 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/TODO @@ -0,0 +1,5 @@ +progressive Python labels: "Frames" only if more than one, "Objects" only if any, "Global" in variables only if function calls +custom visualizations of Integer, Stack<>, ... ? +options for visualizing synthetics? +allow to reflow visualizer parts (already partly done?) +caching executions \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/VMCommander.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/VMCommander.java new file mode 100644 index 000000000..e03687463 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/VMCommander.java @@ -0,0 +1,164 @@ +/***************************************************************************** + +traceprinter: a Java package to print traces of Java programs +David Pritchard (daveagp@gmail.com), created May 2013 + +The contents of this directory are released under the GNU Affero +General Public License, versions 3 or later. See LICENSE or visit: +http://www.gnu.org/licenses/agpl.html + +See README for documentation on this package. + +******************************************************************************/ + +package traceprinter; + +import com.sun.jdi.*; +import java.util.*; + +public class VMCommander extends Thread { + + private InMemory im; + private ThreadReference tr; + private VirtualMachine vm; + private Map classesToLoad; + private String mainClassName; + + private ClassType ClassLoader_; + private ObjectReference ClassLoader_SystemClassLoader; + + Boolean success; + String errorMessage; + + public VMCommander(InMemory im, ThreadReference tr) { + this.im = im; + this.tr = tr; + this.vm = im.vm; + this.classesToLoad = im.bytecode; + this.mainClassName = im.mainClass; + } + + ObjectReference VMCommandee_instance = null; + public void run() { + try { + vm.suspend(); + + // first, make instance of ByteClassLoader + ClassLoader_ = classType("java.lang.ClassLoader"); + ClassLoader_SystemClassLoader = (ObjectReference) + call_s(ClassLoader_, "getSystemClassLoader"); + + ObjectReference ByteClassLoader_instance = instantiate("traceprinter.shoelace.ByteClassLoader"); + + // load the classes from their bytecodes + for (Map.Entry me : classesToLoad.entrySet()) + call_i(ByteClassLoader_instance, "define", vm.mirrorOf(me.getKey()), mirrorOf(vm, me.getValue())); + + // load and instantiate Commandee. very similar to above! + VMCommandee_instance = instantiate("traceprinter.shoelace.VMCommandee"); + + ArrayReference mirrorOfArgs = newArray("java.lang.String", im.argsArray.size()); + for (int i=0; i lv(Value... vs) { + return Arrays.asList(vs); + } + + private ArrayReference mirrorOf(VirtualMachine vm, byte[] bytes) + throws InvalidTypeException, ClassNotLoadedException { + ArrayReference result = newArray("byte", bytes.length); + for (int i=0; i < bytes.length; i++) + result.setValue(i, vm.mirrorOf(bytes[i])); + return result; + } + + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/expected-output.txt b/v4-cokapi/backends/java/java_jail/cp/traceprinter/expected-output.txt new file mode 100644 index 000000000..f9ec4072a --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/expected-output.txt @@ -0,0 +1 @@ +{"code":"public class Test { public static void main(String[] args) { int x = 3; x += x; } }","trace":[{"stdout":"","event":"call","line":1,"stack_to_render":[{"func_name":"main:1","encoded_locals":{"args":["REF",392]},"ordered_varnames":["args"],"parent_frame_id_list":[],"is_highlighted":true,"is_zombie":false,"is_parent":false,"unique_hash":"1","frame_id":1}],"globals":{},"ordered_globals":[],"func_name":"main","heap":{"392":["LIST"]}},{"stdout":"","event":"step_line","line":1,"stack_to_render":[{"func_name":"main:1","encoded_locals":{"args":["REF",392]},"ordered_varnames":["args"],"parent_frame_id_list":[],"is_highlighted":true,"is_zombie":false,"is_parent":false,"unique_hash":"2","frame_id":2}],"globals":{},"ordered_globals":[],"func_name":"main","heap":{"392":["LIST"]}},{"stdout":"","event":"step_line","line":1,"stack_to_render":[{"func_name":"main:1","encoded_locals":{"args":["REF",392],"x":3},"ordered_varnames":["args","x"],"parent_frame_id_list":[],"is_highlighted":true,"is_zombie":false,"is_parent":false,"unique_hash":"4","frame_id":4}],"globals":{},"ordered_globals":[],"func_name":"main","heap":{"392":["LIST"]}},{"stdout":"","event":"step_line","line":1,"stack_to_render":[{"func_name":"main:1","encoded_locals":{"args":["REF",392],"x":6},"ordered_varnames":["args","x"],"parent_frame_id_list":[],"is_highlighted":true,"is_zombie":false,"is_parent":false,"unique_hash":"8","frame_id":8}],"globals":{},"ordered_globals":[],"func_name":"main","heap":{"392":["LIST"]}},{"stdout":"","event":"return","line":1,"stack_to_render":[{"func_name":"main:1","encoded_locals":{"args":["REF",392],"x":6,"__return__":["VOID"]},"ordered_varnames":["args","x","__return__"],"parent_frame_id_list":[],"is_highlighted":true,"is_zombie":false,"is_parent":false,"unique_hash":"9","frame_id":9}],"globals":{},"ordered_globals":[],"func_name":"main","heap":{"392":["LIST"]}}],"userlog":"Debugger VM maxMemory: 1774M\n"} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/CompileToBytes.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/CompileToBytes.java new file mode 100644 index 000000000..06842b547 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/CompileToBytes.java @@ -0,0 +1,202 @@ +package traceprinter.ramtools; + +import javax.tools.*; +import java.io.*; +import java.util.*; +import javax.json.*; + +public class CompileToBytes { + + public Writer compilerOutput = null; + // a Writer for additional output from the compiler; use System.err if null + + public DiagnosticListener diagnosticListener = null; + // a diagnostic (warning, etc) listener; if null use the compiler's default method for reporting diagnostics + + public Iterable options = null; + // args[] for javac, null means no options + + public Iterable classesForAnnotation = null; + // names of classes to be processed by annotation processing, null means no class names + + public Map bytecodes; + // output variable: the class names and bytecodes generated by compiling + + private boolean used = false; + + public CompileToBytes() {} + + /*** + Compiles a single source file to bytecode. + Returns null if compilation failed (same as JavaCompiler.getTask.call => false). + Otherwise, returns bytecode for files defined as a result of compiling. + ***/ + + // takes a class name and its source code + public Map compileFile(String className, String sourceCode) { + return compileFiles(new String[][] {{className, sourceCode}}); + } + + public Map compileFiles(String[][] classCodePairs) { + if (used) throw new RuntimeException("You already used this CompileToBytes."); + used = true; + + ArrayList sourceFiles = new ArrayList<>(); + for (String[] pair : classCodePairs) + sourceFiles.add(new RAMJavaFile(pair[0], pair[1])); + + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + + RAMClassFileManager fileManager = new + RAMClassFileManager(compiler + .getStandardFileManager(null, null, null)); + + boolean result = compiler.getTask(compilerOutput, fileManager, diagnosticListener, + options, classesForAnnotation, sourceFiles).call(); + + if (!result) return null; + + bytecodes = new TreeMap<>(); + for (Map.Entry me : fileManager.contents.entrySet()) { + bytecodes.put(me.getKey(), me.getValue().getBytes()); + } + + return bytecodes; + } + + + /* main() Method. + + standard input: A Json Object (UTF-8) + - whose keys are class names (optionally package qualified with . or /) + - whose values are java source code + + Note that if there is additional data after the object, it will be silently ignored (javax.json doesn't seem to have a way to detect this) + + compiles these files (against the current classpath) + + output: A Json Object + - status: "Internal Error", "Compile-Time Error", "Success" + - if "Internal Error": errmsg: describing the internal error + - if "Compile-Time Error": error (errmsg, filename, row, col, startpos, pos, endpos) + - if "Success": bytecodes, [warning] + + bytecodes is a map from class names (possibly including . and $) to bytecodes + + */ + + /* sample StdIn: + + {"Hello":"public class Hello{public static void main(String[]args){System.out.println(\"Hello\");}}","Multi":"public class Multi{}class Extra{}","Outer":"public class Outer{public class Inner{}}","pckg.Packed":"package pckg;public class Packed{}","Anon":"public class Anon{{new Anon(){void foo(){}};}}"} + + you can also use pckg/Packed or Packed for pckg.Packed + + for a compiler error: + {"A":"public class A{{int x; x = 5.0;}}"} + + to generate a warning: + {"Warn":"public class Warn {{ Class x = (Class)Integer.class; }}"} + + */ + + + public static void main(String[] args) { + InputStreamReader isr; + try { + isr = new InputStreamReader(System.in, "UTF-8"); + } + catch (UnsupportedEncodingException e) { + System.out.println(Json + .createObjectBuilder() + .add("status", "Internal Error") + .add("errmsg", "Could not set UTF-8 encoding") + .build()); + return; + } + + String[][] pairs; + try { + JsonReader jr = Json.createReader(isr); + JsonObject sourceFiles = jr.readObject(); + pairs = new String[sourceFiles.size()][2]; + int i = 0; + for (Map.Entry pair : sourceFiles.entrySet()) { + pairs[i][0] = pair.getKey(); + if (! (pair.getValue() instanceof JsonString)) { + throw new RuntimeException("For key " + pair.getKey() + + " value is a " + + pair.getKey().getClass()+":\n"+ + pair.getKey().toString()); + } + pairs[i][1] = ((JsonString)pair.getValue()).getString(); + i++; + } + } + catch (Throwable t) { + System.out.println(Json + .createObjectBuilder() + .add("status", "Internal Error") + .add("errmsg", "Could not parse input: " + t) + .build()); + return; + } + + CompileToBytes c2b = new CompileToBytes(); + + c2b.compilerOutput = new StringWriter(); + c2b.options = Arrays.asList("-g -Xmaxerrs 1".split(" ")); + DiagnosticCollector errorCollector = new DiagnosticCollector<>(); + c2b.diagnosticListener = errorCollector; + + Map classMap = c2b.compileFiles(pairs); + + JsonObject jerr = null; + for (Diagnostic err : errorCollector.getDiagnostics()) { + jerr = Json.createObjectBuilder() + .add("filename", err.getSource().toString()) + .add("row", err.getLineNumber()) + .add("col", err.getColumnNumber()) + .add("errmsg", err.getMessage(null)) + .add("startpos", err.getStartPosition()) + .add("pos", err.getPosition()) + .add("endpos", err.getEndPosition()) + .build(); + if (err.getKind() == Diagnostic.Kind.ERROR) { + System.out.println(Json + .createObjectBuilder() + .add("status", "Compile-time Error") + .add("error", jerr) + .build()); + return; + } + } + + if (classMap == null && jerr == null) { + System.out.println(Json + .createObjectBuilder() + .add("status", "Internal Error") + .add("errmsg", "Did not compile, but gave no errors!") + .build()); + return; + } + + JsonObjectBuilder classFiles = Json.createObjectBuilder(); + for (Map.Entry pair : classMap.entrySet()) { + byte[] bytes = pair.getValue(); + char[] hexEncoding = new char[bytes.length*2]; + char[] hexArray = "0123456789ABCDEF".toCharArray(); + for (int i = 0; i < bytes.length; i++) { + int v = bytes[i] & 0xFF; + hexEncoding[i*2] = hexArray[v >>> 4]; + hexEncoding[i*2 + 1] = hexArray[v & 0x0F]; + } + classFiles.add(pair.getKey(), new String(hexEncoding)); + } + + JsonObjectBuilder job = Json.createObjectBuilder(); + job.add("status", "Success") + .add("bytecodes", classFiles.build()); + if (jerr != null) job.add("warning", jerr); + System.out.println(job.build()); + } +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMClassFile.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMClassFile.java new file mode 100644 index 000000000..4ec71dc4d --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMClassFile.java @@ -0,0 +1,56 @@ +package traceprinter.ramtools; +import javax.tools.*; +import java.io.*; +import java.net.URI; + +/*** + This is the same as + JavaClassObject + posted by Miron Sadziak, August 20 2009, + http://www.javablogging.com/dynamic-in-memory-compilation/ +***/ + +public class RAMClassFile extends SimpleJavaFileObject { + + /** + * Byte code created by the compiler will be stored in this + * ByteArrayOutputStream so that we can later get the + * byte array out of it + * and put it in the memory as an instance of our class. + */ + protected final ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + /** + * Registers the compiled class object under URI + * containing the class full name + * + * @param name + * Full name of the compiled class + * @param kind + * Kind of the data. It will be CLASS in our case + */ + public RAMClassFile(String name, Kind kind) { + super(URI.create("string:///" + name.replace('.', '/') + + kind.extension), kind); + } + + /** + * Will be used by our file manager to get the byte code that + * can be put into memory to instantiate our class + * + * @return compiled byte code + */ + public byte[] getBytes() { + return bos.toByteArray(); + } + + /** + * Will provide the compiler with an output stream that leads + * to our byte array. This way the compiler will write everything + * into the byte array that we will instantiate later + */ + @Override + public OutputStream openOutputStream() throws IOException { + return bos; + } +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMClassFileManager.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMClassFileManager.java new file mode 100644 index 000000000..037a67367 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMClassFileManager.java @@ -0,0 +1,71 @@ +package traceprinter.ramtools; +import javax.tools.*; +import java.io.*; +import java.util.*; +import java.security.SecureClassLoader; + +/*** + This is based on + ClassFileManager + posted by Miron Sadziak, August 20 2009, + http://www.javablogging.com/dynamic-in-memory-compilation/ + + The difference is that this allows multiple class files + (for example when you have inner classes), and exposes the + compiled bytes of them. +***/ + +public class RAMClassFileManager + extends ForwardingJavaFileManager { + /** + * Instance of JavaClassObject that will store the + * compiled bytecode of our class + */ + + + // ideally, you would make this private and provide an immutable getter + public Map contents = new TreeMap<>(); + + /** + * Will initialize the manager with the specified + * standard java file manager + * + * @param standardManger + */ + public RAMClassFileManager(StandardJavaFileManager standardManager) { + super(standardManager); + } + + /** + * Will be used by us to get the class loader for our + * compiled class. It creates an anonymous class + * extending the SecureClassLoader which uses the + * byte code created by the compiler and stored in + * the RAMClassFile, and returns the Class for it + */ + @Override + public ClassLoader getClassLoader(Location location) { + return new SecureClassLoader() { + @Override + protected Class findClass(String name) + throws ClassNotFoundException { + byte[] b = contents.get(name).getBytes(); + return super.defineClass(name, b, 0, b.length); + } + }; + } + + /** + * Gives the compiler an instance of the RAMClassFile + * so that the compiler can write the byte code into it. + */ + @Override + public JavaFileObject getJavaFileForOutput + (Location location, String className, JavaFileObject.Kind kind, + FileObject sibling) throws IOException { + RAMClassFile jclassObject = new RAMClassFile(className, kind); + contents.put(className, jclassObject); + return jclassObject; + } + +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMJavaFile.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMJavaFile.java new file mode 100644 index 000000000..98083572c --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMJavaFile.java @@ -0,0 +1,50 @@ +package traceprinter.ramtools; +import javax.tools.SimpleJavaFileObject; +import java.net.URI; + +/*** + This is the same as + CharSequenceJavaFileObject + posted by Miron Sadziak, August 20 2009, + http://www.javablogging.com/dynamic-in-memory-compilation/ +***/ + +public class RAMJavaFile extends SimpleJavaFileObject { + + /** + * CharSequence representing the source code to be compiled + */ + private CharSequence content; + + private String className; + + /** + * This constructor will store the source code in the + * internal "content" variable and register it as a + * source code, using a URI containing the class full name + * + * @param className + * name of the public class in the source code + * @param content + * source code to compile + */ + public RAMJavaFile(String className, CharSequence content) { + super(URI.create("string:///" + className.replace('.', '/') + + Kind.SOURCE.extension), Kind.SOURCE); + this.content = content; + this.className = className; + } + + public String toString() { + return className+".java"; + } + + /** + * Answers the CharSequence to be compiled. It will give + * the source code stored in variable "content" + */ + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) { + return content; + } +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMRun.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMRun.java new file mode 100644 index 000000000..6e084c01f --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/ramtools/RAMRun.java @@ -0,0 +1,124 @@ +package traceprinter.ramtools; +import java.util.Scanner; + +/**** +Usage: + - takes one or more command line arguments, the first of which is a class name; + - takes stdin that is a JSON object with these fields: + "bytecodes" is a map from class names to bytecodes + "stdin" (optional) is standard input for the program being called + - loads those classes and runs args[0]'s public static void main(String[] args) on args[1..] + - the first line of output either starts with 'Error' or with 'Success' + - Success means public static main(String[]) was found (we called Method.invoke), not that the invoke was trouble-free + +Sample usage: let's say we feed CompileToBytes this input: + +{"A":"public class A{public static void main(String[]args){System.out.println(\"hi\");}}"} + +it produces this output: + +{"status":"Success","bytecodes":{"A":"CAFEBABE0000003300220A0006001409001500160800170A0018001907001A07001B0100063C696E69743E010003282956010004436F646501000F4C696E654E756D6265725461626C650100124C6F63616C5661726961626C655461626C65010004746869730100034C413B0100046D61696E010016285B4C6A6176612F6C616E672F537472696E673B2956010004617267730100135B4C6A6176612F6C616E672F537472696E673B01000A536F7572636546696C65010006412E6A6176610C0007000807001C0C001D001E010002686907001F0C00200021010001410100106A6176612F6C616E672F4F626A6563740100106A6176612F6C616E672F53797374656D0100036F75740100154C6A6176612F696F2F5072696E7453747265616D3B0100136A6176612F696F2F5072696E7453747265616D0100077072696E746C6E010015284C6A6176612F6C616E672F537472696E673B2956002100050006000000000002000100070008000100090000002F00010001000000052AB70001B100000002000A00000006000100000001000B0000000C000100000005000C000D00000009000E000F00010009000000330002000100000009B200021203B60004B100000002000A00000006000100000001000B0000000C00010000000900100011000000010012000000020013"}} + +If we pipe this into RAMRun A + +it prints out + +Success: found A.main. Invoking... +hi + +*/ + + +import traceprinter.shoelace.*; +import traceprinter.ramtools.*; +import java.lang.reflect.*; +import java.io.*; +import java.util.Map; +import javax.json.*; + +public class RAMRun { + public static byte[] base16toBytes(String data) { + byte[] result = new byte[data.length()/2]; + + for (int i=0; i me : classes.entrySet()) { + String classname = me.getKey(); + if (! (me.getValue() instanceof JsonString)) { + System.out.println("Error: for key " + me.getKey() + " value is " + me.getValue().getClass() +":\n" + + me.getValue().toString()); + return; + } + String classfile = ((JsonString)me.getValue()).getString(); + + bcl.define(classname, base16toBytes(classfile)); + } + + // doesn't actually work. + //Thread.currentThread().setContextClassLoader(bcl); + //Class definedClass = Class.forName("A"); + + Class mainClass = ByteClassLoader.publicFindClass(args[0]); + + main = mainClass.getMethod("main", String[].class); + } + catch (Throwable t) { + System.out.println("Error: could not find class or main method"); + t.printStackTrace(); + return; + } + if (main.getModifiers() != (Modifier.PUBLIC | Modifier.STATIC)) { + System.out.println("Error: main is not public static"); + return; + } + try { + String[] newargs = new String[args.length-1]; + for (int i=0; i definitions = new TreeMap<>(); + + public ByteClassLoader() { + instance = this; + } + + public void define(String className, byte[] bytecode) { + definitions.put(className, bytecode); + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + byte[] bytecode = definitions.get(name); + if (bytecode == null) { + StringBuilder sb = new StringBuilder(); + sb.append("Asked ByteClassLoader for undefined class " + name); + sb.append(" --- Known: "); + for (String S : definitions.keySet()) + sb.append(S+" "); + throw new RuntimeException(sb.toString()); + } + return defineClass(name, bytecode, 0, bytecode.length); + } + + public static Class publicFindClass(final String name) throws ClassNotFoundException { + return instance.findClass(name); + } + +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/NoopMain.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/NoopMain.java new file mode 100644 index 000000000..1efceafec --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/NoopMain.java @@ -0,0 +1,18 @@ +package traceprinter.shoelace; + +import java.lang.reflect.*; + +/*** +This is just a basic class with a main method, +sent as the main class to com.sun.jdi.CommandLineLaunch. +Once main is entered, we use JDI to start doing what we really want. + ***/ + +public class NoopMain { + + public static void main(String[] args) { + // this is just a stub, but it's important + // since we call it to get things going + } + +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/README b/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/README new file mode 100644 index 000000000..2fa160c9a --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/README @@ -0,0 +1,18 @@ +traceprinter.shoelace: a mini-bootstrap for a Java visualizer +David Pritchard (daveagp@gmail.com), created May 2013 + +The contents of this directory are released under the GNU Affero +General Public License, versions 3 or later. See LICENSE or visit: +http://www.gnu.org/licenses/agpl.html + +Try the visualizer this was built for: + http://cscircles.cemc.uwaterloo.ca/java-visualize/ + +== About this subpackage == +These are the classes from traceprinter that are loaded by the target +(debugee) VM being stepped through. + +== traceprinter.shoelace == +NoopMain: just an empty main method. We use JDI to open a JVM on this class. +ByteClassLoader: allows loading class files from memory (byte[] bytecode) +VMCommandee: receives commands from VMCommander \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/VMCommandee.java b/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/VMCommandee.java new file mode 100644 index 000000000..473acd061 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/shoelace/VMCommandee.java @@ -0,0 +1,67 @@ +package traceprinter.shoelace; + +import java.lang.reflect.*; + +/*** +This class receives commands from traceprinter.VMCommander +telling what user code should be run. (Note that VMCommander +is in the debugger JVM, and VMCommandee is in the debugee.) +***/ + +public class VMCommandee { + + // returns null if everything worked + // else, returns an error message + public String runMain(String className, String[] args, String stdin) { + + Class target; + try { + target = ByteClassLoader.publicFindClass(className); + } catch (ClassNotFoundException e) { + return "Internal error: main class "+className+" not found"; + } + + Method main; + try { + main = target.getMethod("main", new Class[]{String[].class}); + } catch (NoSuchMethodException e) { + return "Class "+className+" needs public static void main(String[] args)"; + } + + if (stdin != null) + try { + System.setIn(new java.io.ByteArrayInputStream(stdin.getBytes("UTF-8"))); + } + catch (SecurityException | java.io.UnsupportedEncodingException e) { + return "Internal error: can't setIn"; + } + + int modifiers = main.getModifiers(); + if (modifiers != (Modifier.PUBLIC | Modifier.STATIC)) + return "Class "+className+" needs public static void main(String[] args)"; + try { + // first is null since it is a static method + main.invoke(null, new Object[]{args}); + return null; + } + catch (IllegalAccessException e) { + return "Internal error invoking main"; + } + catch (InvocationTargetException e) { + if (e.getTargetException() instanceof RuntimeException) + throw (RuntimeException)(e.getTargetException()); + + + java.io.StringWriter sw = new java.io.StringWriter(); + java.io.PrintWriter pw = new java.io.PrintWriter(sw); + e.getTargetException().printStackTrace(pw); + + return "Internal error handling error " + e.getTargetException() + sw.toString(); + + //if (e.getTargetException() instanceof Error) + // throw (Error)(e.getTargetException()); + + } + } + +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/traceprinter/test-input.txt b/v4-cokapi/backends/java/java_jail/cp/traceprinter/test-input.txt new file mode 100644 index 000000000..9894aabbf --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/traceprinter/test-input.txt @@ -0,0 +1,7 @@ +{ +"usercode": + "public class Test { public static void main(String[] args) { int x = 3; x += x; } }", +"options": {}, +"args": [], +"stdin": "" +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryIn.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryIn.java new file mode 100644 index 000000000..12ec11539 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryIn.java @@ -0,0 +1,339 @@ +/************************************************************************* + * Compilation: javac BinaryIn.java + * Execution: java BinaryIn input output + * + * This library is for reading binary data from an input stream. + * + * % java BinaryIn http://introcs.cs.princeton.edu/cover.jpg output.jpg + * + *************************************************************************/ + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.Socket; +import java.net.URL; +import java.net.URLConnection; + + +/** + * Binary input. This class provides methods for reading + * in bits from a binary input stream, either + * one bit at a time (as a boolean), + * 8 bits at a time (as a byte or char), + * 16 bits at a time (as a short), + * 32 bits at a time (as an int or float), or + * 64 bits at a time (as a double or long). + *

    + * The binary input stream can be from standard input, a filename, + * a URL name, a Socket, or an InputStream. + *

    + * All primitive types are assumed to be represented using their + * standard Java representations, in big-endian (most significant + * byte first) order. + *

    + * The client should not intermix calls to BinaryIn with calls + * to In; otherwise unexpected behavior will result. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class BinaryIn { + private static final int EOF = -1; // end of file + + private BufferedInputStream in; // the input stream + private int buffer; // one character buffer + private int N; // number of bits left in buffer + + /** + * Create a binary input stream from standard input. + */ + public BinaryIn() { + in = new BufferedInputStream(System.in); + fillBuffer(); + } + + /** + * Create a binary input stream from an InputStream. + */ + public BinaryIn(InputStream is) { + in = new BufferedInputStream(is); + fillBuffer(); + } + + /** + * Create a binary input stream from a socket. + */ + public BinaryIn(Socket socket) { + try { + InputStream is = socket.getInputStream(); + in = new BufferedInputStream(is); + fillBuffer(); + } + catch (IOException ioe) { + System.err.println("Could not open " + socket); + } + } + + /** + * Create a binary input stream from a URL. + */ + public BinaryIn(URL url) { + try { + URLConnection site = url.openConnection(); + InputStream is = site.getInputStream(); + in = new BufferedInputStream(is); + fillBuffer(); + } + catch (IOException ioe) { + System.err.println("Could not open " + url); + } + } + + /** + * Create a binary input stream from a filename or URL name. + */ + public BinaryIn(String s) { + + try { + // first try to read file from local file system + File file = new File(s); + if (file.exists()) { + FileInputStream fis = new FileInputStream(file); + in = new BufferedInputStream(fis); + fillBuffer(); + return; + } + + // next try for files included in jar + URL url = getClass().getResource(s); + + // or URL from web + if (url == null) { url = new URL(s); } + + URLConnection site = url.openConnection(); + InputStream is = site.getInputStream(); + in = new BufferedInputStream(is); + fillBuffer(); + } + catch (IOException ioe) { + System.err.println("Could not open " + s); + } + } + + private void fillBuffer() { + try { buffer = in.read(); N = 8; } + catch (IOException e) { System.err.println("EOF"); buffer = EOF; N = -1; } + } + + /** + * Does the binary input stream exist? + */ + public boolean exists() { + return in != null; + } + + /** + * Returns true if the binary input stream is empty. + * @return true if and only if the binary input stream is empty + */ + public boolean isEmpty() { + return buffer == EOF; + } + + /** + * Read the next bit of data from the binary input stream and return as a boolean. + * @return the next bit of data from the binary input stream as a boolean + * @throws RuntimeException if the input stream is empty + */ + public boolean readBoolean() { + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + N--; + boolean bit = ((buffer >> N) & 1) == 1; + if (N == 0) fillBuffer(); + return bit; + } + + /** + * Read the next 8 bits from the binary input stream and return as an 8-bit char. + * @return the next 8 bits of data from the binary input stream as a char + * @throws RuntimeException if there are fewer than 8 bits available + */ + public char readChar() { + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + + // special case when aligned byte + if (N == 8) { + int x = buffer; + fillBuffer(); + return (char) (x & 0xff); + } + + // combine last N bits of current buffer with first 8-N bits of new buffer + int x = buffer; + x <<= (8-N); + int oldN = N; + fillBuffer(); + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + N = oldN; + x |= (buffer >>> N); + return (char) (x & 0xff); + // the above code doesn't quite work for the last character if N = 8 + // because buffer will be -1 + } + + + /** + * Read the next r bits from the binary input stream and return as an r-bit character. + * @param r number of bits to read. + * @return the next r bits of data from the binary input streamt as a char + * @throws RuntimeException if there are fewer than r bits available + */ + public char readChar(int r) { + if (r < 1 || r > 16) throw new RuntimeException("Illegal value of r = " + r); + + // optimize r = 8 case + if (r == 8) return readChar(); + + char x = 0; + for (int i = 0; i < r; i++) { + x <<= 1; + boolean bit = readBoolean(); + if (bit) x |= 1; + } + return x; + } + + + /** + * Read the remaining bytes of data from the binary input stream and return as a string. + * @return the remaining bytes of data from the binary input stream as a String + * @throws RuntimeException if the input stream is empty or if the number of bits + * available is not a multiple of 8 (byte-aligned) + */ + public String readString() { + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + + StringBuilder sb = new StringBuilder(); + while (!isEmpty()) { + char c = readChar(); + sb.append(c); + } + return sb.toString(); + } + + + /** + * Read the next 16 bits from the binary input stream and return as a 16-bit short. + * @return the next 16 bits of data from the binary standard input as a short + * @throws RuntimeException if there are fewer than 16 bits available + */ + public short readShort() { + short x = 0; + for (int i = 0; i < 2; i++) { + char c = readChar(); + x <<= 8; + x |= c; + } + return x; + } + + /** + * Read the next 32 bits from the binary input stream and return as a 32-bit int. + * @return the next 32 bits of data from the binary input stream as a int + * @throws RuntimeException if there are fewer than 32 bits available + */ + public int readInt() { + int x = 0; + for (int i = 0; i < 4; i++) { + char c = readChar(); + x <<= 8; + x |= c; + } + return x; + } + + /** + * Read the next r bits from the binary input stream return as an r-bit int. + * @param r number of bits to read. + * @return the next r bits of data from the binary input stream as a int + * @throws RuntimeException if there are fewer than r bits available on standard input + */ + public int readInt(int r) { + if (r < 1 || r > 32) throw new RuntimeException("Illegal value of r = " + r); + + // optimize r = 32 case + if (r == 32) return readInt(); + + int x = 0; + for (int i = 0; i < r; i++) { + x <<= 1; + boolean bit = readBoolean(); + if (bit) x |= 1; + } + return x; + } + + /** + * Read the next 64 bits from the binary input stream and return as a 64-bit long. + * @return the next 64 bits of data from the binary input stream as a long + * @throws RuntimeException if there are fewer than 64 bits available + */ + public long readLong() { + long x = 0; + for (int i = 0; i < 8; i++) { + char c = readChar(); + x <<= 8; + x |= c; + } + return x; + } + + /** + * Read the next 64 bits from the binary input stream and return as a 64-bit double. + * @return the next 64 bits of data from the binary input stream as a double + * @throws RuntimeException if there are fewer than 64 bits available + */ + public double readDouble() { + return Double.longBitsToDouble(readLong()); + } + + /** + * Read the next 32 bits from standard input and return as a 32-bit float. + * @return the next 32 bits of data from standard input as a float + * @throws RuntimeException if there are fewer than 32 bits available on standard input + */ + public float readFloat() { + return Float.intBitsToFloat(readInt()); + } + + + /** + * Read the next 8 bits from the binary input stream and return as an 8-bit byte. + * @return the next 8 bits of data from the binary input stream as a byte + * @throws RuntimeException if there are fewer than 8 bits available + */ + public byte readByte() { + char c = readChar(); + byte x = (byte) (c & 0xff); + return x; + } + + /** + * Test client. Reads in the name of a file or url (first command-line + * argument) and writes it to a file (second command-line argument). + */ + public static void main(String[] args) { + BinaryIn in = new BinaryIn(args[0]); + BinaryOut out = new BinaryOut(args[1]); + + // read one 8-bit char at a time + while (!in.isEmpty()) { + char c = in.readChar(); + out.write(c); + } + out.flush(); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryOut.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryOut.java new file mode 100644 index 000000000..f02f300d4 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryOut.java @@ -0,0 +1,304 @@ +/************************************************************************* + * Compilation: javac BinaryOut.java + * Execution: java BinaryOut + * + * Write binary data to an output stream, either one 1-bit boolean, + * one 8-bit char, one 32-bit int, one 64-bit double, one 32-bit float, + * or one 64-bit long at a time. The output stream can be standard + * output, a file, an OutputStream or a Socket. + * + * The bytes written are not aligned. + * + * [wayne 7.17.2013] fixed bugs in write(char x, int r) and + * write(int x, int r) to add return statement for (r == 8) + * and (r == 32) cases, respectively. + * + *************************************************************************/ + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.Socket; + +/** + * Binary output. This class provides methods for converting + * primtive type variables (boolean, byte, char, + * int, long, float, and double) + * to sequences of bits and writing them to an output stream. + * The output stream can be standard output, a file, an OutputStream or a Socket. + * Uses big-endian (most-significant byte first). + *

    + * The client must flush() the output stream when finished writing bits. + *

    + * The client should not intermixing calls to BinaryOut with calls + * to Out; otherwise unexpected behavior will result. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class BinaryOut { + + private BufferedOutputStream out; // the output stream + private int buffer; // 8-bit buffer of bits to write out + private int N; // number of bits remaining in buffer + + + /** + * Create a binary output stream from an OutputStream. + */ + public BinaryOut(OutputStream os) { + out = new BufferedOutputStream(os); + } + + /** + * Create a binary output stream from standard output. + */ + public BinaryOut() { + out = new BufferedOutputStream(System.out); + } + + /** + * Create a binary output stream from a filename. + */ + public BinaryOut(String s) { + try { + OutputStream os = new FileOutputStream(s); + out = new BufferedOutputStream(os); + } + catch (IOException e) { e.printStackTrace(); } + } + + /** + * Create a binary output stream from a Socket. + */ + public BinaryOut(Socket socket) { + try { + OutputStream os = socket.getOutputStream(); + out = new BufferedOutputStream(os); + } + catch (IOException e) { e.printStackTrace(); } + } + + + /** + * Write the specified bit to the binary output stream. + */ + private void writeBit(boolean bit) { + // add bit to buffer + buffer <<= 1; + if (bit) buffer |= 1; + + // if buffer is full (8 bits), write out as a single byte + N++; + if (N == 8) clearBuffer(); + } + + /** + * Write the 8-bit byte to the binary output stream. + */ + private void writeByte(int x) { + assert x >= 0 && x < 256; + + // optimized if byte-aligned + if (N == 0) { + try { out.write(x); } + catch (IOException e) { e.printStackTrace(); } + return; + } + + // otherwise write one bit at a time + for (int i = 0; i < 8; i++) { + boolean bit = ((x >>> (8 - i - 1)) & 1) == 1; + writeBit(bit); + } + } + + // write out any remaining bits in buffer to the binary output stream, padding with 0s + private void clearBuffer() { + if (N == 0) return; + if (N > 0) buffer <<= (8 - N); + try { out.write(buffer); } + catch (IOException e) { e.printStackTrace(); } + N = 0; + buffer = 0; + } + + /** + * Flush the binary output stream, padding 0s if number of bits written so far + * is not a multiple of 8. + */ + public void flush() { + clearBuffer(); + try { out.flush(); } + catch (IOException e) { e.printStackTrace(); } + } + + /** + * Close and flush the binary output stream. Once it is closed, you can no longer write bits. + */ + public void close() { + flush(); + try { out.close(); } + catch (IOException e) { e.printStackTrace(); } + } + + + /** + * Write the specified bit to the binary output stream. + * @param x the boolean to write. + */ + public void write(boolean x) { + writeBit(x); + } + + /** + * Write the 8-bit byte to the binary output stream. + * @param x the byte to write. + */ + public void write(byte x) { + writeByte(x & 0xff); + } + + /** + * Write the 32-bit int to the binary output stream. + * @param x the int to write. + */ + public void write(int x) { + writeByte((x >>> 24) & 0xff); + writeByte((x >>> 16) & 0xff); + writeByte((x >>> 8) & 0xff); + writeByte((x >>> 0) & 0xff); + } + + /** + * Write the r-bit int to the binary output stream. + * @param x the int to write. + * @param r the number of relevant bits in the char. + * @throws RuntimeException if r is not between 1 and 32. + * @throws RuntimeException if x is not between 0 and 2r - 1. + */ + public void write(int x, int r) { + if (r == 32) { write(x); return; } + if (r < 1 || r > 32) throw new RuntimeException("Illegal value for r = " + r); + if (x < 0 || x >= (1 << r)) throw new RuntimeException("Illegal " + r + "-bit char = " + x); + for (int i = 0; i < r; i++) { + boolean bit = ((x >>> (r - i - 1)) & 1) == 1; + writeBit(bit); + } + } + + + /** + * Write the 64-bit double to the binary output stream. + * @param x the double to write. + */ + public void write(double x) { + write(Double.doubleToRawLongBits(x)); + } + + /** + * Write the 64-bit long to the binary output stream. + * @param x the long to write. + */ + public void write(long x) { + writeByte((int) ((x >>> 56) & 0xff)); + writeByte((int) ((x >>> 48) & 0xff)); + writeByte((int) ((x >>> 40) & 0xff)); + writeByte((int) ((x >>> 32) & 0xff)); + writeByte((int) ((x >>> 24) & 0xff)); + writeByte((int) ((x >>> 16) & 0xff)); + writeByte((int) ((x >>> 8) & 0xff)); + writeByte((int) ((x >>> 0) & 0xff)); + } + + /** + * Write the 32-bit float to the binary output stream. + * @param x the float to write. + */ + public void write(float x) { + write(Float.floatToRawIntBits(x)); + } + + /** + * Write the 16-bit int to the binary output stream. + * @param x the short to write. + */ + public void write(short x) { + writeByte((x >>> 8) & 0xff); + writeByte((x >>> 0) & 0xff); + } + + /** + * Write the 8-bit char to the binary output stream. + * @param x the char to write. + * @throws RuntimeException if x is not betwen 0 and 255. + */ + public void write(char x) { + if (x < 0 || x >= 256) throw new RuntimeException("Illegal 8-bit char = " + x); + writeByte(x); + } + + /** + * Write the r-bit char to the binary output stream. + * @param x the char to write. + * @param r the number of relevant bits in the char. + * @throws RuntimeException if r is not between 1 and 16. + * @throws RuntimeException if x is not between 0 and 2r - 1. + */ + public void write(char x, int r) { + if (r == 8) { write(x); return; } + if (r < 1 || r > 16) throw new RuntimeException("Illegal value for r = " + r); + if (x < 0 || x >= (1 << r)) throw new RuntimeException("Illegal " + r + "-bit char = " + x); + for (int i = 0; i < r; i++) { + boolean bit = ((x >>> (r - i - 1)) & 1) == 1; + writeBit(bit); + } + } + + /** + * Write the string of 8-bit characters to the binary output stream. + * @param s the String to write. + * @throws RuntimeException if any character in the string is not + * between 0 and 255. + */ + public void write(String s) { + for (int i = 0; i < s.length(); i++) + write(s.charAt(i)); + } + + + /** + * Write the String of r-bit characters to the binary output stream. + * @param s the String to write. + * @param r the number of relevants bits in each character. + * @throws RuntimeException if r is not between 1 and 16. + * @throws RuntimeException if any character in the string is not + * between 0 and 2r - 1. + */ + public void write(String s, int r) { + for (int i = 0; i < s.length(); i++) + write(s.charAt(i), r); + } + + + /** + * Test client. Read bits from standard input and write to the file + * specified on command line. + */ + public static void main(String[] args) { + + // create binary output stream to write to file + String filename = args[0]; + BinaryOut out = new BinaryOut(filename); + BinaryIn in = new BinaryIn(); + + // read from standard input and write to file + while (!in.isEmpty()) { + char c = in.readChar(); + out.write(c); + } + out.flush(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryStdIn.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryStdIn.java new file mode 100644 index 000000000..7e79878cc --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryStdIn.java @@ -0,0 +1,267 @@ +/************************************************************************* + * Compilation: javac BinaryStdIn.java + * Execution: java BinaryStdIn < input > output + * + * Supports reading binary data from standard input. + * + * % java BinaryStdIn < input.jpg > output.jpg + * % diff input.jpg output.jpg + * + *************************************************************************/ + +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * Binary standard input. This class provides methods for reading + * in bits from standard input, either one bit at a time (as a boolean), + * 8 bits at a time (as a byte or char), + * 16 bits at a time (as a short), 32 bits at a time + * (as an int or float), or 64 bits at a time (as a + * double or long). + *

    + * All primitive types are assumed to be represented using their + * standard Java representations, in big-endian (most significant + * byte first) order. + *

    + * The client should not intermix calls to BinaryStdIn with calls + * to StdIn or System.in; + * otherwise unexpected behavior will result. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class BinaryStdIn { + private static BufferedInputStream in = new BufferedInputStream(System.in); + private static final int EOF = -1; // end of file + + private static int buffer; // one character buffer + private static int N; // number of bits left in buffer + + // static initializer + static { fillBuffer(); } + + // don't instantiate + private BinaryStdIn() { } + + private static void fillBuffer() { + try { buffer = in.read(); N = 8; } + catch (IOException e) { System.out.println("EOF"); buffer = EOF; N = -1; } + } + + /** + * Close this input stream and release any associated system resources. + */ + public static void close() { + try { + in.close(); + } + catch (IOException e) { + e.printStackTrace(); + throw new RuntimeException("Could not close BinaryStdIn"); + } + } + + /** + * Returns true if standard input is empty. + * @return true if and only if standard input is empty + */ + public static boolean isEmpty() { + return buffer == EOF; + } + + /** + * Read the next bit of data from standard input and return as a boolean. + * @return the next bit of data from standard input as a boolean + * @throws RuntimeException if standard input is empty + */ + public static boolean readBoolean() { + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + N--; + boolean bit = ((buffer >> N) & 1) == 1; + if (N == 0) fillBuffer(); + return bit; + } + + /** + * Read the next 8 bits from standard input and return as an 8-bit char. + * Note that char is a 16-bit type; + * to read the next 16 bits as a char, use readChar(16) + * @return the next 8 bits of data from standard input as a char + * @throws RuntimeException if there are fewer than 8 bits available on standard input + */ + public static char readChar() { + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + + // special case when aligned byte + if (N == 8) { + int x = buffer; + fillBuffer(); + return (char) (x & 0xff); + } + + // combine last N bits of current buffer with first 8-N bits of new buffer + int x = buffer; + x <<= (8-N); + int oldN = N; + fillBuffer(); + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + N = oldN; + x |= (buffer >>> N); + return (char) (x & 0xff); + // the above code doesn't quite work for the last character if N = 8 + // because buffer will be -1 + } + + /** + * Read the next r bits from standard input and return as an r-bit character. + * @param r number of bits to read. + * @return the next r bits of data from standard input as a char + * @throws RuntimeException if there are fewer than r bits available on standard input + * @throws RuntimeException unless 1 ≤ r ≤ 16 + */ + public static char readChar(int r) { + if (r < 1 || r > 16) throw new RuntimeException("Illegal value of r = " + r); + + // optimize r = 8 case + if (r == 8) return readChar(); + + char x = 0; + for (int i = 0; i < r; i++) { + x <<= 1; + boolean bit = readBoolean(); + if (bit) x |= 1; + } + return x; + } + + /** + * Read the remaining bytes of data from standard input and return as a string. + * @return the remaining bytes of data from standard input as a String + * @throws RuntimeException if standard input is empty or if the number of bits + * available on standard input is not a multiple of 8 (byte-aligned) + */ + public static String readString() { + if (isEmpty()) throw new RuntimeException("Reading from empty input stream"); + + StringBuilder sb = new StringBuilder(); + while (!isEmpty()) { + char c = readChar(); + sb.append(c); + } + return sb.toString(); + } + + + /** + * Read the next 16 bits from standard input and return as a 16-bit short. + * @return the next 16 bits of data from standard input as a short + * @throws RuntimeException if there are fewer than 16 bits available on standard input + */ + public static short readShort() { + short x = 0; + for (int i = 0; i < 2; i++) { + char c = readChar(); + x <<= 8; + x |= c; + } + return x; + } + + /** + * Read the next 32 bits from standard input and return as a 32-bit int. + * @return the next 32 bits of data from standard input as a int + * @throws RuntimeException if there are fewer than 32 bits available on standard input + */ + public static int readInt() { + int x = 0; + for (int i = 0; i < 4; i++) { + char c = readChar(); + x <<= 8; + x |= c; + } + return x; + } + + /** + * Read the next r bits from standard input and return as an r-bit int. + * @param r number of bits to read. + * @return the next r bits of data from standard input as a int + * @throws RuntimeException if there are fewer than r bits available on standard input + * @throws RuntimeException unless 1 ≤ r ≤ 32 + */ + public static int readInt(int r) { + if (r < 1 || r > 32) throw new RuntimeException("Illegal value of r = " + r); + + // optimize r = 32 case + if (r == 32) return readInt(); + + int x = 0; + for (int i = 0; i < r; i++) { + x <<= 1; + boolean bit = readBoolean(); + if (bit) x |= 1; + } + return x; + } + + /** + * Read the next 64 bits from standard input and return as a 64-bit long. + * @return the next 64 bits of data from standard input as a long + * @throws RuntimeException if there are fewer than 64 bits available on standard input + */ + public static long readLong() { + long x = 0; + for (int i = 0; i < 8; i++) { + char c = readChar(); + x <<= 8; + x |= c; + } + return x; + } + + + /** + * Read the next 64 bits from standard input and return as a 64-bit double. + * @return the next 64 bits of data from standard input as a double + * @throws RuntimeException if there are fewer than 64 bits available on standard input + */ + public static double readDouble() { + return Double.longBitsToDouble(readLong()); + } + + /** + * Read the next 32 bits from standard input and return as a 32-bit float. + * @return the next 32 bits of data from standard input as a float + * @throws RuntimeException if there are fewer than 32 bits available on standard input + */ + public static float readFloat() { + return Float.intBitsToFloat(readInt()); + } + + + /** + * Read the next 8 bits from standard input and return as an 8-bit byte. + * @return the next 8 bits of data from standard input as a byte + * @throws RuntimeException if there are fewer than 8 bits available on standard input + */ + public static byte readByte() { + char c = readChar(); + byte x = (byte) (c & 0xff); + return x; + } + + /** + * Test client. Reads in a binary input file from standard input and writes + * it to standard output. + */ + public static void main(String[] args) { + + // read one 8-bit char at a time + while (!BinaryStdIn.isEmpty()) { + char c = BinaryStdIn.readChar(); + BinaryStdOut.write(c); + } + BinaryStdOut.flush(); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryStdOut.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryStdOut.java new file mode 100644 index 000000000..38f31d520 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/BinaryStdOut.java @@ -0,0 +1,256 @@ +/************************************************************************* + * Compilation: javac BinaryStdOut.java + * Execution: java BinaryStdOut + * + * Write binary data to standard output, either one 1-bit boolean, + * one 8-bit char, one 32-bit int, one 64-bit double, one 32-bit float, + * or one 64-bit long at a time. + * + * The bytes written are not aligned. + * + *************************************************************************/ + +import java.io.BufferedOutputStream; +import java.io.IOException; + +/** + * Binary standard output. This class provides methods for converting + * primtive type variables (boolean, byte, char, + * int, long, float, and double) + * to sequences of bits and writing them to standard output. + * Uses big-endian (most-significant byte first). + *

    + * The client must flush() the output stream when finished writing bits. + *

    + * The client should not intermixing calls to BinaryStdOut with calls + * to StdOut or System.out; otherwise unexpected behavior + * will result. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class BinaryStdOut { + private static BufferedOutputStream out = new BufferedOutputStream(System.out); + + private static int buffer; // 8-bit buffer of bits to write out + private static int N; // number of bits remaining in buffer + + // don't instantiate + private BinaryStdOut() { } + + /** + * Write the specified bit to standard output. + */ + private static void writeBit(boolean bit) { + // add bit to buffer + buffer <<= 1; + if (bit) buffer |= 1; + + // if buffer is full (8 bits), write out as a single byte + N++; + if (N == 8) clearBuffer(); + } + + /** + * Write the 8-bit byte to standard output. + */ + private static void writeByte(int x) { + assert x >= 0 && x < 256; + + // optimized if byte-aligned + if (N == 0) { + try { out.write(x); } + catch (IOException e) { e.printStackTrace(); } + return; + } + + // otherwise write one bit at a time + for (int i = 0; i < 8; i++) { + boolean bit = ((x >>> (8 - i - 1)) & 1) == 1; + writeBit(bit); + } + } + + // write out any remaining bits in buffer to standard output, padding with 0s + private static void clearBuffer() { + if (N == 0) return; + if (N > 0) buffer <<= (8 - N); + try { out.write(buffer); } + catch (IOException e) { e.printStackTrace(); } + N = 0; + buffer = 0; + } + + /** + * Flush standard output, padding 0s if number of bits written so far + * is not a multiple of 8. + */ + public static void flush() { + clearBuffer(); + try { out.flush(); } + catch (IOException e) { e.printStackTrace(); } + } + + /** + * Flush and close standard output. Once standard output is closed, you can no + * longer write bits to it. + */ + public static void close() { + flush(); + try { out.close(); } + catch (IOException e) { e.printStackTrace(); } + } + + + /** + * Write the specified bit to standard output. + * @param x the boolean to write. + */ + public static void write(boolean x) { + writeBit(x); + } + + /** + * Write the 8-bit byte to standard output. + * @param x the byte to write. + */ + public static void write(byte x) { + writeByte(x & 0xff); + } + + /** + * Write the 32-bit int to standard output. + * @param x the int to write. + */ + public static void write(int x) { + writeByte((x >>> 24) & 0xff); + writeByte((x >>> 16) & 0xff); + writeByte((x >>> 8) & 0xff); + writeByte((x >>> 0) & 0xff); + } + + /** + * Write the r-bit int to standard output. + * @param x the int to write. + * @param r the number of relevant bits in the char. + * @throws RuntimeException if r is not between 1 and 32. + * @throws RuntimeException if x is not between 0 and 2r - 1. + */ + public static void write(int x, int r) { + if (r == 32) { write(x); return; } + if (r < 1 || r > 32) throw new RuntimeException("Illegal value for r = " + r); + if (x < 0 || x >= (1 << r)) throw new RuntimeException("Illegal " + r + "-bit char = " + x); + for (int i = 0; i < r; i++) { + boolean bit = ((x >>> (r - i - 1)) & 1) == 1; + writeBit(bit); + } + } + + + + + + /** + * Write the 64-bit double to standard output. + * @param x the double to write. + */ + public static void write(double x) { + write(Double.doubleToRawLongBits(x)); + } + + /** + * Write the 64-bit long to standard output. + * @param x the long to write. + */ + public static void write(long x) { + writeByte((int) ((x >>> 56) & 0xff)); + writeByte((int) ((x >>> 48) & 0xff)); + writeByte((int) ((x >>> 40) & 0xff)); + writeByte((int) ((x >>> 32) & 0xff)); + writeByte((int) ((x >>> 24) & 0xff)); + writeByte((int) ((x >>> 16) & 0xff)); + writeByte((int) ((x >>> 8) & 0xff)); + writeByte((int) ((x >>> 0) & 0xff)); + } + + /** + * Write the 32-bit float to standard output. + * @param x the float to write. + */ + public static void write(float x) { + write(Float.floatToRawIntBits(x)); + } + + /** + * Write the 16-bit int to standard output. + * @param x the short to write. + */ + public static void write(short x) { + writeByte((x >>> 8) & 0xff); + writeByte((x >>> 0) & 0xff); + } + + /** + * Write the 8-bit char to standard output. + * @param x the char to write. + * @throws RuntimeException if x is not betwen 0 and 255. + */ + public static void write(char x) { + if (x < 0 || x >= 256) throw new RuntimeException("Illegal 8-bit char = " + x); + writeByte(x); + } + + /** + * Write the r-bit char to standard output. + * @param x the char to write. + * @param r the number of relevant bits in the char. + * @throws RuntimeException if r is not between 1 and 16. + * @throws RuntimeException if x is not between 0 and 2r - 1. + */ + public static void write(char x, int r) { + if (r == 8) { write(x); return; } + if (r < 1 || r > 16) throw new RuntimeException("Illegal value for r = " + r); + if (x < 0 || x >= (1 << r)) throw new RuntimeException("Illegal " + r + "-bit char = " + x); + for (int i = 0; i < r; i++) { + boolean bit = ((x >>> (r - i - 1)) & 1) == 1; + writeBit(bit); + } + } + + /** + * Write the string of 8-bit characters to standard output. + * @param s the String to write. + * @throws RuntimeException if any character in the string is not + * between 0 and 255. + */ + public static void write(String s) { + for (int i = 0; i < s.length(); i++) + write(s.charAt(i)); + } + + /** + * Write the String of r-bit characters to standard output. + * @param s the String to write. + * @param r the number of relevants bits in each character. + * @throws RuntimeException if r is not between 1 and 16. + * @throws RuntimeException if any character in the string is not + * between 0 and 2r - 1. + */ + public static void write(String s, int r) { + for (int i = 0; i < s.length(); i++) + write(s.charAt(i), r); + } + + /** + * Test client. + */ + public static void main(String[] args) { + int T = Integer.parseInt(args[0]); + // write to standard output + for (int i = 0; i < T; i++) { + BinaryStdOut.write(i); + } + BinaryStdOut.flush(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Draw.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Draw.java new file mode 100644 index 000000000..342171dfa --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Draw.java @@ -0,0 +1,1141 @@ +/************************************************************************* + * Compilation: javac Draw.java + * Execution: java Draw + * + * Drawing library. This class provides a basic capability for creating + * drawings with your programs. It uses a simple graphics model that + * allows you to create drawings consisting of points, lines, and curves + * in a window on your computer and to save the drawings to a file. + * This is the object-oriented version of standard draw; it supports + * multiple indepedent drawing windows. + * + * Todo + * ---- + * - Add support for gradient fill, etc. + * + * Remarks + * ------- + * - don't use AffineTransform for rescaling since it inverts + * images and strings + * - careful using setFont in inner loop within an animation - + * it can cause flicker + * + *************************************************************************/ + +import java.awt.*; +import java.awt.event.*; +import java.awt.geom.*; +import java.awt.image.*; +import java.io.*; +import java.net.*; +import java.util.LinkedList; +import java.util.TreeSet; +import javax.imageio.ImageIO; +import javax.swing.*; + +/** + * Draw. This class provides a basic capability for + * creating drawings with your programs. It uses a simple graphics model that + * allows you to create drawings consisting of points, lines, and curves + * in a window on your computer and to save the drawings to a file. + * This is the object-oriented version of standard draw; it supports + * multiple indepedent drawing windows. + *

    + * For additional documentation, see Section 3.1 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ + +import java.util.ArrayList; + +public final class Draw implements ActionListener, MouseListener, MouseMotionListener, KeyListener { + + // pre-defined colors + public static final Color BLACK = Color.BLACK; + public static final Color BLUE = Color.BLUE; + public static final Color CYAN = Color.CYAN; + public static final Color DARK_GRAY = Color.DARK_GRAY; + public static final Color GRAY = Color.GRAY; + public static final Color GREEN = Color.GREEN; + public static final Color LIGHT_GRAY = Color.LIGHT_GRAY; + public static final Color MAGENTA = Color.MAGENTA; + public static final Color ORANGE = Color.ORANGE; + public static final Color PINK = Color.PINK; + public static final Color RED = Color.RED; + public static final Color WHITE = Color.WHITE; + public static final Color YELLOW = Color.YELLOW; + + /** + * Shade of blue used in Introduction to Programming in Java. + * The RGB values are (9, 90, 166). + */ + public static final Color BOOK_BLUE = new Color(9, 90, 166); + + /** + * Shade of red used in Algorithms 4th edition. + * The RGB values are (173, 32, 24). + */ + public static final Color BOOK_RED = new Color(173, 32, 24); + + // default colors + private static final Color DEFAULT_PEN_COLOR = BLACK; + private static final Color DEFAULT_CLEAR_COLOR = WHITE; + + // boundary of drawing canvas, 5% border + private static final double BORDER = 0.05; + private static final double DEFAULT_XMIN = 0.0; + private static final double DEFAULT_XMAX = 1.0; + private static final double DEFAULT_YMIN = 0.0; + private static final double DEFAULT_YMAX = 1.0; + + // default canvas size is SIZE-by-SIZE + private static final int DEFAULT_SIZE = 512; + + // default pen radius + private static final double DEFAULT_PEN_RADIUS = 0.002; + + // default font + private static final Font DEFAULT_FONT = new Font("SansSerif", Font.PLAIN, 16); + + // current pen color + private Color penColor; + + // canvas size + private int width = DEFAULT_SIZE; + private int height = DEFAULT_SIZE; + + // current pen radius + private double penRadius; + + // show we draw immediately or wait until next show? + private boolean defer = false; + + private double xmin, ymin, xmax, ymax; + + // name of window + private String name = "Draw"; + + // for synchronization + private Object mouseLock = new Object(); + private Object keyLock = new Object(); + + // current font + private Font font; + + // double buffered graphics + private BufferedImage offscreenImage, onscreenImage; + private Graphics2D offscreen, onscreen; + + // the frame for drawing to the screen + private JFrame frame = new JFrame(); + + // mouse state + private boolean mousePressed = false; + private double mouseX = 0; + private double mouseY = 0; + + // keyboard state + private LinkedList keysTyped = new LinkedList(); + private TreeSet keysDown = new TreeSet(); + + // event-based listeners + private ArrayList listeners = new ArrayList(); + + + /** + * Create an empty drawing object with the given name. + * + * @param name the title of the drawing window. + */ + public Draw(String name) { + this.name = name; + init(); + } + + /** + * Create an empty drawing object. + */ + public Draw() { + init(); + } + + private void init() { + if (frame != null) frame.setVisible(false); + frame = new JFrame(); + offscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + onscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + offscreen = offscreenImage.createGraphics(); + onscreen = onscreenImage.createGraphics(); + setXscale(); + setYscale(); + offscreen.setColor(DEFAULT_CLEAR_COLOR); + offscreen.fillRect(0, 0, width, height); + setPenColor(); + setPenRadius(); + setFont(); + clear(); + + // add antialiasing + RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + offscreen.addRenderingHints(hints); + + // frame stuff + ImageIcon icon = new ImageIcon(onscreenImage); + JLabel draw = new JLabel(icon); + + draw.addMouseListener(this); + draw.addMouseMotionListener(this); + + frame.setContentPane(draw); + frame.addKeyListener(this); // JLabel cannot get keyboard focus + frame.setResizable(false); + // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // closes all windows + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // closes only current window + frame.setTitle(name); + frame.setJMenuBar(createMenuBar()); + frame.pack(); + frame.requestFocusInWindow(); + frame.setVisible(true); + } + + + /** + * Set the upper-left hand corner of the drawing window to be (x, y), where (0, 0) is upper left. + * + * @param x the number of pixels from the left + * @param y the number of pixels from the top + * @throws a RunTimeException if the width or height is 0 or negative + */ + public void setLocationOnScreen(int x, int y) { + frame.setLocation(x, y); + } + + + + /** + * Set the window size to w-by-h pixels. + * + * @param w the width as a number of pixels + * @param h the height as a number of pixels + * @throws a RunTimeException if the width or height is 0 or negative + */ + public void setCanvasSize(int w, int h) { + if (w < 1 || h < 1) throw new RuntimeException("width and height must be positive"); + width = w; + height = h; + init(); + } + + + // create the menu bar (changed to private) + private JMenuBar createMenuBar() { + JMenuBar menuBar = new JMenuBar(); + JMenu menu = new JMenu("File"); + menuBar.add(menu); + JMenuItem menuItem1 = new JMenuItem(" Save... "); + menuItem1.addActionListener(this); + menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + menu.add(menuItem1); + return menuBar; + } + + + /************************************************************************* + * User and screen coordinate systems + *************************************************************************/ + + /** + * Set the x-scale to be the default (between 0.0 and 1.0). + */ + public void setXscale() { setXscale(DEFAULT_XMIN, DEFAULT_XMAX); } + + /** + * Set the y-scale to be the default (between 0.0 and 1.0). + */ + public void setYscale() { setYscale(DEFAULT_YMIN, DEFAULT_YMAX); } + + /** + * Set the x-scale (a 10% border is added to the values) + * @param min the minimum value of the x-scale + * @param max the maximum value of the x-scale + */ + public void setXscale(double min, double max) { + double size = max - min; + xmin = min - BORDER * size; + xmax = max + BORDER * size; + } + + /** + * Set the y-scale (a 10% border is added to the values). + * @param min the minimum value of the y-scale + * @param max the maximum value of the y-scale + */ + public void setYscale(double min, double max) { + double size = max - min; + ymin = min - BORDER * size; + ymax = max + BORDER * size; + } + + // helper functions that scale from user coordinates to screen coordinates and back + private double scaleX(double x) { return width * (x - xmin) / (xmax - xmin); } + private double scaleY(double y) { return height * (ymax - y) / (ymax - ymin); } + private double factorX(double w) { return w * width / Math.abs(xmax - xmin); } + private double factorY(double h) { return h * height / Math.abs(ymax - ymin); } + private double userX(double x) { return xmin + x * (xmax - xmin) / width; } + private double userY(double y) { return ymax - y * (ymax - ymin) / height; } + + + /** + * Clear the screen to the default color (white). + */ + public void clear() { clear(DEFAULT_CLEAR_COLOR); } + /** + * Clear the screen to the given color. + * @param color the Color to make the background + */ + public void clear(Color color) { + offscreen.setColor(color); + offscreen.fillRect(0, 0, width, height); + offscreen.setColor(penColor); + draw(); + } + + /** + * Get the current pen radius. + */ + public double getPenRadius() { return penRadius; } + + /** + * Set the pen size to the default (.002). + */ + public void setPenRadius() { setPenRadius(DEFAULT_PEN_RADIUS); } + + /** + * Set the radius of the pen to the given size. + * @param r the radius of the pen + * @throws RuntimeException if r is negative + */ + public void setPenRadius(double r) { + if (r < 0) throw new RuntimeException("pen radius must be positive"); + penRadius = r * DEFAULT_SIZE; + BasicStroke stroke = new BasicStroke((float) penRadius, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); + // BasicStroke stroke = new BasicStroke((float) penRadius); + offscreen.setStroke(stroke); + } + + /** + * Get the current pen color. + */ + public Color getPenColor() { return penColor; } + + /** + * Set the pen color to the default color (black). + */ + public void setPenColor() { setPenColor(DEFAULT_PEN_COLOR); } + + /** + * Set the pen color to the given color. + * @param color the Color to make the pen + */ + public void setPenColor(Color color) { + penColor = color; + offscreen.setColor(penColor); + } + + /** + * Set the pen color to the given RGB color. + * @param red the amount of red (between 0 and 255) + * @param green the amount of green (between 0 and 255) + * @param blue the amount of blue (between 0 and 255) + * @throws IllegalArgumentException if the amount of red, green, or blue are outside prescribed range + */ + public void setPenColor(int red, int green, int blue) { + if (red < 0 || red >= 256) throw new IllegalArgumentException("amount of red must be between 0 and 255"); + if (green < 0 || green >= 256) throw new IllegalArgumentException("amount of red must be between 0 and 255"); + if (blue < 0 || blue >= 256) throw new IllegalArgumentException("amount of red must be between 0 and 255"); + setPenColor(new Color(red, green, blue)); + } + + + public void xorOn() { offscreen.setXORMode(DEFAULT_CLEAR_COLOR); } + public void xorOff() { offscreen.setPaintMode(); } + + /** + * Get the current font. + */ + public Font getFont() { return font; } + + /** + * Set the font to the default font (sans serif, 16 point). + */ + public void setFont() { setFont(DEFAULT_FONT); } + + /** + * Set the font to the given value. + * @param f the font to make text + */ + public void setFont(Font f) { font = f; } + + + /************************************************************************* + * Drawing geometric shapes. + *************************************************************************/ + + /** + * Draw a line from (x0, y0) to (x1, y1). + * @param x0 the x-coordinate of the starting point + * @param y0 the y-coordinate of the starting point + * @param x1 the x-coordinate of the destination point + * @param y1 the y-coordinate of the destination point + */ + public void line(double x0, double y0, double x1, double y1) { + offscreen.draw(new Line2D.Double(scaleX(x0), scaleY(y0), scaleX(x1), scaleY(y1))); + draw(); + } + + /** + * Draw one pixel at (x, y). + * @param x the x-coordinate of the pixel + * @param y the y-coordinate of the pixel + */ + private void pixel(double x, double y) { + offscreen.fillRect((int) Math.round(scaleX(x)), (int) Math.round(scaleY(y)), 1, 1); + } + + /** + * Draw a point at (x, y). + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + */ + public void point(double x, double y) { + double xs = scaleX(x); + double ys = scaleY(y); + double r = penRadius; + // double ws = factorX(2*r); + // double hs = factorY(2*r); + // if (ws <= 1 && hs <= 1) pixel(x, y); + if (r <= 1) pixel(x, y); + else offscreen.fill(new Ellipse2D.Double(xs - r/2, ys - r/2, r, r)); + draw(); + } + + /** + * Draw a circle of radius r, centered on (x, y). + * @param x the x-coordinate of the center of the circle + * @param y the y-coordinate of the center of the circle + * @param r the radius of the circle + * @throws RuntimeException if the radius of the circle is negative + */ + public void circle(double x, double y, double r) { + if (r < 0) throw new RuntimeException("circle radius can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw filled circle of radius r, centered on (x, y). + * @param x the x-coordinate of the center of the circle + * @param y the y-coordinate of the center of the circle + * @param r the radius of the circle + * @throws RuntimeException if the radius of the circle is negative + */ + public void filledCircle(double x, double y, double r) { + if (r < 0) throw new RuntimeException("circle radius can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + + /** + * Draw an ellipse with given semimajor and semiminor axes, centered on (x, y). + * @param x the x-coordinate of the center of the ellipse + * @param y the y-coordinate of the center of the ellipse + * @param semiMajorAxis is the semimajor axis of the ellipse + * @param semiMinorAxis is the semiminor axis of the ellipse + * @throws RuntimeException if either of the axes are negative + */ + public void ellipse(double x, double y, double semiMajorAxis, double semiMinorAxis) { + if (semiMajorAxis < 0) throw new RuntimeException("ellipse semimajor axis can't be negative"); + if (semiMinorAxis < 0) throw new RuntimeException("ellipse semiminor axis can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*semiMajorAxis); + double hs = factorY(2*semiMinorAxis); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw an ellipse with given semimajor and semiminor axes, centered on (x, y). + * @param x the x-coordinate of the center of the ellipse + * @param y the y-coordinate of the center of the ellipse + * @param semiMajorAxis is the semimajor axis of the ellipse + * @param semiMinorAxis is the semiminor axis of the ellipse + * @throws RuntimeException if either of the axes are negative + */ + public void filledEllipse(double x, double y, double semiMajorAxis, double semiMinorAxis) { + if (semiMajorAxis < 0) throw new RuntimeException("ellipse semimajor axis can't be negative"); + if (semiMinorAxis < 0) throw new RuntimeException("ellipse semiminor axis can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*semiMajorAxis); + double hs = factorY(2*semiMinorAxis); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw an arc of radius r, centered on (x, y), from angle1 to angle2 (in degrees). + * @param x the x-coordinate of the center of the circle + * @param y the y-coordinate of the center of the circle + * @param r the radius of the circle + * @param angle1 the starting angle. 0 would mean an arc beginning at 3 o'clock. + * @param angle2 the angle at the end of the arc. For example, if + * you want a 90 degree arc, then angle2 should be angle1 + 90. + * @throws RuntimeException if the radius of the circle is negative + */ + public void arc(double x, double y, double r, double angle1, double angle2) { + if (r < 0) throw new RuntimeException("arc radius can't be negative"); + while (angle2 < angle1) angle2 += 360; + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Arc2D.Double(xs - ws/2, ys - hs/2, ws, hs, angle1, angle2 - angle1, Arc2D.OPEN)); + draw(); + } + + /** + * Draw a square of side length 2r, centered on (x, y). + * @param x the x-coordinate of the center of the square + * @param y the y-coordinate of the center of the square + * @param r radius is half the length of any side of the square + * @throws RuntimeException if r is negative + */ + public void square(double x, double y, double r) { + if (r < 0) throw new RuntimeException("square side length can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw a filled square of side length 2r, centered on (x, y). + * @param x the x-coordinate of the center of the square + * @param y the y-coordinate of the center of the square + * @param r radius is half the length of any side of the square + * @throws RuntimeException if r is negative + */ + public void filledSquare(double x, double y, double r) { + if (r < 0) throw new RuntimeException("square side length can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + + /** + * Draw a rectangle of given half width and half height, centered on (x, y). + * @param x the x-coordinate of the center of the rectangle + * @param y the y-coordinate of the center of the rectangle + * @param halfWidth is half the width of the rectangle + * @param halfHeight is half the height of the rectangle + * @throws RuntimeException if halfWidth or halfHeight is negative + */ + public void rectangle(double x, double y, double halfWidth, double halfHeight) { + if (halfWidth < 0) throw new RuntimeException("half width can't be negative"); + if (halfHeight < 0) throw new RuntimeException("half height can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*halfWidth); + double hs = factorY(2*halfHeight); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw a filled rectangle of given half width and half height, centered on (x, y). + * @param x the x-coordinate of the center of the rectangle + * @param y the y-coordinate of the center of the rectangle + * @param halfWidth is half the width of the rectangle + * @param halfHeight is half the height of the rectangle + * @throws RuntimeException if halfWidth or halfHeight is negative + */ + public void filledRectangle(double x, double y, double halfWidth, double halfHeight) { + if (halfWidth < 0) throw new RuntimeException("half width can't be negative"); + if (halfHeight < 0) throw new RuntimeException("half height can't be negative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*halfWidth); + double hs = factorY(2*halfHeight); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw a polygon with the given (x[i], y[i]) coordinates. + * @param x an array of all the x-coordindates of the polygon + * @param y an array of all the y-coordindates of the polygon + */ + public void polygon(double[] x, double[] y) { + int N = x.length; + GeneralPath path = new GeneralPath(); + path.moveTo((float) scaleX(x[0]), (float) scaleY(y[0])); + for (int i = 0; i < N; i++) + path.lineTo((float) scaleX(x[i]), (float) scaleY(y[i])); + path.closePath(); + offscreen.draw(path); + draw(); + } + + /** + * Draw a filled polygon with the given (x[i], y[i]) coordinates. + * @param x an array of all the x-coordindates of the polygon + * @param y an array of all the y-coordindates of the polygon + */ + public void filledPolygon(double[] x, double[] y) { + int N = x.length; + GeneralPath path = new GeneralPath(); + path.moveTo((float) scaleX(x[0]), (float) scaleY(y[0])); + for (int i = 0; i < N; i++) + path.lineTo((float) scaleX(x[i]), (float) scaleY(y[i])); + path.closePath(); + offscreen.fill(path); + draw(); + } + + + + /************************************************************************* + * Drawing images. + *************************************************************************/ + + // get an image from the given filename + private Image getImage(String filename) { + + // to read from file + ImageIcon icon = new ImageIcon(filename); + + // try to read from URL + if ((icon == null) || (icon.getImageLoadStatus() != MediaTracker.COMPLETE)) { + try { + URL url = new URL(filename); + icon = new ImageIcon(url); + } catch (Exception e) { /* not a url */ } + } + + // in case file is inside a .jar + if ((icon == null) || (icon.getImageLoadStatus() != MediaTracker.COMPLETE)) { + URL url = Draw.class.getResource(filename); + if (url == null) throw new RuntimeException("image " + filename + " not found"); + icon = new ImageIcon(url); + } + + return icon.getImage(); + } + + /** + * Draw picture (gif, jpg, or png) centered on (x, y). + * @param x the center x-coordinate of the image + * @param y the center y-coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @throws RuntimeException if the image is corrupt + */ + public void picture(double x, double y, String s) { + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = image.getWidth(null); + int hs = image.getHeight(null); + if (ws < 0 || hs < 0) throw new RuntimeException("image " + s + " is corrupt"); + + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), (int) Math.round(ys - hs/2.0), null); + draw(); + } + + /** + * Draw picture (gif, jpg, or png) centered on (x, y), + * rotated given number of degrees + * @param x the center x-coordinate of the image + * @param y the center y-coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @param degrees is the number of degrees to rotate counterclockwise + * @throws RuntimeException if the image is corrupt + */ + public void picture(double x, double y, String s, double degrees) { + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = image.getWidth(null); + int hs = image.getHeight(null); + if (ws < 0 || hs < 0) throw new RuntimeException("image " + s + " is corrupt"); + + offscreen.rotate(Math.toRadians(-degrees), xs, ys); + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), (int) Math.round(ys - hs/2.0), null); + offscreen.rotate(Math.toRadians(+degrees), xs, ys); + + draw(); + } + + /** + * Draw picture (gif, jpg, or png) centered on (x, y), rescaled to w-by-h. + * @param x the center x coordinate of the image + * @param y the center y coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @param w the width of the image + * @param h the height of the image + * @throws RuntimeException if the image is corrupt + */ + public void picture(double x, double y, String s, double w, double h) { + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(w); + double hs = factorY(h); + if (ws < 0 || hs < 0) throw new RuntimeException("image " + s + " is corrupt"); + if (ws <= 1 && hs <= 1) pixel(x, y); + else { + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), + (int) Math.round(ys - hs/2.0), + (int) Math.round(ws), + (int) Math.round(hs), null); + } + draw(); + } + + + /** + * Draw picture (gif, jpg, or png) centered on (x, y), rotated + * given number of degrees, rescaled to w-by-h. + * @param x the center x-coordinate of the image + * @param y the center y-coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @param w the width of the image + * @param h the height of the image + * @param degrees is the number of degrees to rotate counterclockwise + * @throws RuntimeException if the image is corrupt + */ + public void picture(double x, double y, String s, double w, double h, double degrees) { + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(w); + double hs = factorY(h); + if (ws < 0 || hs < 0) throw new RuntimeException("image " + s + " is corrupt"); + if (ws <= 1 && hs <= 1) pixel(x, y); + + offscreen.rotate(Math.toRadians(-degrees), xs, ys); + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), + (int) Math.round(ys - hs/2.0), + (int) Math.round(ws), + (int) Math.round(hs), null); + offscreen.rotate(Math.toRadians(+degrees), xs, ys); + + draw(); + } + + + /************************************************************************* + * Drawing text. + *************************************************************************/ + + /** + * Write the given text string in the current font, centered on (x, y). + * @param x the center x-coordinate of the text + * @param y the center y-coordinate of the text + * @param s the text + */ + public void text(double x, double y, String s) { + offscreen.setFont(font); + FontMetrics metrics = offscreen.getFontMetrics(); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = metrics.stringWidth(s); + int hs = metrics.getDescent(); + offscreen.drawString(s, (float) (xs - ws/2.0), (float) (ys + hs)); + draw(); + } + + /** + * Write the given text string in the current font, centered on (x, y) and + * rotated by the specified number of degrees + * @param x the center x-coordinate of the text + * @param y the center y-coordinate of the text + * @param s the text + * @param degrees is the number of degrees to rotate counterclockwise + */ + public void text(double x, double y, String s, double degrees) { + double xs = scaleX(x); + double ys = scaleY(y); + offscreen.rotate(Math.toRadians(-degrees), xs, ys); + text(x, y, s); + offscreen.rotate(Math.toRadians(+degrees), xs, ys); + } + + /** + * Write the given text string in the current font, left-aligned at (x, y). + * @param x the x-coordinate of the text + * @param y the y-coordinate of the text + * @param s the text + */ + public void textLeft(double x, double y, String s) { + offscreen.setFont(font); + FontMetrics metrics = offscreen.getFontMetrics(); + double xs = scaleX(x); + double ys = scaleY(y); + // int ws = metrics.stringWidth(s); + int hs = metrics.getDescent(); + offscreen.drawString(s, (float) (xs), (float) (ys + hs)); + show(); + } + + + /** + * Display on screen, pause for t milliseconds, and turn on + * animation mode: subsequent calls to + * drawing methods such as line(), circle(), and square() + * will not be displayed on screen until the next call to show(). + * This is useful for producing animations (clear the screen, draw a bunch of shapes, + * display on screen for a fixed amount of time, and repeat). It also speeds up + * drawing a huge number of shapes (call show(0) to defer drawing + * on screen, draw the shapes, and call show(0) to display them all + * on screen at once). + * @param t number of milliseconds + */ + public void show(int t) { + defer = false; + draw(); + try { Thread.sleep(t); } + catch (InterruptedException e) { System.out.println("Error sleeping"); } + defer = true; + } + + + /** + * Display on-screen and turn off animation mode: + * subsequent calls to + * drawing methods such as line(), circle(), and square() + * will be displayed on screen when called. This is the default. + */ + public void show() { + defer = false; + draw(); + } + + // draw onscreen if defer is false + private void draw() { + if (defer) return; + onscreen.drawImage(offscreenImage, 0, 0, null); + frame.repaint(); + } + + + /************************************************************************* + * Save drawing to a file. + *************************************************************************/ + + /** + * Save to file - suffix must be png, jpg, or gif. + * @param filename the name of the file with one of the required suffixes + */ + public void save(String filename) { + File file = new File(filename); + String suffix = filename.substring(filename.lastIndexOf('.') + 1); + + // png files + if (suffix.toLowerCase().equals("png")) { + try { ImageIO.write(offscreenImage, suffix, file); } + catch (IOException e) { e.printStackTrace(); } + } + + // need to change from ARGB to RGB for jpeg + // reference: http://archives.java.sun.com/cgi-bin/wa?A2=ind0404&L=java2d-interest&D=0&P=2727 + else if (suffix.toLowerCase().equals("jpg")) { + WritableRaster raster = offscreenImage.getRaster(); + WritableRaster newRaster; + newRaster = raster.createWritableChild(0, 0, width, height, 0, 0, new int[] {0, 1, 2}); + DirectColorModel cm = (DirectColorModel) offscreenImage.getColorModel(); + DirectColorModel newCM = new DirectColorModel(cm.getPixelSize(), + cm.getRedMask(), + cm.getGreenMask(), + cm.getBlueMask()); + BufferedImage rgbBuffer = new BufferedImage(newCM, newRaster, false, null); + try { ImageIO.write(rgbBuffer, suffix, file); } + catch (IOException e) { e.printStackTrace(); } + } + + else { + System.out.println("Invalid image file type: " + suffix); + } + } + + + /** + * This method cannot be called directly. + */ + public void actionPerformed(ActionEvent e) { + FileDialog chooser = new FileDialog(frame, "Use a .png or .jpg extension", FileDialog.SAVE); + chooser.setVisible(true); + String filename = chooser.getFile(); + if (filename != null) { + save(chooser.getDirectory() + File.separator + chooser.getFile()); + } + } + + + + /************************************************************************* + * Event-based interactions. + *************************************************************************/ + + public void addListener(DrawListener listener) { + // ensure there is a window for listenting to events + show(); + listeners.add(listener); + frame.addKeyListener(this); + frame.addMouseListener(this); + frame.addMouseMotionListener(this); + frame.setFocusable(true); + } + + + + + /************************************************************************* + * Mouse interactions. + *************************************************************************/ + + /** + * Is the mouse being pressed? + * @return true or false + */ + public boolean mousePressed() { + synchronized (mouseLock) { + return mousePressed; + } + } + + /** + * What is the x-coordinate of the mouse? + * @return the value of the x-coordinate of the mouse + */ + public double mouseX() { + synchronized (mouseLock) { + return mouseX; + } + } + + /** + * What is the y-coordinate of the mouse? + * @return the value of the y-coordinate of the mouse + */ + public double mouseY() { + synchronized (mouseLock) { + return mouseY; + } + } + + + + /** + * This method cannot be called directly. + */ + public void mouseClicked(MouseEvent e) { } + + /** + * This method cannot be called directly. + */ + public void mouseEntered(MouseEvent e) { } + + /** + * This method cannot be called directly. + */ + public void mouseExited(MouseEvent e) { } + + /** + * This method cannot be called directly. + */ + public void mousePressed(MouseEvent e) { + synchronized (mouseLock) { + mouseX = userX(e.getX()); + mouseY = userY(e.getY()); + mousePressed = true; + } + if (e.getButton() == MouseEvent.BUTTON1) { + for (DrawListener listener : listeners) + listener.mousePressed(userX(e.getX()), userY(e.getY())); + } + + } + + /** + * This method cannot be called directly. + */ + public void mouseReleased(MouseEvent e) { + synchronized (mouseLock) { + mousePressed = false; + } + if (e.getButton() == MouseEvent.BUTTON1) { + for (DrawListener listener : listeners) + listener.mouseReleased(userX(e.getX()), userY(e.getY())); + } + } + + /** + * This method cannot be called directly. + */ + public void mouseDragged(MouseEvent e) { + synchronized (mouseLock) { + mouseX = userX(e.getX()); + mouseY = userY(e.getY()); + } + // doesn't seem to work if a button is specified + for (DrawListener listener : listeners) + listener.mouseDragged(userX(e.getX()), userY(e.getY())); + } + + /** + * This method cannot be called directly. + */ + public void mouseMoved(MouseEvent e) { + synchronized (mouseLock) { + mouseX = userX(e.getX()); + mouseY = userY(e.getY()); + } + } + + + /************************************************************************* + * Keyboard interactions. + *************************************************************************/ + + /** + * Has the user typed a key? + * @return true if the user has typed a key, false otherwise + */ + public boolean hasNextKeyTyped() { + synchronized (keyLock) { + return !keysTyped.isEmpty(); + } + } + + /** + * What is the next key that was typed by the user? + * @return the next key typed + */ + public char nextKeyTyped() { + synchronized (keyLock) { + return keysTyped.removeLast(); + } + } + + /** + * Is the keycode currently being pressed? This method takes as an argument + * the keycode (corresponding to a physical key). It can handle action keys + * (such as F1 and arrow keys) and modifier keys (such as shift and control). + * See KeyEvent.java + * for a description of key codes. + * @return true if keycode is currently being pressed, false otherwise + */ + public boolean isKeyPressed(int keycode) { + synchronized (keyLock) { + return keysDown.contains(keycode); + } + } + + + /** + * This method cannot be called directly. + */ + public void keyTyped(KeyEvent e) { + synchronized (keyLock) { + keysTyped.addFirst(e.getKeyChar()); + } + + // notify all listeners + for (DrawListener listener : listeners) + listener.keyTyped(e.getKeyChar()); + } + + /** + * This method cannot be called directly. + */ + public void keyPressed(KeyEvent e) { + synchronized (keyLock) { + keysDown.add(e.getKeyCode()); + } + } + + /** + * This method cannot be called directly. + */ + public void keyReleased(KeyEvent e) { + synchronized (keyLock) { + keysDown.remove(e.getKeyCode()); + } + } + + + + + /** + * Test client. + */ + public static void main(String[] args) { + + // create one drawing window + Draw draw1 = new Draw("Test client 1"); + draw1.square(.2, .8, .1); + draw1.filledSquare(.8, .8, .2); + draw1.circle(.8, .2, .2); + draw1.setPenColor(Draw.MAGENTA); + draw1.setPenRadius(.02); + draw1.arc(.8, .2, .1, 200, 45); + + + // create another one + Draw draw2 = new Draw("Test client 2"); + draw2.setCanvasSize(900, 200); + // draw a blue diamond + draw2.setPenRadius(); + draw2.setPenColor(Draw.BLUE); + double[] x = { .1, .2, .3, .2 }; + double[] y = { .2, .3, .2, .1 }; + draw2.filledPolygon(x, y); + + // text + draw2.setPenColor(Draw.BLACK); + draw2.text(0.2, 0.5, "bdfdfdfdlack text"); + draw2.setPenColor(Draw.WHITE); + draw2.text(0.8, 0.8, "white text"); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/DrawListener.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/DrawListener.java new file mode 100644 index 000000000..492b57132 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/DrawListener.java @@ -0,0 +1,6 @@ +public interface DrawListener { + public void mousePressed (double x, double y); + public void mouseDragged (double x, double y); + public void mouseReleased(double x, double y); + public void keyTyped(char c); +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/In.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/In.java new file mode 100644 index 000000000..f48f40d83 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/In.java @@ -0,0 +1,524 @@ +/************************************************************************* + * Compilation: javac In.java + * Execution: java In (basic test --- see source for required files) + * + * Reads in data of various types from standard input, files, and URLs. + * + *************************************************************************/ + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.HttpURLConnection; +import java.net.URLConnection; +import java.util.Scanner; +import java.util.regex.Pattern; + +/** + * Input. This class provides methods for reading strings + * and numbers from standard input, file input, URLs, and sockets. + *

    + * The Locale used is: language = English, country = US. This is consistent + * with the formatting conventions with Java floating-point literals, + * command-line arguments (via {@link Double#parseDouble(String)}) + * and standard output. + *

    + * For additional documentation, see + * Section 3.1 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + *

    + * Like {@link Scanner}, reading a token also consumes preceding Java + * whitespace, reading a full line consumes + * the following end-of-line delimeter, while reading a character consumes + * nothing extra. + *

    + * Whitespace is defined in {@link Character#isWhitespace(char)}. Newlines + * consist of \n, \r, \r\n, and Unicode hex code points 0x2028, 0x2029, 0x0085; + * see + * Scanner.java (NB: Java 6u23 and earlier uses only \r, \r, \r\n). + * + * @author David Pritchard + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class In { + + private Scanner scanner; + + /*** begin: section (1 of 2) of code duplicated from In to StdIn */ + + // assume Unicode UTF-8 encoding + private static final String charsetName = "UTF-8"; + + // assume language = English, country = US for consistency with System.out. + private static final java.util.Locale usLocale = + new java.util.Locale("en", "US"); + + // the default token separator; we maintain the invariant that this value + // is held by the scanner's delimiter between calls + private static final Pattern WHITESPACE_PATTERN + = Pattern.compile("\\p{javaWhitespace}+"); + + // makes whitespace characters significant + private static final Pattern EMPTY_PATTERN + = Pattern.compile(""); + + // used to read the entire input. source: + // http://weblogs.java.net/blog/pat/archive/2004/10/stupid_scanner_1.html + private static final Pattern EVERYTHING_PATTERN + = Pattern.compile("\\A"); + + /*** end: section (1 of 2) of code duplicated from In to StdIn */ + + /** + * Create an input stream from standard input. + */ + public In() { + scanner = new Scanner(new BufferedInputStream(System.in), charsetName); + scanner.useLocale(usLocale); + } + + /** + * Create an input stream from a socket. + */ + public In(java.net.Socket socket) { + try { + InputStream is = socket.getInputStream(); + scanner = new Scanner(new BufferedInputStream(is), charsetName); + scanner.useLocale(usLocale); + } + catch (IOException ioe) { + System.err.println("Could not open " + socket); + } + } + + /** + * Create an input stream from a URL. + */ + public In(URL url) { + try { + URLConnection site = url.openConnection(); + InputStream is = site.getInputStream(); + scanner = new Scanner(new BufferedInputStream(is), charsetName); + scanner.useLocale(usLocale); + } + catch (IOException ioe) { + System.err.println("Could not open " + url); + } + } + + /** + * Create an input stream from a file. + */ + public In(File file) { + try { + scanner = new Scanner(file, charsetName); + scanner.useLocale(usLocale); + } + catch (IOException ioe) { + System.err.println("Could not open " + file); + } + } + + + /** + * Create an input stream from a filename or web page name. + */ + public In(String s) { + try { + // first try to read file from local file system + File file = new File(s); + if (file.exists()) { + scanner = new Scanner(file, charsetName); + scanner.useLocale(usLocale); + return; + } + + // next try for files included in jar + URL url = getClass().getResource(s); + + // or URL from web + if (url == null) { url = new URL(s); } + + URLConnection site = url.openConnection(); + + // in order to set User-Agent, replace above line with these two + // HttpURLConnection site = (HttpURLConnection) url.openConnection(); + // site.addRequestProperty("User-Agent", "Mozilla/4.76"); + + InputStream is = site.getInputStream(); + scanner = new Scanner(new BufferedInputStream(is), charsetName); + scanner.useLocale(usLocale); + } + catch (IOException ioe) { + System.err.println("Could not open " + s); + } + } + + /** + * Create an input stream from a given Scanner source; use with + * new Scanner(String) to read from a string. + *

    + * Note that this does not create a defensive copy, so the + * scanner will be mutated as you read on. + */ + public In(Scanner scanner) { + this.scanner = scanner; + } + + /** + * Does the input stream exist? + */ + public boolean exists() { + return scanner != null; + } + + /*** begin: section (2 of 2) of code duplicated from In to StdIn, + * with all methods changed from "public" to "public static" ***/ + + /** + * Is the input empty (except possibly for whitespace)? Use this + * to know whether the next call to {@link #readString()}, + * {@link #readDouble()}, etc will succeed. + */ + public boolean isEmpty() { + return !scanner.hasNext(); + } + + /** + * Does the input have a next line? Use this to know whether the + * next call to {@link #readLine()} will succeed.

    Functionally + * equivalent to {@link #hasNextChar()}. + */ + public boolean hasNextLine() { + return scanner.hasNextLine(); + } + + /** + * Is the input empty (including whitespace)? Use this to know + * whether the next call to {@link #readChar()} will succeed.

    Functionally + * equivalent to {@link #hasNextLine()}. + */ + public boolean hasNextChar() { + scanner.useDelimiter(EMPTY_PATTERN); + boolean result = scanner.hasNext(); + scanner.useDelimiter(WHITESPACE_PATTERN); + return result; + } + + + /** + * Read and return the next line. + */ + public String readLine() { + String line; + try { line = scanner.nextLine(); } + catch (Exception e) { line = null; } + return line; + } + + /** + * Read and return the next character. + */ + public char readChar() { + scanner.useDelimiter(EMPTY_PATTERN); + String ch = scanner.next(); + assert (ch.length() == 1) : "Internal (Std)In.readChar() error!" + + " Please contact the authors."; + scanner.useDelimiter(WHITESPACE_PATTERN); + return ch.charAt(0); + } + + + /** + * Read and return the remainder of the input as a string. + */ + public String readAll() { + if (!scanner.hasNextLine()) + return ""; + + String result = scanner.useDelimiter(EVERYTHING_PATTERN).next(); + // not that important to reset delimeter, since now scanner is empty + scanner.useDelimiter(WHITESPACE_PATTERN); // but let's do it anyway + return result; + } + + + /** + * Read and return the next string. + */ + public String readString() { + return scanner.next(); + } + + /** + * Read and return the next int. + */ + public int readInt() { + return scanner.nextInt(); + } + + /** + * Read and return the next double. + */ + public double readDouble() { + return scanner.nextDouble(); + } + + /** + * Read and return the next float. + */ + public float readFloat() { + return scanner.nextFloat(); + } + + /** + * Read and return the next long. + */ + public long readLong() { + return scanner.nextLong(); + } + + /** + * Read and return the next short. + */ + public short readShort() { + return scanner.nextShort(); + } + + /** + * Read and return the next byte. + */ + public byte readByte() { + return scanner.nextByte(); + } + + /** + * Read and return the next boolean, allowing case-insensitive + * "true" or "1" for true, and "false" or "0" for false. + */ + public boolean readBoolean() { + String s = readString(); + if (s.equalsIgnoreCase("true")) return true; + if (s.equalsIgnoreCase("false")) return false; + if (s.equals("1")) return true; + if (s.equals("0")) return false; + throw new java.util.InputMismatchException(); + } + + /** + * Read all strings until the end of input is reached, and return them. + */ + public String[] readAllStrings() { + // we could use readAll.trim().split(), but that's not consistent + // since trim() uses characters 0x00..0x20 as whitespace + String[] tokens = WHITESPACE_PATTERN.split(readAll()); + if (tokens.length == 0 || tokens[0].length() > 0) + return tokens; + String[] decapitokens = new String[tokens.length-1]; + for (int i = 0; i < tokens.length-1; i++) + decapitokens[i] = tokens[i+1]; + return decapitokens; + } + + /** + * Read all ints until the end of input is reached, and return them. + */ + public int[] readAllInts() { + String[] fields = readAllStrings(); + int[] vals = new int[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Integer.parseInt(fields[i]); + return vals; + } + + /** + * Read all doubles until the end of input is reached, and return them. + */ + public double[] readAllDoubles() { + String[] fields = readAllStrings(); + double[] vals = new double[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Double.parseDouble(fields[i]); + return vals; + } + + /*** end: section (2 of 2) of code duplicated from In to StdIn */ + + /** + * Close the input stream. + */ + public void close() { + scanner.close(); + } + + /** + * Reads all ints from a file + * @deprecated Clearer to use + * new In(filename).{@link #readAllInts()} + */ + public static int[] readInts(String filename) { + return new In(filename).readAllInts(); + } + + /** + * Reads all doubles from a file + * @deprecated Clearer to use + * new In(filename).{@link #readAllDoubles()} + */ + public static double[] readDoubles(String filename) { + return new In(filename).readAllDoubles(); + } + + /** + * Reads all strings from a file + * @deprecated Clearer to use + * new In(filename).{@link #readAllStrings()} + */ + public static String[] readStrings(String filename) { + return new In(filename).readAllStrings(); + } + + /** + * Reads all ints from stdin + * @deprecated Clearer to use {@link StdIn#readAllInts()} + */ + public static int[] readInts() { + return new In().readAllInts(); + } + + /** + * Reads all doubles from stdin + * @deprecated Clearer to use {@link StdIn#readAllDoubles()} + */ + public static double[] readDoubles() { + return new In().readAllDoubles(); + } + + /** + * Reads all strings from stdin + * @deprecated Clearer to use {@link StdIn#readAllStrings()} + */ + public static String[] readStrings() { + return new In().readAllStrings(); + } + + /** + * Test client. + */ + public static void main(String[] args) { + In in; + String urlName = "http://introcs.cs.princeton.edu/stdlib/InTest.txt"; + + // read from a URL + System.out.println("readAll() from URL " + urlName); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In(urlName); + System.out.println(in.readAll()); + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + // read one line at a time from URL + System.out.println("readLine() from URL " + urlName); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In(urlName); + while (!in.isEmpty()) { + String s = in.readLine(); + System.out.println(s); + } + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + // read one string at a time from URL + System.out.println("readString() from URL " + urlName); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In(urlName); + while (!in.isEmpty()) { + String s = in.readString(); + System.out.println(s); + } + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + + // read one line at a time from file in current directory + System.out.println("readLine() from current directory"); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In("./InTest.txt"); + while (!in.isEmpty()) { + String s = in.readLine(); + System.out.println(s); + } + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + + // read one line at a time from file using relative path + System.out.println("readLine() from relative path"); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In("../stdlib/InTest.txt"); + while (!in.isEmpty()) { + String s = in.readLine(); + System.out.println(s); + } + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + // read one char at a time + System.out.println("readChar() from file"); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In("InTest.txt"); + while (!in.isEmpty()) { + char c = in.readChar(); + System.out.print(c); + } + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + System.out.println(); + + // read one line at a time from absolute OS X / Linux path + System.out.println("readLine() from absolute OS X / Linux path"); + System.out.println("---------------------------------------------------------------------------"); + in = new In("/n/fs/introcs/www/java/stdlib/InTest.txt"); + try { + while (!in.isEmpty()) { + String s = in.readLine(); + System.out.println(s); + } + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + + // read one line at a time from absolute Windows path + System.out.println("readLine() from absolute Windows path"); + System.out.println("---------------------------------------------------------------------------"); + try { + in = new In("G:\\www\\introcs\\stdlib\\InTest.txt"); + while (!in.isEmpty()) { + String s = in.readLine(); + System.out.println(s); + } + System.out.println(); + } + catch (Exception e) { System.out.println(e); } + System.out.println(); + + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/InTest.txt b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/InTest.txt new file mode 100644 index 000000000..753b42d51 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/InTest.txt @@ -0,0 +1,2 @@ +This is a test file. +Here is line 2. diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Out.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Out.java new file mode 100644 index 000000000..7609df984 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Out.java @@ -0,0 +1,259 @@ +/************************************************************************* + * Compilation: javac Out.java + * Execution: java Out + * + * Writes data of various types to: stdout, file, or socket. + * + *************************************************************************/ + + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.Locale; + +/** + * This class provides methods for writing strings and numbers to + * various output streams, including standard output, file, and sockets. + *

    + * For additional documentation, see + * Section 3.1 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Out { + + // force Unicode UTF-8 encoding; otherwise it's system dependent + private static String charsetName = "UTF-8"; + + // assume language = English, country = US for consistency with In + private static final Locale US_LOCALE = new Locale("en", "US"); + + private PrintWriter out; + + /** + * Create an Out object using an OutputStream. + */ + public Out(OutputStream os) { + try { + OutputStreamWriter osw = new OutputStreamWriter(os, charsetName); + out = new PrintWriter(osw, true); + } + catch (IOException e) { e.printStackTrace(); } + } + + /** + * Create an Out object using standard output. + */ + public Out() { this(System.out); } + + /** + * Create an Out object using a Socket. + */ + public Out(Socket socket) { + try { + OutputStream os = socket.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, charsetName); + out = new PrintWriter(osw, true); + } + catch (IOException e) { e.printStackTrace(); } + } + + /** + * Create an Out object using a file specified by the given name. + */ + public Out(String s) { + try { + OutputStream os = new FileOutputStream(s); + OutputStreamWriter osw = new OutputStreamWriter(os, charsetName); + out = new PrintWriter(osw, true); + } + catch (IOException e) { e.printStackTrace(); } + } + + /** + * Close the output stream. + */ + public void close() { out.close(); } + + + + /** + * Terminate the line. + */ + public void println() { + out.println(); + } + + /** + * Print an object and then terminate the line. + */ + public void println(Object x) { + out.println(x); + } + + /** + * Print a boolean and then terminate the line. + */ + public void println(boolean x) { + out.println(x); + } + + /** + * Print a char and then terminate the line. + */ + public void println(char x) { + out.println(x); + } + + /** + * Print an double and then terminate the line. + */ + public void println(double x) { + out.println(x); + } + + /** + * Print a float and then terminate the line. + */ + public void println(float x) { + out.println(x); + } + + /** + * Print an int and then terminate the line. + */ + public void println(int x) { + out.println(x); + } + + /** + * Print a long and then terminate the line. + */ + public void println(long x) { + out.println(x); + } + + /** + * Print a byte and then terminate the line. + */ + public void println(byte x) { + out.println(x); + } + + + + /** + * Flush the output stream. + */ + public void print() { + out.flush(); + } + + /** + * Print an object and then flush the output stream. + */ + public void print(Object x) { + out.print(x); + out.flush(); + } + + /** + * Print an boolean and then flush the output stream. + */ + public void print(boolean x) { + out.print(x); + out.flush(); + } + + /** + * Print an char and then flush the output stream. + */ + public void print(char x) { + out.print(x); + out.flush(); + } + + /** + * Print an double and then flush the output stream. + */ + public void print(double x) { + out.print(x); + out.flush(); + } + + /** + * Print a float and then flush the output stream. + */ + public void print(float x) { + out.print(x); + out.flush(); + } + + /** + * Print an int and then flush the output stream. + */ + public void print(int x) { + out.print(x); + out.flush(); + } + + /** + * Print a long and then flush the output stream. + */ + public void print(long x) { + out.print(x); + out.flush(); + } + + /** + * Print a byte and then flush the output stream. + */ + public void print(byte x) { + out.print(x); + out.flush(); + } + + /** + * Print a formatted string using the specified format string and arguments, + * and then flush the output stream. + */ + public void printf(String format, Object... args) { + out.printf(US_LOCALE, format, args); + out.flush(); + } + + /** + * Print a formatted string using the specified locale, format string and arguments, + * and then flush the output stream. + */ + public void printf(Locale locale, String format, Object... args) { + out.printf(locale, format, args); + out.flush(); + } + + + /** + * A test client. + */ + public static void main(String[] args) { + Out out; + + // write to stdout + out = new Out(); + out.println("Test 1"); + out.close(); + + // write to a file + out = new Out("test.txt"); + out.println("Test 2"); + out.close(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Picture.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Picture.java new file mode 100644 index 000000000..fe9f1d0e3 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Picture.java @@ -0,0 +1,288 @@ +/************************************************************************* + * Compilation: javac Picture.java + * Execution: java Picture imagename + * + * Data type for manipulating individual pixels of an image. The original + * image can be read from a file in jpg, gif, or png format, or the + * user can create a blank image of a given size. Includes methods for + * displaying the image in a window on the screen or saving to a file. + * + * % java Picture mandrill.jpg + * + * Remarks + * ------- + * - pixel (x, y) is column x and row y, where (0, 0) is upper left + * + * - see also GrayPicture.java for a grayscale version + * + *************************************************************************/ + +import java.awt.Color; +import java.awt.FileDialog; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.KeyStroke; + + +/** + * This class provides methods for manipulating individual pixels of + * an image. The original image can be read from a file in JPEG, GIF, + * or PNG format, or the user can create a blank image of a given size. + * This class includes methods for displaying the image in a window on + * the screen or saving to a file. + *

    + * By default, pixel (x, y) is column x, row y, where (0, 0) is upper left. + * The method setOriginLowerLeft() change the origin to the lower left. + *

    + * For additional documentation, see + * Section 3.1 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class Picture implements ActionListener { + private BufferedImage image; // the rasterized image + private JFrame frame; // on-screen view + private String filename; // name of file + private boolean isOriginUpperLeft = true; // location of origin + private final int width, height; // width and height + + /** + * Create a blank w-by-h picture, where each pixel is black. + */ + public Picture(int w, int h) { + width = w; + height = h; + image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + // set to TYPE_INT_ARGB to support transparency + filename = w + "-by-" + h; + } + + /** + * Copy constructor. + */ + public Picture(Picture pic) { + width = pic.width(); + height = pic.height(); + image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + filename = pic.filename; + for (int i = 0; i < width(); i++) + for (int j = 0; j < height(); j++) + image.setRGB(i, j, pic.get(i, j).getRGB()); + } + + /** + * Create a picture by reading in a .png, .gif, or .jpg from + * the given filename or URL name. + */ + public Picture(String filename) { + this.filename = filename; + try { + // try to read from file in working directory + File file = new File(filename); + if (file.isFile()) { + image = ImageIO.read(file); + } + + // now try to read from file in same directory as this .class file + else { + URL url = getClass().getResource(filename); + if (url == null) { url = new URL(filename); } + image = ImageIO.read(url); + } + width = image.getWidth(null); + height = image.getHeight(null); + } + catch (IOException e) { + // e.printStackTrace(); + throw new RuntimeException("Could not open file: " + filename); + } + } + + /** + * Create a picture by reading in a .png, .gif, or .jpg from a File. + */ + public Picture(File file) { + try { image = ImageIO.read(file); } + catch (IOException e) { + e.printStackTrace(); + throw new RuntimeException("Could not open file: " + file); + } + if (image == null) { + throw new RuntimeException("Invalid image file: " + file); + } + width = image.getWidth(null); + height = image.getHeight(null); + filename = file.getName(); + } + + /** + * Return a JLabel containing this Picture, for embedding in a JPanel, + * JFrame or other GUI widget. + */ + public JLabel getJLabel() { + if (image == null) { return null; } // no image available + ImageIcon icon = new ImageIcon(image); + return new JLabel(icon); + } + + /** + * Set the origin to be the upper left pixel. + */ + public void setOriginUpperLeft() { + isOriginUpperLeft = true; + } + + /** + * Set the origin to be the lower left pixel. + */ + public void setOriginLowerLeft() { + isOriginUpperLeft = false; + } + + /** + * Display the picture in a window on the screen. + */ + public void show() { + + // create the GUI for viewing the image if needed + if (frame == null) { + frame = new JFrame(); + + JMenuBar menuBar = new JMenuBar(); + JMenu menu = new JMenu("File"); + menuBar.add(menu); + JMenuItem menuItem1 = new JMenuItem(" Save... "); + menuItem1.addActionListener(this); + menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + menu.add(menuItem1); + frame.setJMenuBar(menuBar); + + + + frame.setContentPane(getJLabel()); + // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + frame.setTitle(filename); + frame.setResizable(false); + frame.pack(); + frame.setVisible(true); + } + + // draw + frame.repaint(); + } + + /** + * Return the height of the picture in pixels. + */ + public int height() { + return height; + } + + /** + * Return the width of the picture in pixels. + */ + public int width() { + return width; + } + + /** + * Return the color of pixel (i, j). + */ + public Color get(int i, int j) { + if (isOriginUpperLeft) return new Color(image.getRGB(i, j)); + else return new Color(image.getRGB(i, height - j - 1)); + } + + /** + * Set the color of pixel (i, j) to c. + */ + public void set(int i, int j, Color c) { + if (c == null) { throw new RuntimeException("can't set Color to null"); } + if (isOriginUpperLeft) image.setRGB(i, j, c.getRGB()); + else image.setRGB(i, height - j - 1, c.getRGB()); + } + + /** + * Is this Picture equal to obj? + */ + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null) return false; + if (obj.getClass() != this.getClass()) return false; + Picture that = (Picture) obj; + if (this.width() != that.width()) return false; + if (this.height() != that.height()) return false; + for (int x = 0; x < width(); x++) + for (int y = 0; y < height(); y++) + if (!this.get(x, y).equals(that.get(x, y))) return false; + return true; + } + + + /** + * Save the picture to a file in a standard image format. + * The filetype must be .png or .jpg. + */ + public void save(String name) { + save(new File(name)); + } + + /** + * Save the picture to a file in a standard image format. + */ + public void save(File file) { + this.filename = file.getName(); + if (frame != null) { frame.setTitle(filename); } + String suffix = filename.substring(filename.lastIndexOf('.') + 1); + suffix = suffix.toLowerCase(); + if (suffix.equals("jpg") || suffix.equals("png")) { + try { ImageIO.write(image, suffix, file); } + catch (IOException e) { e.printStackTrace(); } + } + else { + System.out.println("Error: filename must end in .jpg or .png"); + } + } + + /** + * Opens a save dialog box when the user selects "Save As" from the menu. + */ + public void actionPerformed(ActionEvent e) { + FileDialog chooser = new FileDialog(frame, + "Use a .png or .jpg extension", FileDialog.SAVE); + chooser.setVisible(true); + if (chooser.getFile() != null) { + save(chooser.getDirectory() + File.separator + chooser.getFile()); + } + } + + + /** + * Test client. Reads a picture specified by the command-line argument, + * and shows it in a window on the screen. + */ + public static void main(String[] args) { + Picture pic = new Picture(args[0]); + System.out.printf("%d-by-%d\n", pic.width(), pic.height()); + pic.show(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Point.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Point.java new file mode 100644 index 000000000..60bcace44 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Point.java @@ -0,0 +1,51 @@ +/************************************************************************* + * Compilation: javac Point.java + * Execution: java Point + * + * Immutable data type for 2D points. + * + *************************************************************************/ + +public class Point { + private double x; // Cartesian + private double y; // coordinates + + // create and initialize a point with given (x, y) + public Point(double x, double y) { + this.x = x; + this.y = y; + } + + // return Euclidean distance between invoking point p and q + public double distanceTo(Point that) { + double dx = this.x - that.x; + double dy = this.y - that.y; + return Math.sqrt(dx*dx + dy*dy); + } + + // draw point using standard draw + public void draw() { + StdDraw.point(x, y); + } + + // draw the line from the invoking point p to q using standard draw + public void drawTo(Point that) { + StdDraw.line(this.x, this.y, that.x, that.y); + } + + // return string representation of this point + public String toString() { + return "(" + x + ", " + y + ")"; + } + + + + // test client + public static void main(String[] args) { + Point p = new Point(0.6, 0.2); + System.out.println("p = " + p); + Point q = new Point(0.5, 0.5); + System.out.println("q = " + q); + System.out.println("dist(p, q) = " + p.distanceTo(q)); + } +} \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Queue.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Queue.java new file mode 100644 index 000000000..a35c19a9b --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Queue.java @@ -0,0 +1,161 @@ +/************************************************************************* + * Compilation: javac Queue.java + * Execution: java Queue < input.txt + * Data files: http://algs4.cs.princeton.edu/13stacks/tobe.txt + * + * A generic queue, implemented using a linked list. + * + * % java Queue < tobe.txt + * to be or not to be (2 left on queue) + * + *************************************************************************/ + +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * The Queue class represents a first-in-first-out (FIFO) + * queue of generic items. + * It supports the usual enqueue and dequeue + * operations, along with methods for peeking at the first item, + * testing if the queue is empty, and iterating through + * the items in FIFO order. + *

    + * This implementation uses a singly-linked list with a static nested class for + * linked-list nodes. See {@link LinkedQueue} for the version from the + * textbook that uses a non-static nested class. + * The enqueue, dequeue, peek, size, and is-empty + * operations all take constant time in the worst case. + *

    + * For additional documentation, see Section 1.3 of + * Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Queue implements Iterable { + private int N; // number of elements on queue + private Node first; // beginning of queue + private Node last; // end of queue + + // helper linked list class + private static class Node { + private Item item; + private Node next; + } + + /** + * Initializes an empty queue. + */ + public Queue() { + first = null; + last = null; + N = 0; + } + + /** + * Is this queue empty? + * @return true if this queue is empty; false otherwise + */ + public boolean isEmpty() { + return first == null; + } + + /** + * Returns the number of items in this queue. + * @return the number of items in this queue + */ + public int size() { + return N; + } + + /** + * Returns the item least recently added to this queue. + * @return the item least recently added to this queue + * @throws java.util.NoSuchElementException if this queue is empty + */ + public Item peek() { + if (isEmpty()) throw new NoSuchElementException("Queue underflow"); + return first.item; + } + + /** + * Adds the item to this queue. + * @param item the item to add + */ + public void enqueue(Item item) { + Node oldlast = last; + last = new Node(); + last.item = item; + last.next = null; + if (isEmpty()) first = last; + else oldlast.next = last; + N++; + } + + /** + * Removes and returns the item on this queue that was least recently added. + * @return the item on this queue that was least recently added + * @throws java.util.NoSuchElementException if this queue is empty + */ + public Item dequeue() { + if (isEmpty()) throw new NoSuchElementException("Queue underflow"); + Item item = first.item; + first = first.next; + N--; + if (isEmpty()) last = null; // to avoid loitering + return item; + } + + /** + * Returns a string representation of this queue. + * @return the sequence of items in FIFO order, separated by spaces + */ + public String toString() { + StringBuilder s = new StringBuilder(); + for (Item item : this) + s.append(item + " "); + return s.toString(); + } + + /** + * Returns an iterator that iterates over the items in this queue in FIFO order. + * @return an iterator that iterates over the items in this queue in FIFO order + */ + public Iterator iterator() { + return new ListIterator(first); + } + + // an iterator, doesn't implement remove() since it's optional + private class ListIterator implements Iterator { + private Node current; + + public ListIterator(Node first) { + current = first; + } + + public boolean hasNext() { return current != null; } + public void remove() { throw new UnsupportedOperationException(); } + + public Item next() { + if (!hasNext()) throw new NoSuchElementException(); + Item item = current.item; + current = current.next; + return item; + } + } + + + /** + * Unit tests the Queue data type. + */ + public static void main(String[] args) { + Queue q = new Queue(); + while (!StdIn.isEmpty()) { + String item = StdIn.readString(); + if (!item.equals("-")) q.enqueue(item); + else if (!q.isEmpty()) StdOut.print(q.dequeue() + " "); + } + StdOut.println("(" + q.size() + " left on queue)"); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/ST.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/ST.java new file mode 100644 index 000000000..b5e786ae5 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/ST.java @@ -0,0 +1,296 @@ +/************************************************************************* + * Compilation: javac ST.java + * Execution: java ST + * + * Sorted symbol table implementation using a java.util.TreeMap. + * Does not allow duplicates. + * + * % java ST + * + *************************************************************************/ + +// This modified version by Will Gwozdz to make it visualizable! + +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.SortedMap; +import java.util.Set; +import java.util.TreeSet; + +/** + * The ST class represents an ordered symbol table of generic + * key-value pairs. + * It supports the usual put, get, contains, + * delete, size, and is-empty methods. + * It also provides ordered methods for finding the minimum, + * maximum, floor, and ceiling. + * It also provides a keys method for iterating over all of the keys. + * A symbol table implements the associative array abstraction: + * when associating a value with a key that is already in the symbol table, + * the convention is to replace the old value with the new value. + * Unlike {@link java.util.Map}, this class uses the convention that + * values cannot be null—setting the + * value associated with a key to null is equivalent to deleting the key + * from the symbol table. + *

    + * This implementation uses a balanced binary search tree. It requires that + * the key type implements the Comparable interface and calls the + * compareTo() and method to compare two keys. It does not call either + * equals() or hashCode(). + * The put, contains, remove, minimum, + * maximum, ceiling, and floor operations each take + * logarithmic time in the worst case. + * The size, and is-empty operations take constant time. + * Construction takes constant time. + *

    + * For additional documentation, see Section 4.4 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + */ +public class ST, Value> implements Iterable { + private class Node { + Key key; + Value value; + Node left; + Node right; + } + + private Node first; + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and null if the key is not in the symbol table + * @throws NullPointerException if key is null + */ + public Value get(Key key) { + if (key == null) throw new NullPointerException("called get() with null key"); + Node n = first; + while (n != null) { + if (key.compareTo(n.key) < 0) + n = n.left; + else if (key.compareTo(n.key) > 0) + n = n.right; + else + return n.value; + } + return null; + } + + /** + * Inserts the key-value pair into the symbol table, overwriting the old value + * with the new value if the key is already in the symbol table. + * If the value is null, this effectively deletes the key from the symbol table. + * @param key the key + * @param val the value + * @throws NullPointerException if key is null + */ + public void put(Key key, Value val) { + if (key == null) throw new NullPointerException("called put() with null key"); + //if (val == null) return delete(key); // restore this once delete is implemented. + Node add = new Node(); + add.key = key; + add.value = val; + if (first == null) + first = add; + else { + Node n = first; + while (true) { + if (key.compareTo(n.key) < 0) { + if (n.left == null) { + n.left = add; + return; + } + n = n.left; + } + else if (key.compareTo(n.key) > 0) { + if (n.right == null) { + n.right = add; + return; + } + n = n.right; + } + else { + n.value = val; + return; + } + } + } + } + + /** + * Removes the key and associated value from the symbol table + * (if the key is in the symbol table). + * @param key the key + * @throws NullPointerException if key is null + */ + public void delete(Key key) { + if (key == null) throw new NullPointerException("called delete() with null key"); + put(key, null); // simply put a null value for now. a node with a null value counts as deleted. + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return true if this symbol table contains key and + * false otherwise + * @throws NullPointerException if key is null + */ + public boolean contains(Key key) { + if (key == null) throw new NullPointerException("called contains() with null key"); + return (get(key) != null); + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return rCounter(first); + } + + private int rCounter(Node n) { + if (n == null || n.value == null) return 0; + else return (1+rCounter(n.left)+rCounter(n.right)); + } + /** + * Is this symbol table empty? + * @return true if this symbol table is empty and false otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns all keys in the symbol table as an Iterable. + * To iterate over all of the keys in the symbol table named st, + * use the foreach notation: for (Key key : st.keys()). + * @return all keys in the sybol table as an Iterable + */ + public Iterable keys() { + Set keys = new TreeSet(); + return rKeys(keys, first); + } + + private Set rKeys(Set keys, Node n) { + if (n != null) { + rKeys(keys, n.right); + if (n.value != null) + keys.add(n.key); + rKeys(keys, n.left); + } + return keys; + } + + /** + * Returns all of the keys in the symbol table as an iterator. + * To iterate over all of the keys in a symbol table named st, use the + * foreach notation: for (Key key : st). + * @return an iterator to all of the keys in the symbol table + */ + public Iterator iterator() { + return keys().iterator(); + } + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("called min() with empty symbol table"); + Node n = first; + while (n.left != null) + n = n.left; + return n.key; + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("called max() with empty symbol table"); + Node n = first; + while (n.right != null) + n = n.right; + return n.key; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to key. + * @return the smallest key in the symbol table greater than or equal to key + * @param key the key + * @throws NoSuchElementException if the symbol table is empty + * @throws NullPointerException if key is null + */ + public Key ceil(Key key) { + if (key == null) throw new NullPointerException("called ceil() with null key"); + throw new RuntimeException("didnt bother inplementing ceil yet"); + } + + /** + * Returns the largest key in the symbol table less than or equal to key. + * @return the largest key in the symbol table less than or equal to key + * @param key the key + * @throws NoSuchElementException if the symbol table is empty + * @throws NullPointerException if key is null + */ + public Key floor(Key key) { + if (key == null) throw new NullPointerException("called floor() with null key"); + throw new RuntimeException("didnt bother inplementing ceil yet"); + } + + /** + * Unit tests the ST data type. + */ + public static void main(String[] args) { + ST st = new ST(); + + // insert some key-value pairs + st.put("www.cs.princeton.edu", "128.112.136.11"); + st.put("www.cs.princeton.edu", "128.112.136.35"); // overwrite old value + st.put("www.princeton.edu", "128.112.130.211"); + st.put("www.math.princeton.edu", "128.112.18.11"); + st.put("www.yale.edu", "130.132.51.8"); + st.put("www.amazon.com", "207.171.163.90"); + st.put("www.simpsons.com", "209.123.16.34"); + st.put("www.stanford.edu", "171.67.16.120"); + st.put("www.google.com", "64.233.161.99"); + st.put("www.ibm.com", "129.42.16.99"); + st.put("www.apple.com", "17.254.0.91"); + st.put("www.slashdot.com", "66.35.250.150"); + st.put("www.whitehouse.gov", "204.153.49.136"); + st.put("www.espn.com", "199.181.132.250"); + st.put("www.snopes.com", "66.165.133.65"); + st.put("www.movies.com", "199.181.132.250"); + st.put("www.cnn.com", "64.236.16.20"); + st.put("www.iitb.ac.in", "202.68.145.210"); + + + StdOut.println(st.get("www.cs.princeton.edu")); + StdOut.println(st.get("www.harvardsucks.com")); + StdOut.println(st.get("www.simpsons.com")); + StdOut.println(); + + StdOut.println("ceil(www.simpsonr.com) = " + st.ceil("www.simpsonr.com")); + StdOut.println("ceil(www.simpsons.com) = " + st.ceil("www.simpsons.com")); + StdOut.println("ceil(www.simpsont.com) = " + st.ceil("www.simpsont.com")); + StdOut.println("floor(www.simpsonr.com) = " + st.floor("www.simpsonr.com")); + StdOut.println("floor(www.simpsons.com) = " + st.floor("www.simpsons.com")); + StdOut.println("floor(www.simpsont.com) = " + st.floor("www.simpsont.com")); + + StdOut.println(); + + StdOut.println("min key: " + st.min()); + StdOut.println("max key: " + st.max()); + StdOut.println("size: " + st.size()); + StdOut.println(); + + // print out all key-value pairs in lexicographic order + for (String s : st.keys()) + StdOut.println(s + " " + st.get(s)); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/ST.java.original b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/ST.java.original new file mode 100644 index 000000000..138d07beb --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/ST.java.original @@ -0,0 +1,244 @@ +/************************************************************************* + * Compilation: javac ST.java + * Execution: java ST + * + * Sorted symbol table implementation using a java.util.TreeMap. + * Does not allow duplicates. + * + * % java ST + * + *************************************************************************/ + +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.SortedMap; +import java.util.TreeMap; + +/** + * The ST class represents an ordered symbol table of generic + * key-value pairs. + * It supports the usual put, get, contains, + * delete, size, and is-empty methods. + * It also provides ordered methods for finding the minimum, + * maximum, floor, and ceiling. + * It also provides a keys method for iterating over all of the keys. + * A symbol table implements the associative array abstraction: + * when associating a value with a key that is already in the symbol table, + * the convention is to replace the old value with the new value. + * Unlike {@link java.util.Map}, this class uses the convention that + * values cannot be null—setting the + * value associated with a key to null is equivalent to deleting the key + * from the symbol table. + *

    + * This implementation uses a balanced binary search tree. It requires that + * the key type implements the Comparable interface and calls the + * compareTo() and method to compare two keys. It does not call either + * equals() or hashCode(). + * The put, contains, remove, minimum, + * maximum, ceiling, and floor operations each take + * logarithmic time in the worst case. + * The size, and is-empty operations take constant time. + * Construction takes constant time. + *

    + * For additional documentation, see Section 4.4 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + */ +public class ST, Value> implements Iterable { + + private TreeMap st; + + /** + * Initializes an empty symbol table. + */ + public ST() { + st = new TreeMap(); + } + + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and null if the key is not in the symbol table + * @throws NullPointerException if key is null + */ + public Value get(Key key) { + if (key == null) throw new NullPointerException("called get() with null key"); + return st.get(key); + } + + /** + * Inserts the key-value pair into the symbol table, overwriting the old value + * with the new value if the key is already in the symbol table. + * If the value is null, this effectively deletes the key from the symbol table. + * @param key the key + * @param val the value + * @throws NullPointerException if key is null + */ + public void put(Key key, Value val) { + if (key == null) throw new NullPointerException("called put() with null key"); + if (val == null) st.remove(key); + else st.put(key, val); + } + + /** + * Removes the key and associated value from the symbol table + * (if the key is in the symbol table). + * @param key the key + * @throws NullPointerException if key is null + */ + public void delete(Key key) { + if (key == null) throw new NullPointerException("called delete() with null key"); + st.remove(key); + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return true if this symbol table contains key and + * false otherwise + * @throws NullPointerException if key is null + */ + public boolean contains(Key key) { + if (key == null) throw new NullPointerException("called contains() with null key"); + return st.containsKey(key); + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return st.size(); + } + + /** + * Is this symbol table empty? + * @return true if this symbol table is empty and false otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns all keys in the symbol table as an Iterable. + * To iterate over all of the keys in the symbol table named st, + * use the foreach notation: for (Key key : st.keys()). + * @return all keys in the sybol table as an Iterable + */ + public Iterable keys() { + return st.keySet(); + } + + /** + * Returns all of the keys in the symbol table as an iterator. + * To iterate over all of the keys in a symbol table named st, use the + * foreach notation: for (Key key : st). + * @return an iterator to all of the keys in the symbol table + */ + public Iterator iterator() { + return st.keySet().iterator(); + } + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("called min() with empty symbol table"); + return st.firstKey(); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("called max() with empty symbol table"); + return st.lastKey(); + } + + /** + * Returns the smallest key in the symbol table greater than or equal to key. + * @return the smallest key in the symbol table greater than or equal to key + * @param key the key + * @throws NoSuchElementException if the symbol table is empty + * @throws NullPointerException if key is null + */ + public Key ceil(Key key) { + if (key == null) throw new NullPointerException("called ceil() with null key"); + SortedMap tail = st.tailMap(key); + if (tail.isEmpty()) throw new NoSuchElementException(); + return tail.firstKey(); + } + + /** + * Returns the largest key in the symbol table less than or equal to key. + * @return the largest key in the symbol table less than or equal to key + * @param key the key + * @throws NoSuchElementException if the symbol table is empty + * @throws NullPointerException if key is null + */ + public Key floor(Key key) { + if (key == null) throw new NullPointerException("called floor() with null key"); + // headMap does not include key if present (!) + if (st.containsKey(key)) return key; + SortedMap head = st.headMap(key); + if (head.isEmpty()) throw new NoSuchElementException(); + return head.lastKey(); + } + + /** + * Unit tests the ST data type. + */ + public static void main(String[] args) { + ST st = new ST(); + + // insert some key-value pairs + st.put("www.cs.princeton.edu", "128.112.136.11"); + st.put("www.cs.princeton.edu", "128.112.136.35"); // overwrite old value + st.put("www.princeton.edu", "128.112.130.211"); + st.put("www.math.princeton.edu", "128.112.18.11"); + st.put("www.yale.edu", "130.132.51.8"); + st.put("www.amazon.com", "207.171.163.90"); + st.put("www.simpsons.com", "209.123.16.34"); + st.put("www.stanford.edu", "171.67.16.120"); + st.put("www.google.com", "64.233.161.99"); + st.put("www.ibm.com", "129.42.16.99"); + st.put("www.apple.com", "17.254.0.91"); + st.put("www.slashdot.com", "66.35.250.150"); + st.put("www.whitehouse.gov", "204.153.49.136"); + st.put("www.espn.com", "199.181.132.250"); + st.put("www.snopes.com", "66.165.133.65"); + st.put("www.movies.com", "199.181.132.250"); + st.put("www.cnn.com", "64.236.16.20"); + st.put("www.iitb.ac.in", "202.68.145.210"); + + + StdOut.println(st.get("www.cs.princeton.edu")); + StdOut.println(st.get("www.harvardsucks.com")); + StdOut.println(st.get("www.simpsons.com")); + StdOut.println(); + + StdOut.println("ceil(www.simpsonr.com) = " + st.ceil("www.simpsonr.com")); + StdOut.println("ceil(www.simpsons.com) = " + st.ceil("www.simpsons.com")); + StdOut.println("ceil(www.simpsont.com) = " + st.ceil("www.simpsont.com")); + StdOut.println("floor(www.simpsonr.com) = " + st.floor("www.simpsonr.com")); + StdOut.println("floor(www.simpsons.com) = " + st.floor("www.simpsons.com")); + StdOut.println("floor(www.simpsont.com) = " + st.floor("www.simpsont.com")); + + StdOut.println(); + + StdOut.println("min key: " + st.min()); + StdOut.println("max key: " + st.max()); + StdOut.println("size: " + st.size()); + StdOut.println(); + + // print out all key-value pairs in lexicographic order + for (String s : st.keys()) + StdOut.println(s + " " + st.get(s)); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Stack.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Stack.java new file mode 100644 index 000000000..36b7571f3 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Stack.java @@ -0,0 +1,164 @@ +/************************************************************************* + * Compilation: javac Stack.java + * Execution: java Stack < input.txt + * + * A generic stack, implemented using a singly-linked list. + * Each stack element is of type Item. + * + * This version uses a static nested class Node (to save 8 bytes per + * Node), whereas the version in the textbook uses a non-static nested + * class (for simplicity). + * + * % more tobe.txt + * to be or not to - be - - that - - - is + * + * % java Stack < tobe.txt + * to be not that or be (2 left on stack) + * + *************************************************************************/ + +import java.util.Iterator; +import java.util.NoSuchElementException; + + +/** + * The Stack class represents a last-in-first-out (LIFO) stack of generic items. + * It supports the usual push and pop operations, along with methods + * for peeking at the top item, testing if the stack is empty, and iterating through + * the items in LIFO order. + *

    + * This implementation uses a singly-linked list with a static nested class for + * linked-list nodes. See {@link LinkedStack} for the version from the + * textbook that uses a non-static nested class. + * The push, pop, peek, size, and is-empty + * operations all take constant time in the worst case. + *

    + * For additional documentation, see Section 1.3 of + * Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Stack implements Iterable { + private int N; // size of the stack + private Node first; // top of stack + + // helper linked list class + private static class Node { + private Item item; + private Node next; + } + + /** + * Initializes an empty stack. + */ + public Stack() { + first = null; + N = 0; + } + + /** + * Is this stack empty? + * @return true if this stack is empty; false otherwise + */ + public boolean isEmpty() { + return first == null; + } + + /** + * Returns the number of items in the stack. + * @return the number of items in the stack + */ + public int size() { + return N; + } + + /** + * Adds the item to this stack. + * @param item the item to add + */ + public void push(Item item) { + Node oldfirst = first; + first = new Node(); + first.item = item; + first.next = oldfirst; + N++; + } + + /** + * Removes and returns the item most recently added to this stack. + * @return the item most recently added + * @throws java.util.NoSuchElementException if this stack is empty + */ + public Item pop() { + if (isEmpty()) throw new NoSuchElementException("Stack underflow"); + Item item = first.item; // save item to return + first = first.next; // delete first node + N--; + return item; // return the saved item + } + + + /** + * Returns (but does not remove) the item most recently added to this stack. + * @return the item most recently added to this stack + * @throws java.util.NoSuchElementException if this stack is empty + */ + public Item peek() { + if (isEmpty()) throw new NoSuchElementException("Stack underflow"); + return first.item; + } + + /** + * Returns a string representation of this stack. + * @return the sequence of items in the stack in LIFO order, separated by spaces + */ + public String toString() { + StringBuilder s = new StringBuilder(); + for (Item item : this) + s.append(item + " "); + return s.toString(); + } + + + /** + * Returns an iterator to this stack that iterates through the items in LIFO order. + * @return an iterator to this stack that iterates through the items in LIFO order. + */ + public Iterator iterator() { + return new ListIterator(first); + } + + // an iterator, doesn't implement remove() since it's optional + private class ListIterator implements Iterator { + private Node current; + + public ListIterator(Node first) { + current = first; + } + public boolean hasNext() { return current != null; } + public void remove() { throw new UnsupportedOperationException(); } + + public Item next() { + if (!hasNext()) throw new NoSuchElementException(); + Item item = current.item; + current = current.next; + return item; + } + } + + + /** + * Unit tests the Stack data type. + */ + public static void main(String[] args) { + Stack s = new Stack(); + while (!StdIn.isEmpty()) { + String item = StdIn.readString(); + if (!item.equals("-")) s.push(item); + else if (!s.isEmpty()) StdOut.print(s.pop() + " "); + } + StdOut.println("(" + s.size() + " left on stack)"); + } +} + diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdArrayIO.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdArrayIO.java new file mode 100644 index 000000000..e919715e8 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdArrayIO.java @@ -0,0 +1,252 @@ + +/************************************************************************* + * Compilation: javac StdArrayIO.java + * Execution: java StdArrayIO < input.txt + * + * A library for reading in 1D and 2D arrays of integers, doubles, + * and booleans from standard input and printing them out to + * standard output. + * + * % more tinyDouble1D.txt + * 4 + * .000 .246 .222 -.032 + * + * % more tinyDouble2D.txt + * 4 3 + * .000 .270 .000 + * .246 .224 -.036 + * .222 .176 .0893 + * -.032 .739 .270 + * + * % more tinyBoolean2D.txt + * 4 3 + * 1 1 0 + * 0 0 0 + * 0 1 1 + * 1 1 1 + * + * % cat tinyDouble1D.txt tinyDouble2D.txt tinyBoolean2D.txt | java StdArrayIO + * 4 + * 0.00000 0.24600 0.22200 -0.03200 + * + * 4 3 + * 0.00000 0.27000 0.00000 + * 0.24600 0.22400 -0.03600 + * 0.22200 0.17600 0.08930 + * 0.03200 0.73900 0.27000 + * + * 4 3 + * 1 1 0 + * 0 0 0 + * 0 1 1 + * 1 1 1 + * + *************************************************************************/ + + +/** + * Standard array IO. This class provides methods for reading + * in 1D and 2D arrays from standard input and printing out to + * standard output. + *

    + * For additional documentation, see + * Section 2.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class StdArrayIO { + + /** + * Read in and return an array of doubles from standard input. + */ + public static double[] readDouble1D() { + int N = StdIn.readInt(); + double[] a = new double[N]; + for (int i = 0; i < N; i++) { + a[i] = StdIn.readDouble(); + } + return a; + } + + /** + * Print an array of doubles to standard output. + */ + public static void print(double[] a) { + int N = a.length; + StdOut.println(N); + for (int i = 0; i < N; i++) { + StdOut.printf("%9.5f ", a[i]); + } + StdOut.println(); + } + + + /** + * Read in and return an M-by-N array of doubles from standard input. + */ + public static double[][] readDouble2D() { + int M = StdIn.readInt(); + int N = StdIn.readInt(); + double[][] a = new double[M][N]; + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + a[i][j] = StdIn.readDouble(); + } + } + return a; + } + + /** + * Print the M-by-N array of doubles to standard output. + */ + public static void print(double[][] a) { + int M = a.length; + int N = a[0].length; + StdOut.println(M + " " + N); + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + StdOut.printf("%9.5f ", a[i][j]); + } + StdOut.println(); + } + } + + + /** + * Read in and return an array of ints from standard input. + */ + public static int[] readInt1D() { + int N = StdIn.readInt(); + int[] a = new int[N]; + for (int i = 0; i < N; i++) { + a[i] = StdIn.readInt(); + } + return a; + } + + /** + * Print an array of ints to standard output. + */ + public static void print(int[] a) { + int N = a.length; + StdOut.println(N); + for (int i = 0; i < N; i++) { + StdOut.printf("%9d ", a[i]); + } + StdOut.println(); + } + + + /** + * Read in and return an M-by-N array of ints from standard input. + */ + public static int[][] readInt2D() { + int M = StdIn.readInt(); + int N = StdIn.readInt(); + int[][] a = new int[M][N]; + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + a[i][j] = StdIn.readInt(); + } + } + return a; + } + + /** + * Print the M-by-N array of ints to standard output. + */ + public static void print(int[][] a) { + int M = a.length; + int N = a[0].length; + StdOut.println(M + " " + N); + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + StdOut.printf("%9d ", a[i][j]); + } + StdOut.println(); + } + } + + + /** + * Read in and return an array of booleans from standard input. + */ + public static boolean[] readBoolean1D() { + int N = StdIn.readInt(); + boolean[] a = new boolean[N]; + for (int i = 0; i < N; i++) { + a[i] = StdIn.readBoolean(); + } + return a; + } + + /** + * Print an array of booleans to standard output. + */ + public static void print(boolean[] a) { + int N = a.length; + StdOut.println(N); + for (int i = 0; i < N; i++) { + if (a[i]) StdOut.print("1 "); + else StdOut.print("0 "); + } + StdOut.println(); + } + + /** + * Read in and return an M-by-N array of booleans from standard input. + */ + public static boolean[][] readBoolean2D() { + int M = StdIn.readInt(); + int N = StdIn.readInt(); + boolean[][] a = new boolean[M][N]; + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + a[i][j] = StdIn.readBoolean(); + } + } + return a; + } + + /** + * Print the M-by-N array of booleans to standard output. + */ + public static void print(boolean[][] a) { + int M = a.length; + int N = a[0].length; + StdOut.println(M + " " + N); + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + if (a[i][j]) StdOut.print("1 "); + else StdOut.print("0 "); + } + StdOut.println(); + } + } + + + /** + * Test client. + */ + public static void main(String[] args) { + + // read and print an array of doubles + double[] a = StdArrayIO.readDouble1D(); + StdArrayIO.print(a); + StdOut.println(); + + // read and print a matrix of doubles + double[][] b = StdArrayIO.readDouble2D(); + StdArrayIO.print(b); + StdOut.println(); + + // read and print a matrix of doubles + boolean[][] d = StdArrayIO.readBoolean2D(); + StdArrayIO.print(d); + StdOut.println(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdAudio.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdAudio.java new file mode 100644 index 000000000..99da95a85 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdAudio.java @@ -0,0 +1,281 @@ +/************************************************************************* + * Compilation: javac StdAudio.java + * Execution: java StdAudio + * + * Simple library for reading, writing, and manipulating .wav files. + + * + * Limitations + * ----------- + * - Does not seem to work properly when reading .wav files from a .jar file. + * - Assumes the audio is monaural, with sampling rate of 44,100. + * + *************************************************************************/ + +import java.applet.*; +import java.io.*; +import java.net.*; +import javax.sound.sampled.*; + +/** + * Standard audio. This class provides a basic capability for + * creating, reading, and saving audio. + *

    + * The audio format uses a sampling rate of 44,100 (CD quality audio), 16-bit, monaural. + * + *

    + * For additional documentation, see Section 1.5 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdAudio { + + /** + * The sample rate - 44,100 Hz for CD quality audio. + */ + public static final int SAMPLE_RATE = 44100; + + private static final int BYTES_PER_SAMPLE = 2; // 16-bit audio + private static final int BITS_PER_SAMPLE = 16; // 16-bit audio + private static final double MAX_16_BIT = Short.MAX_VALUE; // 32,767 + private static final int SAMPLE_BUFFER_SIZE = 4096; + + + private static SourceDataLine line; // to play the sound + private static byte[] buffer; // our internal buffer + private static int bufferSize = 0; // number of samples currently in internal buffer + + // do not instantiate + private StdAudio() { } + + + // static initializer + static { init(); } + + // open up an audio stream + private static void init() { + try { + // 44,100 samples per second, 16-bit audio, mono, signed PCM, little Endian + AudioFormat format = new AudioFormat((float) SAMPLE_RATE, BITS_PER_SAMPLE, 1, true, false); + DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); + + line = (SourceDataLine) AudioSystem.getLine(info); + line.open(format, SAMPLE_BUFFER_SIZE * BYTES_PER_SAMPLE); + + // the internal buffer is a fraction of the actual buffer size, this choice is arbitrary + // it gets divided because we can't expect the buffered data to line up exactly with when + // the sound card decides to push out its samples. + buffer = new byte[SAMPLE_BUFFER_SIZE * BYTES_PER_SAMPLE/3]; + } catch (Exception e) { + System.out.println(e.getMessage()); + System.exit(1); + } + + // no sound gets made before this call + line.start(); + } + + + /** + * Close standard audio. + */ + public static void close() { + line.drain(); + line.stop(); + } + + /** + * Write one sample (between -1.0 and +1.0) to standard audio. If the sample + * is outside the range, it will be clipped. + */ + public static void play(double in) { + + // clip if outside [-1, +1] + if (in < -1.0) in = -1.0; + if (in > +1.0) in = +1.0; + + // convert to bytes + short s = (short) (MAX_16_BIT * in); + buffer[bufferSize++] = (byte) s; + buffer[bufferSize++] = (byte) (s >> 8); // little Endian + + // send to sound card if buffer is full + if (bufferSize >= buffer.length) { + line.write(buffer, 0, buffer.length); + bufferSize = 0; + } + } + + /** + * Write an array of samples (between -1.0 and +1.0) to standard audio. If a sample + * is outside the range, it will be clipped. + */ + public static void play(double[] input) { + for (int i = 0; i < input.length; i++) { + play(input[i]); + } + } + + /** + * Read audio samples from a file (in .wav or .au format) and return them as a double array + * with values between -1.0 and +1.0. + */ + public static double[] read(String filename) { + byte[] data = readByte(filename); + int N = data.length; + double[] d = new double[N/2]; + for (int i = 0; i < N/2; i++) { + d[i] = ((short) (((data[2*i+1] & 0xFF) << 8) + (data[2*i] & 0xFF))) / ((double) MAX_16_BIT); + } + return d; + } + + + + + /** + * Play a sound file (in .wav, .mid, or .au format) in a background thread. + */ + public static void play(String filename) { + URL url = null; + try { + File file = new File(filename); + if (file.canRead()) url = file.toURI().toURL(); + } + catch (MalformedURLException e) { e.printStackTrace(); } + // URL url = StdAudio.class.getResource(filename); + if (url == null) throw new RuntimeException("audio " + filename + " not found"); + AudioClip clip = Applet.newAudioClip(url); + clip.play(); + } + + /** + * Loop a sound file (in .wav, .mid, or .au format) in a background thread. + */ + public static void loop(String filename) { + URL url = null; + try { + File file = new File(filename); + if (file.canRead()) url = file.toURI().toURL(); + } + catch (MalformedURLException e) { e.printStackTrace(); } + // URL url = StdAudio.class.getResource(filename); + if (url == null) throw new RuntimeException("audio " + filename + " not found"); + AudioClip clip = Applet.newAudioClip(url); + clip.loop(); + } + + + // return data as a byte array + private static byte[] readByte(String filename) { + byte[] data = null; + AudioInputStream ais = null; + try { + + // try to read from file + File file = new File(filename); + if (file.exists()) { + ais = AudioSystem.getAudioInputStream(file); + data = new byte[ais.available()]; + ais.read(data); + } + + // try to read from URL + else { + URL url = StdAudio.class.getResource(filename); + ais = AudioSystem.getAudioInputStream(url); + data = new byte[ais.available()]; + ais.read(data); + } + } + catch (Exception e) { + System.out.println(e.getMessage()); + throw new RuntimeException("Could not read " + filename); + } + + return data; + } + + + + /** + * Save the double array as a sound file (using .wav or .au format). + */ + public static void save(String filename, double[] input) { + + // assumes 44,100 samples per second + // use 16-bit audio, mono, signed PCM, little Endian + AudioFormat format = new AudioFormat(SAMPLE_RATE, 16, 1, true, false); + byte[] data = new byte[2 * input.length]; + for (int i = 0; i < input.length; i++) { + int temp = (short) (input[i] * MAX_16_BIT); + data[2*i + 0] = (byte) temp; + data[2*i + 1] = (byte) (temp >> 8); + } + + // now save the file + try { + ByteArrayInputStream bais = new ByteArrayInputStream(data); + AudioInputStream ais = new AudioInputStream(bais, format, input.length); + if (filename.endsWith(".wav") || filename.endsWith(".WAV")) { + AudioSystem.write(ais, AudioFileFormat.Type.WAVE, new File(filename)); + } + else if (filename.endsWith(".au") || filename.endsWith(".AU")) { + AudioSystem.write(ais, AudioFileFormat.Type.AU, new File(filename)); + } + else { + throw new RuntimeException("File format not supported: " + filename); + } + } + catch (Exception e) { + System.out.println(e); + System.exit(1); + } + } + + + + + /*********************************************************************** + * sample test client + ***********************************************************************/ + + // create a note (sine wave) of the given frequency (Hz), for the given + // duration (seconds) scaled to the given volume (amplitude) + private static double[] note(double hz, double duration, double amplitude) { + int N = (int) (StdAudio.SAMPLE_RATE * duration); + double[] a = new double[N+1]; + for (int i = 0; i <= N; i++) + a[i] = amplitude * Math.sin(2 * Math.PI * i * hz / StdAudio.SAMPLE_RATE); + return a; + } + + /** + * Test client - play an A major scale to standard audio. + */ + public static void main(String[] args) { + + // 440 Hz for 1 sec + double freq = 440.0; + for (int i = 0; i <= StdAudio.SAMPLE_RATE; i++) { + StdAudio.play(0.5 * Math.sin(2*Math.PI * freq * i / StdAudio.SAMPLE_RATE)); + } + + // scale increments + int[] steps = { 0, 2, 4, 5, 7, 9, 11, 12 }; + for (int i = 0; i < steps.length; i++) { + double hz = 440.0 * Math.pow(2, steps[i] / 12.0); + StdAudio.play(note(hz, 1.0, 0.5)); + } + + + // need to call this in non-interactive stuff so the program doesn't terminate + // until all the sound leaves the speaker. + StdAudio.close(); + + // need to terminate a Java program with sound + System.exit(0); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdDraw.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdDraw.java new file mode 100644 index 000000000..eb99ec57c --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdDraw.java @@ -0,0 +1,1160 @@ +/************************************************************************* + * Compilation: javac StdDraw.java + * Execution: java StdDraw + * + * Standard drawing library. This class provides a basic capability for + * creating drawings with your programs. It uses a simple graphics model that + * allows you to create drawings consisting of points, lines, and curves + * in a window on your computer and to save the drawings to a file. + * + * Todo + * ---- + * - Add support for gradient fill, etc. + * + * Remarks + * ------- + * - don't use AffineTransform for rescaling since it inverts + * images and strings + * - careful using setFont in inner loop within an animation - + * it can cause flicker + * + *************************************************************************/ + +import java.awt.*; +import java.awt.event.*; +import java.awt.geom.*; +import java.awt.image.*; +import java.io.*; +import java.net.*; +import java.util.LinkedList; +import java.util.TreeSet; +import javax.imageio.ImageIO; +import javax.swing.*; + +/** + * Standard draw. This class provides a basic capability for + * creating drawings with your programs. It uses a simple graphics model that + * allows you to create drawings consisting of points, lines, and curves + * in a window on your computer and to save the drawings to a file. + *

    + * For additional documentation, see Section 1.5 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdDraw implements ActionListener, MouseListener, MouseMotionListener, KeyListener { + + static final boolean isVisualizer = true; + + // pre-defined colors + public static final Color BLACK = Color.BLACK; + public static final Color BLUE = Color.BLUE; + public static final Color CYAN = Color.CYAN; + public static final Color DARK_GRAY = Color.DARK_GRAY; + public static final Color GRAY = Color.GRAY; + public static final Color GREEN = Color.GREEN; + public static final Color LIGHT_GRAY = Color.LIGHT_GRAY; + public static final Color MAGENTA = Color.MAGENTA; + public static final Color ORANGE = Color.ORANGE; + public static final Color PINK = Color.PINK; + public static final Color RED = Color.RED; + public static final Color WHITE = Color.WHITE; + public static final Color YELLOW = Color.YELLOW; + + /** + * Shade of blue used in Introduction to Programming in Java. + * It is Pantone 300U. The RGB values are approximately (9, 90, 166). + */ + public static final Color BOOK_BLUE = new Color( 9, 90, 166); + public static final Color BOOK_LIGHT_BLUE = new Color(103, 198, 243); + + /** + * Shade of red used in Algorithms 4th edition. + * It is Pantone 1805U. The RGB values are approximately (150, 35, 31). + */ + public static final Color BOOK_RED = new Color(150, 35, 31); + + // default colors + private static final Color DEFAULT_PEN_COLOR = BLACK; + private static final Color DEFAULT_CLEAR_COLOR = WHITE; + + // current pen color + private static Color penColor; + + // default canvas size is DEFAULT_SIZE-by-DEFAULT_SIZE + private static final int DEFAULT_SIZE = 512; + private static int width = DEFAULT_SIZE; + private static int height = DEFAULT_SIZE; + + // default pen radius + private static final double DEFAULT_PEN_RADIUS = 0.002; + + // current pen radius + private static double penRadius; + + // show we draw immediately or wait until next show? + private static boolean defer = false; + + // boundary of drawing canvas, 5% border + private static final double BORDER = 0.05; + private static final double DEFAULT_XMIN = 0.0; + private static final double DEFAULT_XMAX = 1.0; + private static final double DEFAULT_YMIN = 0.0; + private static final double DEFAULT_YMAX = 1.0; + private static double xmin, ymin, xmax, ymax; + + // for synchronization + private static Object mouseLock = new Object(); + private static Object keyLock = new Object(); + + // default font + private static final Font DEFAULT_FONT = isVisualizer ? null : new Font("SansSerif", Font.PLAIN, 16); + + // current font + private static Font font; + + // double buffered graphics + private static BufferedImage offscreenImage, onscreenImage; + private static Graphics2D offscreen, onscreen; + + // singleton for callbacks: avoids generation of extra .class files + private static StdDraw std = isVisualizer ? null : new StdDraw(); + + // the frame for drawing to the screen + private static JFrame frame; + + // mouse state + private static boolean mousePressed = false; + private static double mouseX = 0; + private static double mouseY = 0; + + // queue of typed key characters + private static LinkedList keysTyped = isVisualizer ? null : new LinkedList(); + + // set of key codes currently pressed down + private static TreeSet keysDown = isVisualizer ? null : new TreeSet(); + + + // singleton pattern: client can't instantiate + private StdDraw() { } + + + // static initializer + static { if (!isVisualizer) init(); } + + /** + * Set the window size to the default size 512-by-512 pixels. + */ + public static void setCanvasSize() { + if (isVisualizer) return; + setCanvasSize(DEFAULT_SIZE, DEFAULT_SIZE); + } + + /** + * Set the window size to w-by-h pixels. + * + * @param w the width as a number of pixels + * @param h the height as a number of pixels + * @throws a IllegalArgumentException if the width or height is 0 or negative + */ + public static void setCanvasSize(int w, int h) { + if (isVisualizer) return; + if (w < 1 || h < 1) throw new IllegalArgumentException("width and height must be positive"); + width = w; + height = h; + init(); + } + + // init + private static void init() { + if (isVisualizer) return; + if (frame != null) frame.setVisible(false); + frame = new JFrame(); + offscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + onscreenImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + offscreen = offscreenImage.createGraphics(); + onscreen = onscreenImage.createGraphics(); + setXscale(); + setYscale(); + offscreen.setColor(DEFAULT_CLEAR_COLOR); + offscreen.fillRect(0, 0, width, height); + setPenColor(); + setPenRadius(); + setFont(); + clear(); + + // add antialiasing + RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + offscreen.addRenderingHints(hints); + + // frame stuff + ImageIcon icon = new ImageIcon(onscreenImage); + JLabel draw = new JLabel(icon); + + draw.addMouseListener(std); + draw.addMouseMotionListener(std); + + frame.setContentPane(draw); + frame.addKeyListener(std); // JLabel cannot get keyboard focus + frame.setResizable(false); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // closes all windows + // frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // closes only current window + frame.setTitle("Standard Draw"); + frame.setJMenuBar(createMenuBar()); + frame.pack(); + frame.requestFocusInWindow(); + frame.setVisible(true); + } + + // create the menu bar (changed to private) + private static JMenuBar createMenuBar() { + JMenuBar menuBar = new JMenuBar(); + JMenu menu = new JMenu("File"); + menuBar.add(menu); + JMenuItem menuItem1 = new JMenuItem(" Save... "); + menuItem1.addActionListener(std); + menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + menu.add(menuItem1); + return menuBar; + } + + + /************************************************************************* + * User and screen coordinate systems + *************************************************************************/ + + /** + * Set the x-scale to be the default (between 0.0 and 1.0). + */ + public static void setXscale() { setXscale(DEFAULT_XMIN, DEFAULT_XMAX); } + + /** + * Set the y-scale to be the default (between 0.0 and 1.0). + */ + public static void setYscale() { setYscale(DEFAULT_YMIN, DEFAULT_YMAX); } + + /** + * Set the x-scale (a 10% border is added to the values) + * @param min the minimum value of the x-scale + * @param max the maximum value of the x-scale + */ + public static void setXscale(double min, double max) { + if (isVisualizer) return; + double size = max - min; + synchronized (mouseLock) { + xmin = min - BORDER * size; + xmax = max + BORDER * size; + } + } + + /** + * Set the y-scale (a 10% border is added to the values). + * @param min the minimum value of the y-scale + * @param max the maximum value of the y-scale + */ + public static void setYscale(double min, double max) { + if (isVisualizer) return; + double size = max - min; + synchronized (mouseLock) { + ymin = min - BORDER * size; + ymax = max + BORDER * size; + } + } + + /** + * Set the x-scale and y-scale (a 10% border is added to the values) + * @param min the minimum value of the x- and y-scales + * @param max the maximum value of the x- and y-scales + */ + public static void setScale(double min, double max) { + if (isVisualizer) return; + double size = max - min; + synchronized (mouseLock) { + xmin = min - BORDER * size; + xmax = max + BORDER * size; + ymin = min - BORDER * size; + ymax = max + BORDER * size; + } + } + + // helper functions that scale from user coordinates to screen coordinates and back + private static double scaleX(double x) { return width * (x - xmin) / (xmax - xmin); } + private static double scaleY(double y) { return height * (ymax - y) / (ymax - ymin); } + private static double factorX(double w) { return w * width / Math.abs(xmax - xmin); } + private static double factorY(double h) { return h * height / Math.abs(ymax - ymin); } + private static double userX(double x) { return xmin + x * (xmax - xmin) / width; } + private static double userY(double y) { return ymax - y * (ymax - ymin) / height; } + + + /** + * Clear the screen to the default color (white). + */ + public static void clear() { clear(DEFAULT_CLEAR_COLOR); } + /** + * Clear the screen to the given color. + * @param color the Color to make the background + */ + public static void clear(Color color) { + if (isVisualizer) return; + offscreen.setColor(color); + offscreen.fillRect(0, 0, width, height); + offscreen.setColor(penColor); + draw(); + } + + /** + * Get the current pen radius. + */ + public static double getPenRadius() { return penRadius; } + + /** + * Set the pen size to the default (.002). + */ + public static void setPenRadius() { setPenRadius(DEFAULT_PEN_RADIUS); } + /** + * Set the radius of the pen to the given size. + * @param r the radius of the pen + * @throws IllegalArgumentException if r is negative + */ + public static void setPenRadius(double r) { + if (isVisualizer) return; + if (r < 0) throw new IllegalArgumentException("pen radius must be nonnegative"); + penRadius = r; + float scaledPenRadius = (float) (r * DEFAULT_SIZE); + BasicStroke stroke = new BasicStroke(scaledPenRadius, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); + // BasicStroke stroke = new BasicStroke(scaledPenRadius); + offscreen.setStroke(stroke); + } + + /** + * Get the current pen color. + */ + public static Color getPenColor() { return penColor; } + + /** + * Set the pen color to the default color (black). + */ + public static void setPenColor() { setPenColor(DEFAULT_PEN_COLOR); } + + /** + * Set the pen color to the given color. The available pen colors are + * BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, + * ORANGE, PINK, RED, WHITE, and YELLOW. + * @param color the Color to make the pen + */ + public static void setPenColor(Color color) { + if (isVisualizer) return; + penColor = color; + offscreen.setColor(penColor); + } + + /** + * Set the pen color to the given RGB color. + * @param red the amount of red (between 0 and 255) + * @param green the amount of green (between 0 and 255) + * @param blue the amount of blue (between 0 and 255) + * @throws IllegalArgumentException if the amount of red, green, or blue are outside prescribed range + */ + public static void setPenColor(int red, int green, int blue) { + if (isVisualizer) return; + if (red < 0 || red >= 256) throw new IllegalArgumentException("amount of red must be between 0 and 255"); + if (green < 0 || green >= 256) throw new IllegalArgumentException("amount of red must be between 0 and 255"); + if (blue < 0 || blue >= 256) throw new IllegalArgumentException("amount of red must be between 0 and 255"); + setPenColor(new Color(red, green, blue)); + } + + /** + * Get the current font. + */ + public static Font getFont() { return font; } + + /** + * Set the font to the default font (sans serif, 16 point). + */ + public static void setFont() { setFont(DEFAULT_FONT); } + + /** + * Set the font to the given value. + * @param f the font to make text + */ + public static void setFont(Font f) { font = f; } + + + /************************************************************************* + * Drawing geometric shapes. + *************************************************************************/ + + /** + * Draw a line from (x0, y0) to (x1, y1). + * @param x0 the x-coordinate of the starting point + * @param y0 the y-coordinate of the starting point + * @param x1 the x-coordinate of the destination point + * @param y1 the y-coordinate of the destination point + */ + public static void line(double x0, double y0, double x1, double y1) { + if (isVisualizer) return; + offscreen.draw(new Line2D.Double(scaleX(x0), scaleY(y0), scaleX(x1), scaleY(y1))); + draw(); + } + + /** + * Draw one pixel at (x, y). + * @param x the x-coordinate of the pixel + * @param y the y-coordinate of the pixel + */ + private static void pixel(double x, double y) { + if (isVisualizer) return; + offscreen.fillRect((int) Math.round(scaleX(x)), (int) Math.round(scaleY(y)), 1, 1); + } + + /** + * Draw a point at (x, y). + * @param x the x-coordinate of the point + * @param y the y-coordinate of the point + */ + public static void point(double x, double y) { + if (isVisualizer) return; + double xs = scaleX(x); + double ys = scaleY(y); + double r = penRadius; + float scaledPenRadius = (float) (r * DEFAULT_SIZE); + + // double ws = factorX(2*r); + // double hs = factorY(2*r); + // if (ws <= 1 && hs <= 1) pixel(x, y); + if (scaledPenRadius <= 1) pixel(x, y); + else offscreen.fill(new Ellipse2D.Double(xs - scaledPenRadius/2, ys - scaledPenRadius/2, + scaledPenRadius, scaledPenRadius)); + draw(); + } + + /** + * Draw a circle of radius r, centered on (x, y). + * @param x the x-coordinate of the center of the circle + * @param y the y-coordinate of the center of the circle + * @param r the radius of the circle + * @throws IllegalArgumentException if the radius of the circle is negative + */ + public static void circle(double x, double y, double r) { + if (isVisualizer) return; + if (r < 0) throw new IllegalArgumentException("circle radius must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw filled circle of radius r, centered on (x, y). + * @param x the x-coordinate of the center of the circle + * @param y the y-coordinate of the center of the circle + * @param r the radius of the circle + * @throws IllegalArgumentException if the radius of the circle is negative + */ + public static void filledCircle(double x, double y, double r) { + if (isVisualizer) return; + if (r < 0) throw new IllegalArgumentException("circle radius must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + + /** + * Draw an ellipse with given semimajor and semiminor axes, centered on (x, y). + * @param x the x-coordinate of the center of the ellipse + * @param y the y-coordinate of the center of the ellipse + * @param semiMajorAxis is the semimajor axis of the ellipse + * @param semiMinorAxis is the semiminor axis of the ellipse + * @throws IllegalArgumentException if either of the axes are negative + */ + public static void ellipse(double x, double y, double semiMajorAxis, double semiMinorAxis) { + if (isVisualizer) return; + if (semiMajorAxis < 0) throw new IllegalArgumentException("ellipse semimajor axis must be nonnegative"); + if (semiMinorAxis < 0) throw new IllegalArgumentException("ellipse semiminor axis must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*semiMajorAxis); + double hs = factorY(2*semiMinorAxis); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw an ellipse with given semimajor and semiminor axes, centered on (x, y). + * @param x the x-coordinate of the center of the ellipse + * @param y the y-coordinate of the center of the ellipse + * @param semiMajorAxis is the semimajor axis of the ellipse + * @param semiMinorAxis is the semiminor axis of the ellipse + * @throws IllegalArgumentException if either of the axes are negative + */ + public static void filledEllipse(double x, double y, double semiMajorAxis, double semiMinorAxis) { + if (isVisualizer) return; + if (semiMajorAxis < 0) throw new IllegalArgumentException("ellipse semimajor axis must be nonnegative"); + if (semiMinorAxis < 0) throw new IllegalArgumentException("ellipse semiminor axis must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*semiMajorAxis); + double hs = factorY(2*semiMinorAxis); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Ellipse2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + + /** + * Draw an arc of radius r, centered on (x, y), from angle1 to angle2 (in degrees). + * @param x the x-coordinate of the center of the circle + * @param y the y-coordinate of the center of the circle + * @param r the radius of the circle + * @param angle1 the starting angle. 0 would mean an arc beginning at 3 o'clock. + * @param angle2 the angle at the end of the arc. For example, if + * you want a 90 degree arc, then angle2 should be angle1 + 90. + * @throws IllegalArgumentException if the radius of the circle is negative + */ + public static void arc(double x, double y, double r, double angle1, double angle2) { + if (isVisualizer) return; + if (r < 0) throw new IllegalArgumentException("arc radius must be nonnegative"); + while (angle2 < angle1) angle2 += 360; + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Arc2D.Double(xs - ws/2, ys - hs/2, ws, hs, angle1, angle2 - angle1, Arc2D.OPEN)); + draw(); + } + + /** + * Draw a square of side length 2r, centered on (x, y). + * @param x the x-coordinate of the center of the square + * @param y the y-coordinate of the center of the square + * @param r radius is half the length of any side of the square + * @throws IllegalArgumentException if r is negative + */ + public static void square(double x, double y, double r) { + if (isVisualizer) return; + if (r < 0) throw new IllegalArgumentException("square side length must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw a filled square of side length 2r, centered on (x, y). + * @param x the x-coordinate of the center of the square + * @param y the y-coordinate of the center of the square + * @param r radius is half the length of any side of the square + * @throws IllegalArgumentException if r is negative + */ + public static void filledSquare(double x, double y, double r) { + if (isVisualizer) return; + if (r < 0) throw new IllegalArgumentException("square side length must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*r); + double hs = factorY(2*r); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + + /** + * Draw a rectangle of given half width and half height, centered on (x, y). + * @param x the x-coordinate of the center of the rectangle + * @param y the y-coordinate of the center of the rectangle + * @param halfWidth is half the width of the rectangle + * @param halfHeight is half the height of the rectangle + * @throws IllegalArgumentException if halfWidth or halfHeight is negative + */ + public static void rectangle(double x, double y, double halfWidth, double halfHeight) { + if (isVisualizer) return; + if (halfWidth < 0) throw new IllegalArgumentException("half width must be nonnegative"); + if (halfHeight < 0) throw new IllegalArgumentException("half height must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*halfWidth); + double hs = factorY(2*halfHeight); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.draw(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + /** + * Draw a filled rectangle of given half width and half height, centered on (x, y). + * @param x the x-coordinate of the center of the rectangle + * @param y the y-coordinate of the center of the rectangle + * @param halfWidth is half the width of the rectangle + * @param halfHeight is half the height of the rectangle + * @throws IllegalArgumentException if halfWidth or halfHeight is negative + */ + public static void filledRectangle(double x, double y, double halfWidth, double halfHeight) { + if (isVisualizer) return; + if (halfWidth < 0) throw new IllegalArgumentException("half width must be nonnegative"); + if (halfHeight < 0) throw new IllegalArgumentException("half height must be nonnegative"); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(2*halfWidth); + double hs = factorY(2*halfHeight); + if (ws <= 1 && hs <= 1) pixel(x, y); + else offscreen.fill(new Rectangle2D.Double(xs - ws/2, ys - hs/2, ws, hs)); + draw(); + } + + + /** + * Draw a polygon with the given (x[i], y[i]) coordinates. + * @param x an array of all the x-coordindates of the polygon + * @param y an array of all the y-coordindates of the polygon + */ + public static void polygon(double[] x, double[] y) { + int N = x.length; + GeneralPath path = new GeneralPath(); + path.moveTo((float) scaleX(x[0]), (float) scaleY(y[0])); + for (int i = 0; i < N; i++) + path.lineTo((float) scaleX(x[i]), (float) scaleY(y[i])); + path.closePath(); + offscreen.draw(path); + draw(); + } + + /** + * Draw a filled polygon with the given (x[i], y[i]) coordinates. + * @param x an array of all the x-coordindates of the polygon + * @param y an array of all the y-coordindates of the polygon + */ + public static void filledPolygon(double[] x, double[] y) { + if (isVisualizer) return; + int N = x.length; + GeneralPath path = new GeneralPath(); + path.moveTo((float) scaleX(x[0]), (float) scaleY(y[0])); + for (int i = 0; i < N; i++) + path.lineTo((float) scaleX(x[i]), (float) scaleY(y[i])); + path.closePath(); + offscreen.fill(path); + draw(); + } + + + + /************************************************************************* + * Drawing images. + *************************************************************************/ + + // get an image from the given filename + private static Image getImage(String filename) { + if (isVisualizer) return null; + + // to read from file + ImageIcon icon = new ImageIcon(filename); + + // try to read from URL + if ((icon == null) || (icon.getImageLoadStatus() != MediaTracker.COMPLETE)) { + try { + URL url = new URL(filename); + icon = new ImageIcon(url); + } catch (Exception e) { /* not a url */ } + } + + // in case file is inside a .jar + if ((icon == null) || (icon.getImageLoadStatus() != MediaTracker.COMPLETE)) { + URL url = StdDraw.class.getResource(filename); + if (url == null) throw new IllegalArgumentException("image " + filename + " not found"); + icon = new ImageIcon(url); + } + + return icon.getImage(); + } + + /** + * Draw picture (gif, jpg, or png) centered on (x, y). + * @param x the center x-coordinate of the image + * @param y the center y-coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @throws IllegalArgumentException if the image is corrupt + */ + public static void picture(double x, double y, String s) { + if (isVisualizer) return; + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = image.getWidth(null); + int hs = image.getHeight(null); + if (ws < 0 || hs < 0) throw new IllegalArgumentException("image " + s + " is corrupt"); + + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), (int) Math.round(ys - hs/2.0), null); + draw(); + } + + /** + * Draw picture (gif, jpg, or png) centered on (x, y), + * rotated given number of degrees + * @param x the center x-coordinate of the image + * @param y the center y-coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @param degrees is the number of degrees to rotate counterclockwise + * @throws IllegalArgumentException if the image is corrupt + */ + public static void picture(double x, double y, String s, double degrees) { + if (isVisualizer) return; + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = image.getWidth(null); + int hs = image.getHeight(null); + if (ws < 0 || hs < 0) throw new IllegalArgumentException("image " + s + " is corrupt"); + + offscreen.rotate(Math.toRadians(-degrees), xs, ys); + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), (int) Math.round(ys - hs/2.0), null); + offscreen.rotate(Math.toRadians(+degrees), xs, ys); + + draw(); + } + + /** + * Draw picture (gif, jpg, or png) centered on (x, y), rescaled to w-by-h. + * @param x the center x coordinate of the image + * @param y the center y coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @param w the width of the image + * @param h the height of the image + * @throws IllegalArgumentException if the width height are negative + * @throws IllegalArgumentException if the image is corrupt + */ + public static void picture(double x, double y, String s, double w, double h) { + if (isVisualizer) return; + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + if (w < 0) throw new IllegalArgumentException("width is negative: " + w); + if (h < 0) throw new IllegalArgumentException("height is negative: " + h); + double ws = factorX(w); + double hs = factorY(h); + if (ws < 0 || hs < 0) throw new IllegalArgumentException("image " + s + " is corrupt"); + if (ws <= 1 && hs <= 1) pixel(x, y); + else { + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), + (int) Math.round(ys - hs/2.0), + (int) Math.round(ws), + (int) Math.round(hs), null); + } + draw(); + } + + + /** + * Draw picture (gif, jpg, or png) centered on (x, y), rotated + * given number of degrees, rescaled to w-by-h. + * @param x the center x-coordinate of the image + * @param y the center y-coordinate of the image + * @param s the name of the image/picture, e.g., "ball.gif" + * @param w the width of the image + * @param h the height of the image + * @param degrees is the number of degrees to rotate counterclockwise + * @throws IllegalArgumentException if the image is corrupt + */ + public static void picture(double x, double y, String s, double w, double h, double degrees) { + if (isVisualizer) return; + Image image = getImage(s); + double xs = scaleX(x); + double ys = scaleY(y); + double ws = factorX(w); + double hs = factorY(h); + if (ws < 0 || hs < 0) throw new IllegalArgumentException("image " + s + " is corrupt"); + if (ws <= 1 && hs <= 1) pixel(x, y); + + offscreen.rotate(Math.toRadians(-degrees), xs, ys); + offscreen.drawImage(image, (int) Math.round(xs - ws/2.0), + (int) Math.round(ys - hs/2.0), + (int) Math.round(ws), + (int) Math.round(hs), null); + offscreen.rotate(Math.toRadians(+degrees), xs, ys); + + draw(); + } + + + /************************************************************************* + * Drawing text. + *************************************************************************/ + + /** + * Write the given text string in the current font, centered on (x, y). + * @param x the center x-coordinate of the text + * @param y the center y-coordinate of the text + * @param s the text + */ + public static void text(double x, double y, String s) { + if (isVisualizer) return; + offscreen.setFont(font); + FontMetrics metrics = offscreen.getFontMetrics(); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = metrics.stringWidth(s); + int hs = metrics.getDescent(); + offscreen.drawString(s, (float) (xs - ws/2.0), (float) (ys + hs)); + draw(); + } + + /** + * Write the given text string in the current font, centered on (x, y) and + * rotated by the specified number of degrees + * @param x the center x-coordinate of the text + * @param y the center y-coordinate of the text + * @param s the text + * @param degrees is the number of degrees to rotate counterclockwise + */ + public static void text(double x, double y, String s, double degrees) { + if (isVisualizer) return; + double xs = scaleX(x); + double ys = scaleY(y); + offscreen.rotate(Math.toRadians(-degrees), xs, ys); + text(x, y, s); + offscreen.rotate(Math.toRadians(+degrees), xs, ys); + } + + + /** + * Write the given text string in the current font, left-aligned at (x, y). + * @param x the x-coordinate of the text + * @param y the y-coordinate of the text + * @param s the text + */ + public static void textLeft(double x, double y, String s) { + if (isVisualizer) return; + offscreen.setFont(font); + FontMetrics metrics = offscreen.getFontMetrics(); + double xs = scaleX(x); + double ys = scaleY(y); + int hs = metrics.getDescent(); + offscreen.drawString(s, (float) (xs), (float) (ys + hs)); + draw(); + } + + /** + * Write the given text string in the current font, right-aligned at (x, y). + * @param x the x-coordinate of the text + * @param y the y-coordinate of the text + * @param s the text + */ + public static void textRight(double x, double y, String s) { + if (isVisualizer) return; + offscreen.setFont(font); + FontMetrics metrics = offscreen.getFontMetrics(); + double xs = scaleX(x); + double ys = scaleY(y); + int ws = metrics.stringWidth(s); + int hs = metrics.getDescent(); + offscreen.drawString(s, (float) (xs - ws), (float) (ys + hs)); + draw(); + } + + + + /** + * Display on screen, pause for t milliseconds, and turn on + * animation mode: subsequent calls to + * drawing methods such as line(), circle(), and square() + * will not be displayed on screen until the next call to show(). + * This is useful for producing animations (clear the screen, draw a bunch of shapes, + * display on screen for a fixed amount of time, and repeat). It also speeds up + * drawing a huge number of shapes (call show(0) to defer drawing + * on screen, draw the shapes, and call show(0) to display them all + * on screen at once). + * @param t number of milliseconds + */ + public static void show(int t) { + if (isVisualizer) return; + defer = false; + draw(); + try { Thread.sleep(t); } + catch (InterruptedException e) { System.out.println("Error sleeping"); } + defer = true; + } + + /** + * Display on-screen and turn off animation mode: + * subsequent calls to + * drawing methods such as line(), circle(), and square() + * will be displayed on screen when called. This is the default. + */ + public static void show() { + if (isVisualizer) return; + defer = false; + draw(); + } + + // draw onscreen if defer is false + private static void draw() { + if (isVisualizer) return; + if (defer) return; + onscreen.drawImage(offscreenImage, 0, 0, null); + frame.repaint(); + } + + + /************************************************************************* + * Save drawing to a file. + *************************************************************************/ + + /** + * Save onscreen image to file - suffix must be png, jpg, or gif. + * @param filename the name of the file with one of the required suffixes + */ + public static void save(String filename) { + if (isVisualizer) return; + File file = new File(filename); + String suffix = filename.substring(filename.lastIndexOf('.') + 1); + + // png files + if (suffix.toLowerCase().equals("png")) { + try { ImageIO.write(onscreenImage, suffix, file); } + catch (IOException e) { e.printStackTrace(); } + } + + // need to change from ARGB to RGB for jpeg + // reference: http://archives.java.sun.com/cgi-bin/wa?A2=ind0404&L=java2d-interest&D=0&P=2727 + else if (suffix.toLowerCase().equals("jpg")) { + WritableRaster raster = onscreenImage.getRaster(); + WritableRaster newRaster; + newRaster = raster.createWritableChild(0, 0, width, height, 0, 0, new int[] {0, 1, 2}); + DirectColorModel cm = (DirectColorModel) onscreenImage.getColorModel(); + DirectColorModel newCM = new DirectColorModel(cm.getPixelSize(), + cm.getRedMask(), + cm.getGreenMask(), + cm.getBlueMask()); + BufferedImage rgbBuffer = new BufferedImage(newCM, newRaster, false, null); + try { ImageIO.write(rgbBuffer, suffix, file); } + catch (IOException e) { e.printStackTrace(); } + } + + else { + System.out.println("Invalid image file type: " + suffix); + } + } + + + /** + * This method cannot be called directly. + */ + public void actionPerformed(ActionEvent e) { + if (isVisualizer) return; + FileDialog chooser = new FileDialog(StdDraw.frame, "Use a .png or .jpg extension", FileDialog.SAVE); + chooser.setVisible(true); + String filename = chooser.getFile(); + if (filename != null) { + StdDraw.save(chooser.getDirectory() + File.separator + chooser.getFile()); + } + } + + + /************************************************************************* + * Mouse interactions. + *************************************************************************/ + + /** + * Is the mouse being pressed? + * @return true or false + */ + public static boolean mousePressed() { + synchronized (mouseLock) { + return mousePressed; + } + } + + /** + * What is the x-coordinate of the mouse? + * @return the value of the x-coordinate of the mouse + */ + public static double mouseX() { + synchronized (mouseLock) { + return mouseX; + } + } + + /** + * What is the y-coordinate of the mouse? + * @return the value of the y-coordinate of the mouse + */ + public static double mouseY() { + synchronized (mouseLock) { + return mouseY; + } + } + + + /** + * This method cannot be called directly. + */ + public void mouseClicked(MouseEvent e) { } + + /** + * This method cannot be called directly. + */ + public void mouseEntered(MouseEvent e) { } + + /** + * This method cannot be called directly. + */ + public void mouseExited(MouseEvent e) { } + + /** + * This method cannot be called directly. + */ + public void mousePressed(MouseEvent e) { + if (isVisualizer) return; + synchronized (mouseLock) { + mouseX = StdDraw.userX(e.getX()); + mouseY = StdDraw.userY(e.getY()); + mousePressed = true; + } + } + + /** + * This method cannot be called directly. + */ + public void mouseReleased(MouseEvent e) { + synchronized (mouseLock) { + mousePressed = false; + } + } + + /** + * This method cannot be called directly. + */ + public void mouseDragged(MouseEvent e) { + if (isVisualizer) return; + synchronized (mouseLock) { + mouseX = StdDraw.userX(e.getX()); + mouseY = StdDraw.userY(e.getY()); + } + } + + /** + * This method cannot be called directly. + */ + public void mouseMoved(MouseEvent e) { + if (isVisualizer) return; + synchronized (mouseLock) { + mouseX = StdDraw.userX(e.getX()); + mouseY = StdDraw.userY(e.getY()); + } + } + + + /************************************************************************* + * Keyboard interactions. + *************************************************************************/ + + /** + * Has the user typed a key? + * @return true if the user has typed a key, false otherwise + */ + public static boolean hasNextKeyTyped() { + synchronized (keyLock) { + return !keysTyped.isEmpty(); + } + } + + /** + * What is the next key that was typed by the user? This method returns + * a Unicode character corresponding to the key typed (such as 'a' or 'A'). + * It cannot identify action keys (such as F1 + * and arrow keys) or modifier keys (such as control). + * @return the next Unicode key typed + */ + public static char nextKeyTyped() { + synchronized (keyLock) { + return keysTyped.removeLast(); + } + } + + /** + * Is the keycode currently being pressed? This method takes as an argument + * the keycode (corresponding to a physical key). It can handle action keys + * (such as F1 and arrow keys) and modifier keys (such as shift and control). + * See KeyEvent.java + * for a description of key codes. + * @return true if keycode is currently being pressed, false otherwise + */ + public static boolean isKeyPressed(int keycode) { + synchronized (keyLock) { + return keysDown.contains(keycode); + } + } + + + /** + * This method cannot be called directly. + */ + public void keyTyped(KeyEvent e) { + synchronized (keyLock) { + keysTyped.addFirst(e.getKeyChar()); + } + } + + /** + * This method cannot be called directly. + */ + public void keyPressed(KeyEvent e) { + synchronized (keyLock) { + keysDown.add(e.getKeyCode()); + } + } + + /** + * This method cannot be called directly. + */ + public void keyReleased(KeyEvent e) { + synchronized (keyLock) { + keysDown.remove(e.getKeyCode()); + } + } + + + + + /** + * Test client. + */ + public static void main(String[] args) { + StdDraw.square(.2, .8, .1); + StdDraw.filledSquare(.8, .8, .2); + StdDraw.circle(.8, .2, .2); + + StdDraw.setPenColor(StdDraw.BOOK_RED); + StdDraw.setPenRadius(.02); + StdDraw.arc(.8, .2, .1, 200, 45); + + // draw a blue diamond + StdDraw.setPenRadius(); + StdDraw.setPenColor(StdDraw.BOOK_BLUE); + double[] x = { .1, .2, .3, .2 }; + double[] y = { .2, .3, .2, .1 }; + StdDraw.filledPolygon(x, y); + + // text + StdDraw.setPenColor(StdDraw.BLACK); + StdDraw.text(0.2, 0.5, "black text"); + StdDraw.setPenColor(StdDraw.WHITE); + StdDraw.text(0.8, 0.8, "white text"); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdIn.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdIn.java new file mode 100644 index 000000000..5051221ad --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdIn.java @@ -0,0 +1,337 @@ +/************************************************************************* + * Compilation: javac StdIn.java + * Execution: java StdIn (interactive test of basic functionality) + * + * Reads in data of various types from standard input. + * + *************************************************************************/ + +import java.util.Scanner; +import java.util.NoSuchElementException; +import java.util.regex.Pattern; + +/** + * Standard input. This class provides methods for reading strings + * and numbers from standard input. See + * Section 1.5 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + *

    + * See the technical information in the documentation of the {@link In} + * class, which applies to this class as well. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdIn { + + // it doesn't make sense to instantiate this class + private StdIn() {} + + private static Scanner scanner; + + /*** begin: section (1 of 2) of code duplicated from In to StdIn */ + + // assume Unicode UTF-8 encoding + private static final String charsetName = "UTF-8"; + + // assume language = English, country = US for consistency with System.out. + private static final java.util.Locale usLocale = + new java.util.Locale("en", "US"); + + // the default token separator; we maintain the invariant that this value + // is held by the scanner's delimiter between calls + private static final Pattern WHITESPACE_PATTERN + = Pattern.compile("\\p{javaWhitespace}+"); + + // makes whitespace characters significant + private static final Pattern EMPTY_PATTERN + = Pattern.compile(""); + + // used to read the entire input. source: + // http://weblogs.java.net/blog/pat/archive/2004/10/stupid_scanner_1.html + private static final Pattern EVERYTHING_PATTERN + = Pattern.compile("\\A"); + + /*** end: section (1 of 2) of code duplicated from In to StdIn */ + + /*** begin: section (2 of 2) of code duplicated from In to StdIn, + * with all methods changed from "public" to "public static" ***/ + + /** How many characters have been read so far? + */ + public static void savePosition() { + try { + position = scanner.match().end(); + } + catch (IllegalStateException e) { + position = 0; // nothing has been read yet + } + } + + public static int position = 0; + + /** + * Is the input empty (except possibly for whitespace)? Use this + * to know whether the next call to {@link #readString()}, + * {@link #readDouble()}, etc will succeed. + */ + public static boolean isEmpty() { + return !scanner.hasNext(); + } + + /** + * Does the input have a next line? Use this to know whether the + * next call to {@link #readLine()} will succeed.

    Functionally + * equivalent to {@link #hasNextChar()}. + */ + public static boolean hasNextLine() { + return scanner.hasNextLine(); + } + + /** + * Is the input empty (including whitespace)? Use this to know + * whether the next call to {@link #readChar()} will succeed.

    Functionally + * equivalent to {@link #hasNextLine()}. + */ + public static boolean hasNextChar() { + scanner.useDelimiter(EMPTY_PATTERN); + boolean result = scanner.hasNext(); + scanner.useDelimiter(WHITESPACE_PATTERN); + return result; + } + + + /** + * Read and return the next line. + */ + public static String readLine() { + String line; + try { line = scanner.nextLine(); savePosition(); } + catch (Exception e) { line = null; } + return line; + } + + /** + * Read and return the next character. + */ + public static char readChar() { + scanner.useDelimiter(EMPTY_PATTERN); + String ch = scanner.next(); + assert (ch.length() == 1) : "Internal (Std)In.readChar() error!" + + " Please contact the authors."; + scanner.useDelimiter(WHITESPACE_PATTERN); + char result = ch.charAt(0); + savePosition(); + return result; + } + + + /** + * Read and return the remainder of the input as a string. + */ + public static String readAll() { + if (!scanner.hasNextLine()) + return ""; + + String result = scanner.useDelimiter(EVERYTHING_PATTERN).next(); + // not that important to reset delimeter, since now scanner is empty + scanner.useDelimiter(WHITESPACE_PATTERN); // but let's do it anyway + savePosition(); + return result; + } + + + /** + * Read and return the next string. + */ + public static String readString() { + String result = scanner.next(); + savePosition(); + return result; + } + + /** + * Read and return the next int. + */ + public static int readInt() { + int result = 0; + result = scanner.nextInt(); + savePosition(); + return result; + } + + /** + * Read and return the next double. + */ + public static double readDouble() { + double result = scanner.nextDouble(); + savePosition(); + return result; + } + + /** + * Read and return the next float. + */ + public static float readFloat() { + float result = scanner.nextFloat(); + savePosition(); + return result; + } + + /** + * Read and return the next long. + */ + public static long readLong() { + long result = scanner.nextLong(); + savePosition(); + return result; + } + + /** + * Read and return the next short. + */ + public static short readShort() { + short result = scanner.nextShort(); + savePosition(); + return result; + } + + /** + * Read and return the next byte. + */ + public static byte readByte() { + byte result = scanner.nextByte(); + savePosition(); + return result; + } + + /** + * Read and return the next boolean, allowing case-insensitive + * "true" or "1" for true, and "false" or "0" for false. + */ + public static boolean readBoolean() { + String s = readString(); + savePosition(); + if (s.equalsIgnoreCase("true")) return true; + if (s.equalsIgnoreCase("false")) return false; + if (s.equals("1")) return true; + if (s.equals("0")) return false; + throw new java.util.InputMismatchException(); + } + + /** + * Read all strings until the end of input is reached, and return them. + */ + public static String[] readAllStrings() { + // we could use readAll.trim().split(), but that's not consistent + // since trim() uses characters 0x00..0x20 as whitespace + String[] tokens = WHITESPACE_PATTERN.split(readAll()); + if (tokens.length == 0 || tokens[0].length() > 0) + return tokens; + String[] decapitokens = new String[tokens.length-1]; + for (int i=0; i < tokens.length-1; i++) + decapitokens[i] = tokens[i+1]; + savePosition(); + return decapitokens; + } + + /** + * Read all ints until the end of input is reached, and return them. + */ + public static int[] readAllInts() { + String[] fields = readAllStrings(); + int[] vals = new int[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Integer.parseInt(fields[i]); + savePosition(); + return vals; + } + + /** + * Read all doubles until the end of input is reached, and return them. + */ + public static double[] readAllDoubles() { + String[] fields = readAllStrings(); + double[] vals = new double[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Double.parseDouble(fields[i]); + savePosition(); + return vals; + } + + /*** end: section (2 of 2) of code duplicated from In to StdIn */ + + + /** + * If StdIn changes, use this to reinitialize the scanner. + */ + private static void resync() { + setScanner(new Scanner(new java.io.BufferedInputStream(System.in), + charsetName)); + } + + private static void setScanner(Scanner scanner) { + StdIn.scanner = scanner; + StdIn.scanner.useLocale(usLocale); + savePosition(); + } + + // do this once when StdIn is initialized + static { + resync(); + } + + /** + * Reads all ints from stdin. + * @deprecated For more consistency, use {@link #readAllInts()} + */ + public static int[] readInts() { + return readAllInts(); + } + + /** + * Reads all doubles from stdin. + * @deprecated For more consistency, use {@link #readAllDoubles()} + */ + public static double[] readDoubles() { + return readAllDoubles(); + } + + /** + * Reads all Strings from stdin. + * @deprecated For more consistency, use {@link #readAllStrings()} + */ + public static String[] readStrings() { + return readAllStrings(); + } + + + /** + * Interactive test of basic functionality. + */ + public static void main(String[] args) { + + System.out.println("Type a string: "); + String s = StdIn.readString(); + System.out.println("Your string was: " + s); + System.out.println(); + + System.out.println("Type an int: "); + int a = StdIn.readInt(); + System.out.println("Your int was: " + a); + System.out.println(); + + System.out.println("Type a boolean: "); + boolean b = StdIn.readBoolean(); + System.out.println("Your boolean was: " + b); + System.out.println(); + + System.out.println("Type a double: "); + double c = StdIn.readDouble(); + System.out.println("Your double was: " + c); + System.out.println(); + + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdIn.java-orig b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdIn.java-orig new file mode 100644 index 000000000..5290785eb --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdIn.java-orig @@ -0,0 +1,300 @@ +/************************************************************************* + * Compilation: javac StdIn.java + * Execution: java StdIn (interactive test of basic functionality) + * + * Reads in data of various types from standard input. + * + *************************************************************************/ + +import java.util.Scanner; +import java.util.regex.Pattern; + +/** + * Standard input. This class provides methods for reading strings + * and numbers from standard input. See + * Section 1.5 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + *

    + * See the technical information in the documentation of the {@link In} + * class, which applies to this class as well. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdIn { + + // it doesn't make sense to instantiate this class + private StdIn() {} + + private static Scanner scanner; + + /*** begin: section (1 of 2) of code duplicated from In to StdIn */ + + // assume Unicode UTF-8 encoding + private static final String charsetName = "UTF-8"; + + // assume language = English, country = US for consistency with System.out. + private static final java.util.Locale usLocale = + new java.util.Locale("en", "US"); + + // the default token separator; we maintain the invariant that this value + // is held by the scanner's delimiter between calls + private static final Pattern WHITESPACE_PATTERN + = Pattern.compile("\\p{javaWhitespace}+"); + + // makes whitespace characters significant + private static final Pattern EMPTY_PATTERN + = Pattern.compile(""); + + // used to read the entire input. source: + // http://weblogs.java.net/blog/pat/archive/2004/10/stupid_scanner_1.html + private static final Pattern EVERYTHING_PATTERN + = Pattern.compile("\\A"); + + /*** end: section (1 of 2) of code duplicated from In to StdIn */ + + /*** begin: section (2 of 2) of code duplicated from In to StdIn, + * with all methods changed from "public" to "public static" ***/ + + /** + * Is the input empty (except possibly for whitespace)? Use this + * to know whether the next call to {@link #readString()}, + * {@link #readDouble()}, etc will succeed. + */ + public static boolean isEmpty() { + return !scanner.hasNext(); + } + + /** + * Does the input have a next line? Use this to know whether the + * next call to {@link #readLine()} will succeed.

    Functionally + * equivalent to {@link #hasNextChar()}. + */ + public static boolean hasNextLine() { + return scanner.hasNextLine(); + } + + /** + * Is the input empty (including whitespace)? Use this to know + * whether the next call to {@link #readChar()} will succeed.

    Functionally + * equivalent to {@link #hasNextLine()}. + */ + public static boolean hasNextChar() { + scanner.useDelimiter(EMPTY_PATTERN); + boolean result = scanner.hasNext(); + scanner.useDelimiter(WHITESPACE_PATTERN); + return result; + } + + + /** + * Read and return the next line. + */ + public static String readLine() { + String line; + try { line = scanner.nextLine(); } + catch (Exception e) { line = null; } + return line; + } + + /** + * Read and return the next character. + */ + public static char readChar() { + scanner.useDelimiter(EMPTY_PATTERN); + String ch = scanner.next(); + assert (ch.length() == 1) : "Internal (Std)In.readChar() error!" + + " Please contact the authors."; + scanner.useDelimiter(WHITESPACE_PATTERN); + return ch.charAt(0); + } + + + /** + * Read and return the remainder of the input as a string. + */ + public static String readAll() { + if (!scanner.hasNextLine()) + return ""; + + String result = scanner.useDelimiter(EVERYTHING_PATTERN).next(); + // not that important to reset delimeter, since now scanner is empty + scanner.useDelimiter(WHITESPACE_PATTERN); // but let's do it anyway + return result; + } + + + /** + * Read and return the next string. + */ + public static String readString() { + return scanner.next(); + } + + /** + * Read and return the next int. + */ + public static int readInt() { + return scanner.nextInt(); + } + + /** + * Read and return the next double. + */ + public static double readDouble() { + return scanner.nextDouble(); + } + + /** + * Read and return the next float. + */ + public static float readFloat() { + return scanner.nextFloat(); + } + + /** + * Read and return the next long. + */ + public static long readLong() { + return scanner.nextLong(); + } + + /** + * Read and return the next short. + */ + public static short readShort() { + return scanner.nextShort(); + } + + /** + * Read and return the next byte. + */ + public static byte readByte() { + return scanner.nextByte(); + } + + /** + * Read and return the next boolean, allowing case-insensitive + * "true" or "1" for true, and "false" or "0" for false. + */ + public static boolean readBoolean() { + String s = readString(); + if (s.equalsIgnoreCase("true")) return true; + if (s.equalsIgnoreCase("false")) return false; + if (s.equals("1")) return true; + if (s.equals("0")) return false; + throw new java.util.InputMismatchException(); + } + + /** + * Read all strings until the end of input is reached, and return them. + */ + public static String[] readAllStrings() { + // we could use readAll.trim().split(), but that's not consistent + // since trim() uses characters 0x00..0x20 as whitespace + String[] tokens = WHITESPACE_PATTERN.split(readAll()); + if (tokens.length == 0 || tokens[0].length() > 0) + return tokens; + String[] decapitokens = new String[tokens.length-1]; + for (int i=0; i < tokens.length-1; i++) + decapitokens[i] = tokens[i+1]; + return decapitokens; + } + + /** + * Read all ints until the end of input is reached, and return them. + */ + public static int[] readAllInts() { + String[] fields = readAllStrings(); + int[] vals = new int[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Integer.parseInt(fields[i]); + return vals; + } + + /** + * Read all doubles until the end of input is reached, and return them. + */ + public static double[] readAllDoubles() { + String[] fields = readAllStrings(); + double[] vals = new double[fields.length]; + for (int i = 0; i < fields.length; i++) + vals[i] = Double.parseDouble(fields[i]); + return vals; + } + + /*** end: section (2 of 2) of code duplicated from In to StdIn */ + + + /** + * If StdIn changes, use this to reinitialize the scanner. + */ + private static void resync() { + setScanner(new Scanner(new java.io.BufferedInputStream(System.in), + charsetName)); + } + + private static void setScanner(Scanner scanner) { + StdIn.scanner = scanner; + StdIn.scanner.useLocale(usLocale); + } + + // do this once when StdIn is initialized + static { + resync(); + } + + /** + * Reads all ints from stdin. + * @deprecated For more consistency, use {@link #readAllInts()} + */ + public static int[] readInts() { + return readAllInts(); + } + + /** + * Reads all doubles from stdin. + * @deprecated For more consistency, use {@link #readAllDoubles()} + */ + public static double[] readDoubles() { + return readAllDoubles(); + } + + /** + * Reads all Strings from stdin. + * @deprecated For more consistency, use {@link #readAllStrings()} + */ + public static String[] readStrings() { + return readAllStrings(); + } + + + /** + * Interactive test of basic functionality. + */ + public static void main(String[] args) { + + System.out.println("Type a string: "); + String s = StdIn.readString(); + System.out.println("Your string was: " + s); + System.out.println(); + + System.out.println("Type an int: "); + int a = StdIn.readInt(); + System.out.println("Your int was: " + a); + System.out.println(); + + System.out.println("Type a boolean: "); + boolean b = StdIn.readBoolean(); + System.out.println("Your boolean was: " + b); + System.out.println(); + + System.out.println("Type a double: "); + double c = StdIn.readDouble(); + System.out.println("Your double was: " + c); + System.out.println(); + + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdInTest.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdInTest.java new file mode 100644 index 000000000..aaae452de --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdInTest.java @@ -0,0 +1,340 @@ +/** + * Test client for StdIn and In. + **/ + +import java.util.Scanner; +import java.util.Arrays; +import java.lang.reflect.Array; +import java.lang.reflect.Method; +import java.io.ByteArrayInputStream; +import java.net.URL; +import java.net.URLClassLoader; + +public class StdInTest { + + // make a printable/readable version of an object + public static Object escape(Object original) { + if (original instanceof Character) { + char u = (char) ((Character)original); + int idx = "\b\t\n\f\r\"\'\\".indexOf(u); + if (idx >= 0) + return "\\"+"btnfr\"\'\\".charAt(idx); + if (u < 32) + return "\\"+Integer.toOctalString(u); + if (u > 126) + return "\\u"+String.format("%04X", (int)u); + return original; + } + else if (original instanceof String) { + StringBuilder result = new StringBuilder(); + for (char c : ((String)original).toCharArray()) + result.append(escape(c)); + return "\"" + result.toString() + "\""; + } + else if (original.getClass().isArray()) { + StringBuilder result = new StringBuilder("["); + int len = Array.getLength(original); + for (int i=0; iStandard output. This class provides methods for writing strings + * and numbers to standard output. + *

    + * For additional documentation, see Section 1.5 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdOut { + + // force Unicode UTF-8 encoding; otherwise it's system dependent + private static final String charsetName = "UTF-8"; + + // assume language = English, country = US for consistency with StdIn + private static final Locale US_LOCALE = new Locale("en", "US"); + + // send output here + private static PrintWriter out; + + // this is called before invoking any methods + static { + try { + out = new PrintWriter(new OutputStreamWriter(System.out, charsetName), true); + } + catch (UnsupportedEncodingException e) { System.out.println(e); } + } + + // don't instantiate + private StdOut() { } + + // close the output stream (not required) + /** + * Close standard output. + */ + public static void close() { + out.close(); + } + + /** + * Terminate the current line by printing the line separator string. + */ + public static void println() { + out.println(); + } + + /** + * Print an object to standard output and then terminate the line. + */ + public static void println(Object x) { + out.println(x); + } + + /** + * Print a boolean to standard output and then terminate the line. + */ + public static void println(boolean x) { + out.println(x); + } + + /** + * Print a char to standard output and then terminate the line. + */ + public static void println(char x) { + out.println(x); + } + + /** + * Print a double to standard output and then terminate the line. + */ + public static void println(double x) { + out.println(x); + } + + /** + * Print a float to standard output and then terminate the line. + */ + public static void println(float x) { + out.println(x); + } + + /** + * Print an int to standard output and then terminate the line. + */ + public static void println(int x) { + out.println(x); + } + + /** + * Print a long to standard output and then terminate the line. + */ + public static void println(long x) { + out.println(x); + } + + /** + * Print a short to standard output and then terminate the line. + */ + public static void println(short x) { + out.println(x); + } + + /** + * Print a byte to standard output and then terminate the line. + */ + public static void println(byte x) { + out.println(x); + } + + /** + * Flush standard output. + */ + public static void print() { + out.flush(); + } + + /** + * Print an Object to standard output and flush standard output. + */ + public static void print(Object x) { + out.print(x); + out.flush(); + } + + /** + * Print a boolean to standard output and flush standard output. + */ + public static void print(boolean x) { + out.print(x); + out.flush(); + } + + /** + * Print a char to standard output and flush standard output. + */ + public static void print(char x) { + out.print(x); + out.flush(); + } + + /** + * Print a double to standard output and flush standard output. + */ + public static void print(double x) { + out.print(x); + out.flush(); + } + + /** + * Print a float to standard output and flush standard output. + */ + public static void print(float x) { + out.print(x); + out.flush(); + } + + /** + * Print an int to standard output and flush standard output. + */ + public static void print(int x) { + out.print(x); + out.flush(); + } + + /** + * Print a long to standard output and flush standard output. + */ + public static void print(long x) { + out.print(x); + out.flush(); + } + + /** + * Print a short to standard output and flush standard output. + */ + public static void print(short x) { + out.print(x); + out.flush(); + } + + /** + * Print a byte to standard output and flush standard output. + */ + public static void print(byte x) { + out.print(x); + out.flush(); + } + + /** + * Print a formatted string to standard output using the specified + * format string and arguments, and flush standard output. + */ + public static void printf(String format, Object... args) { + out.printf(US_LOCALE, format, args); + out.flush(); + } + + /** + * Print a formatted string to standard output using the specified + * locale, format string, and arguments, and flush standard output. + */ + public static void printf(Locale locale, String format, Object... args) { + out.printf(locale, format, args); + out.flush(); + } + + // This method is just here to test the class + public static void main(String[] args) { + + // write to stdout + StdOut.println("Test"); + StdOut.println(17); + StdOut.println(true); + StdOut.printf("%.6f\n", 1.0/7.0); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdRandom.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdRandom.java new file mode 100644 index 000000000..d79ede79e --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdRandom.java @@ -0,0 +1,347 @@ +/************************************************************************* + * Compilation: javac StdRandom.java + * Execution: java StdRandom + * + * A library of static methods to generate pseudo-random numbers from + * different distributions (bernoulli, uniform, gaussian, discrete, + * and exponential). Also includes a method for shuffling an array. + * + * + * % java StdRandom 5 + * seed = 1316600602069 + * 59 16.81826 true 8.83954 0 + * 32 91.32098 true 9.11026 0 + * 35 10.11874 true 8.95396 3 + * 92 32.88401 true 8.87089 0 + * 72 92.55791 true 9.46241 0 + * + * % java StdRandom 5 + * seed = 1316600616575 + * 96 60.17070 true 8.72821 0 + * 79 32.01607 true 8.58159 0 + * 81 59.49065 true 9.10423 1 + * 96 51.65818 true 9.02102 0 + * 99 17.55771 true 8.99762 0 + * + * % java StdRandom 5 1316600616575 + * seed = 1316600616575 + * 96 60.17070 true 8.72821 0 + * 79 32.01607 true 8.58159 0 + * 81 59.49065 true 9.10423 1 + * 96 51.65818 true 9.02102 0 + * 99 17.55771 true 8.99762 0 + * + * + * Remark + * ------ + * - Relies on randomness of nextDouble() method in java.util.Random + * to generate pseudorandom numbers in [0, 1). + * + * - This library allows you to set and get the pseudorandom number seed. + * + * - See http://www.honeylocust.com/RngPack/ for an industrial + * strength random number generator in Java. + * + *************************************************************************/ + +import java.util.Random; + +/** + * Standard random. This class provides methods for generating + * random number from various distributions. + *

    + * For additional documentation, see Section 2.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdRandom { + + private static Random random; // pseudo-random number generator + private static long seed; // pseudo-random number generator seed + + // static initializer + static { + // this is how the seed was set in Java 1.4 + seed = System.currentTimeMillis(); + random = new Random(seed); + } + + // don't instantiate + private StdRandom() { } + + /** + * Set the seed of the psedurandom number generator. + */ + public static void setSeed(long s) { + seed = s; + random = new Random(seed); + } + + /** + * Get the seed of the psedurandom number generator. + */ + public static long getSeed() { + return seed; + } + + /** + * Return real number uniformly in [0, 1). + */ + public static double uniform() { + return random.nextDouble(); + } + + /** + * Return an integer uniformly between 0 (inclusive) and N (exclusive). + */ + public static int uniform(int N) { + return random.nextInt(N); + } + + /////////////////////////////////////////////////////////////////////////// + // STATIC METHODS BELOW RELY ON JAVA.UTIL.RANDOM ONLY INDIRECTLY VIA + // THE STATIC METHODS ABOVE. + /////////////////////////////////////////////////////////////////////////// + + /** + * Return real number uniformly in [0, 1). + */ + public static double random() { + return uniform(); + } + + /** + * Return int uniformly in [a, b). + */ + public static int uniform(int a, int b) { + return a + uniform(b - a); + } + + /** + * Return real number uniformly in [a, b). + */ + public static double uniform(double a, double b) { + return a + uniform() * (b-a); + } + + /** + * Return a boolean, which is true with probability p, and false otherwise. + */ + public static boolean bernoulli(double p) { + return uniform() < p; + } + + /** + * Return a boolean, which is true with probability .5, and false otherwise. + */ + public static boolean bernoulli() { + return bernoulli(0.5); + } + + /** + * Return a real number with a standard Gaussian distribution. + */ + public static double gaussian() { + // use the polar form of the Box-Muller transform + double r, x, y; + do { + x = uniform(-1.0, 1.0); + y = uniform(-1.0, 1.0); + r = x*x + y*y; + } while (r >= 1 || r == 0); + return x * Math.sqrt(-2 * Math.log(r) / r); + + // Remark: y * Math.sqrt(-2 * Math.log(r) / r) + // is an independent random gaussian + } + + /** + * Return a real number from a gaussian distribution with given mean and stddev + */ + public static double gaussian(double mean, double stddev) { + return mean + stddev * gaussian(); + } + + /** + * Return an integer with a geometric distribution with mean 1/p. + */ + public static int geometric(double p) { + // using algorithm given by Knuth + return (int) Math.ceil(Math.log(uniform()) / Math.log(1.0 - p)); + } + + /** + * Return an integer with a Poisson distribution with mean lambda. + */ + public static int poisson(double lambda) { + // using algorithm given by Knuth + // see http://en.wikipedia.org/wiki/Poisson_distribution + int k = 0; + double p = 1.0; + double L = Math.exp(-lambda); + do { + k++; + p *= uniform(); + } while (p >= L); + return k-1; + } + + /** + * Return a real number with a Pareto distribution with parameter alpha. + */ + public static double pareto(double alpha) { + return Math.pow(1 - uniform(), -1.0/alpha) - 1.0; + } + + /** + * Return a real number with a Cauchy distribution. + */ + public static double cauchy() { + return Math.tan(Math.PI * (uniform() - 0.5)); + } + + /** + * Return a number from a discrete distribution: i with probability a[i]. + * Precondition: array entries are nonnegative and their sum (very nearly) equals 1.0. + */ + public static int discrete(double[] a) { + double EPSILON = 1E-14; + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + if (a[i] < 0.0) throw new IllegalArgumentException("array entry " + i + " is negative: " + a[i]); + sum = sum + a[i]; + } + if (sum > 1.0 + EPSILON || sum < 1.0 - EPSILON) + throw new IllegalArgumentException("sum of array entries not equal to one: " + sum); + + // the for loop may not return a value when both r is (nearly) 1.0 and when the + // cumulative sum is less than 1.0 (as a result of floating-point roundoff error) + while (true) { + double r = uniform(); + sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum = sum + a[i]; + if (sum > r) return i; + } + } + } + + /** + * Return a real number from an exponential distribution with rate lambda. + */ + public static double exp(double lambda) { + return -Math.log(1 - uniform()) / lambda; + } + + /** + * Rearrange the elements of an array in random order. + */ + public static void shuffle(Object[] a) { + int N = a.length; + for (int i = 0; i < N; i++) { + int r = i + uniform(N-i); // between i and N-1 + Object temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of a double array in random order. + */ + public static void shuffle(double[] a) { + int N = a.length; + for (int i = 0; i < N; i++) { + int r = i + uniform(N-i); // between i and N-1 + double temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of an int array in random order. + */ + public static void shuffle(int[] a) { + int N = a.length; + for (int i = 0; i < N; i++) { + int r = i + uniform(N-i); // between i and N-1 + int temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + + /** + * Rearrange the elements of the subarray a[lo..hi] in random order. + */ + public static void shuffle(Object[] a, int lo, int hi) { + if (lo < 0 || lo > hi || hi >= a.length) { + throw new IndexOutOfBoundsException("Illegal subarray range"); + } + for (int i = lo; i <= hi; i++) { + int r = i + uniform(hi-i+1); // between i and hi + Object temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of the subarray a[lo..hi] in random order. + */ + public static void shuffle(double[] a, int lo, int hi) { + if (lo < 0 || lo > hi || hi >= a.length) { + throw new IndexOutOfBoundsException("Illegal subarray range"); + } + for (int i = lo; i <= hi; i++) { + int r = i + uniform(hi-i+1); // between i and hi + double temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Rearrange the elements of the subarray a[lo..hi] in random order. + */ + public static void shuffle(int[] a, int lo, int hi) { + if (lo < 0 || lo > hi || hi >= a.length) { + throw new IndexOutOfBoundsException("Illegal subarray range"); + } + for (int i = lo; i <= hi; i++) { + int r = i + uniform(hi-i+1); // between i and hi + int temp = a[i]; + a[i] = a[r]; + a[r] = temp; + } + } + + /** + * Unit test. + */ + public static void main(String[] args) { + int N = Integer.parseInt(args[0]); + if (args.length == 2) StdRandom.setSeed(Long.parseLong(args[1])); + double[] t = { .5, .3, .1, .1 }; + + StdOut.println("seed = " + StdRandom.getSeed()); + for (int i = 0; i < N; i++) { + StdOut.printf("%2d " , uniform(100)); + StdOut.printf("%8.5f ", uniform(10.0, 99.0)); + StdOut.printf("%5b " , bernoulli(.5)); + StdOut.printf("%7.5f ", gaussian(9.0, .2)); + StdOut.printf("%2d " , discrete(t)); + StdOut.println(); + } + + String[] a = "A B C D E F G".split(" "); + for (String s : a) + StdOut.print(s + " "); + StdOut.println(); + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdStats.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdStats.java new file mode 100644 index 000000000..2a9aeb0c2 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/StdStats.java @@ -0,0 +1,336 @@ + +/************************************************************************* + * Compilation: javac StdStats.java + * Execution: java StdStats < input.txt + * + * Library of statistical functions. + * + * The test client reads an array of real numbers from standard + * input, and computes the minimum, mean, maximum, and + * standard deviation. + * + * The functions all throw a NullPointerException if the array + * passed in is null. + + * % more tiny.txt + * 5 + * 3.0 1.0 2.0 5.0 4.0 + * + * % java StdStats < tiny.txt + * min 1.000 + * mean 3.000 + * max 5.000 + * std dev 1.581 + * + *************************************************************************/ + +/** + * Standard statistics. This class provides methods for computing + * statistics such as min, max, mean, sample standard deviation, and + * sample variance. + *

    + * For additional documentation, see + * Section 2.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public final class StdStats { + + private StdStats() { } + + /** + * Return maximum value in array, -infinity if no such value. + */ + public static double max(double[] a) { + double max = Double.NEGATIVE_INFINITY; + for (int i = 0; i < a.length; i++) { + if (a[i] > max) max = a[i]; + } + return max; + } + + /** + * Return maximum value in subarray a[lo..hi], -infinity if no such value. + */ + public static double max(double[] a, int lo, int hi) { + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + double max = Double.NEGATIVE_INFINITY; + for (int i = lo; i <= hi; i++) { + if (a[i] > max) max = a[i]; + } + return max; + } + + /** + * Return maximum value of array, Integer.MIN_VALUE if no such value + */ + public static int max(int[] a) { + int max = Integer.MIN_VALUE; + for (int i = 0; i < a.length; i++) { + if (a[i] > max) max = a[i]; + } + return max; + } + + /** + * Return minimum value in array, +infinity if no such value. + */ + public static double min(double[] a) { + double min = Double.POSITIVE_INFINITY; + for (int i = 0; i < a.length; i++) { + if (a[i] < min) min = a[i]; + } + return min; + } + + /** + * Return minimum value in subarray a[lo..hi], +infinity if no such value. + */ + public static double min(double[] a, int lo, int hi) { + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + double min = Double.POSITIVE_INFINITY; + for (int i = lo; i <= hi; i++) { + if (a[i] < min) min = a[i]; + } + return min; + } + + /** + * Return minimum value of array, Integer.MAX_VALUE if no such value + */ + public static int min(int[] a) { + int min = Integer.MAX_VALUE; + for (int i = 0; i < a.length; i++) { + if (a[i] < min) min = a[i]; + } + return min; + } + + /** + * Return average value in array, NaN if no such value. + */ + public static double mean(double[] a) { + if (a.length == 0) return Double.NaN; + double sum = sum(a); + return sum / a.length; + } + + /** + * Return average value in subarray a[lo..hi], NaN if no such value. + */ + public static double mean(double[] a, int lo, int hi) { + int length = hi - lo + 1; + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + if (length == 0) return Double.NaN; + double sum = sum(a, lo, hi); + return sum / length; + } + + /** + * Return average value in array, NaN if no such value. + */ + public static double mean(int[] a) { + if (a.length == 0) return Double.NaN; + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum = sum + a[i]; + } + return sum / a.length; + } + + /** + * Return sample variance of array, NaN if no such value. + */ + public static double var(double[] a) { + if (a.length == 0) return Double.NaN; + double avg = mean(a); + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / (a.length - 1); + } + + /** + * Return sample variance of subarray a[lo..hi], NaN if no such value. + */ + public static double var(double[] a, int lo, int hi) { + int length = hi - lo + 1; + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + if (length == 0) return Double.NaN; + double avg = mean(a, lo, hi); + double sum = 0.0; + for (int i = lo; i <= hi; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / (length - 1); + } + + /** + * Return sample variance of array, NaN if no such value. + */ + public static double var(int[] a) { + if (a.length == 0) return Double.NaN; + double avg = mean(a); + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / (a.length - 1); + } + + /** + * Return population variance of array, NaN if no such value. + */ + public static double varp(double[] a) { + if (a.length == 0) return Double.NaN; + double avg = mean(a); + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / a.length; + } + + /** + * Return population variance of subarray a[lo..hi], NaN if no such value. + */ + public static double varp(double[] a, int lo, int hi) { + int length = hi - lo + 1; + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + if (length == 0) return Double.NaN; + double avg = mean(a, lo, hi); + double sum = 0.0; + for (int i = lo; i <= hi; i++) { + sum += (a[i] - avg) * (a[i] - avg); + } + return sum / length; + } + + + /** + * Return sample standard deviation of array, NaN if no such value. + */ + public static double stddev(double[] a) { + return Math.sqrt(var(a)); + } + + /** + * Return sample standard deviation of subarray a[lo..hi], NaN if no such value. + */ + public static double stddev(double[] a, int lo, int hi) { + return Math.sqrt(var(a, lo, hi)); + } + + /** + * Return sample standard deviation of array, NaN if no such value. + */ + public static double stddev(int[] a) { + return Math.sqrt(var(a)); + } + + /** + * Return population standard deviation of array, NaN if no such value. + */ + public static double stddevp(double[] a) { + return Math.sqrt(varp(a)); + } + + /** + * Return population standard deviation of subarray a[lo..hi], NaN if no such value. + */ + public static double stddevp(double[] a, int lo, int hi) { + return Math.sqrt(varp(a, lo, hi)); + } + + /** + * Return sum of all values in array. + */ + public static double sum(double[] a) { + double sum = 0.0; + for (int i = 0; i < a.length; i++) { + sum += a[i]; + } + return sum; + } + + /** + * Return sum of all values in subarray a[lo..hi]. + */ + public static double sum(double[] a, int lo, int hi) { + if (lo < 0 || hi >= a.length || lo > hi) + throw new RuntimeException("Subarray indices out of bounds"); + double sum = 0.0; + for (int i = lo; i <= hi; i++) { + sum += a[i]; + } + return sum; + } + + /** + * Return sum of all values in array. + */ + public static int sum(int[] a) { + int sum = 0; + for (int i = 0; i < a.length; i++) { + sum += a[i]; + } + return sum; + } + + /** + * Plot points (i, a[i]) to standard draw. + */ + public static void plotPoints(double[] a) { + int N = a.length; + StdDraw.setXscale(0, N-1); + StdDraw.setPenRadius(1.0 / (3.0 * N)); + for (int i = 0; i < N; i++) { + StdDraw.point(i, a[i]); + } + } + + /** + * Plot line segments connecting points (i, a[i]) to standard draw. + */ + public static void plotLines(double[] a) { + int N = a.length; + StdDraw.setXscale(0, N-1); + StdDraw.setPenRadius(); + for (int i = 1; i < N; i++) { + StdDraw.line(i-1, a[i-1], i, a[i]); + } + } + + /** + * Plot bars from (0, a[i]) to (i, a[i]) to standard draw. + */ + public static void plotBars(double[] a) { + int N = a.length; + StdDraw.setXscale(0, N-1); + for (int i = 0; i < N; i++) { + StdDraw.filledRectangle(i, a[i]/2, .25, a[i]/2); + } + } + + + /** + * Test client. + * Convert command-line arguments to array of doubles and call various methods. + */ + public static void main(String[] args) { + double[] a = StdArrayIO.readDouble1D(); + StdOut.printf(" min %7.3f\n", min(a)); + StdOut.printf(" mean %7.3f\n", mean(a)); + StdOut.printf(" max %7.3f\n", max(a)); + StdOut.printf(" std dev %7.3f\n", stddev(a)); + } +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Stopwatch.java b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Stopwatch.java new file mode 100644 index 000000000..f36ba94fa --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/Stopwatch.java @@ -0,0 +1,44 @@ +/************************************************************************* + * Compilation: javac Stopwatch.java + * + * + *************************************************************************/ + +/** + * Stopwatch. This class is a data type for measuring + * the running time (wall clock) of a program. + *

    + * For additional documentation, see + * Section 3.2 of + * Introduction to Programming in Java: An Interdisciplinary Approach + * by Robert Sedgewick and Kevin Wayne. + */ + + + +public class Stopwatch { + + private final long start; + + private String startString; + + /** + * Create a stopwatch object. + */ + public Stopwatch() { + start = System.currentTimeMillis(); + + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("HH:mm:ss.SSS"); + startString = sdf.format(start); + } + + + /** + * Return elapsed time (in seconds) since this object was created. + */ + public double elapsedTime() { + long now = System.currentTimeMillis(); + return (now - start) / 1000.0; + } + +} diff --git a/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/mandrill.jpg b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/mandrill.jpg new file mode 100644 index 000000000..ec58db892 Binary files /dev/null and b/v4-cokapi/backends/java/java_jail/cp/visualizer-stdlib/mandrill.jpg differ diff --git a/v4-cokapi/backends/java/java_jail/dev/.gitignore b/v4-cokapi/backends/java/java_jail/dev/.gitignore new file mode 100644 index 000000000..9199e397a --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/dev/.gitignore @@ -0,0 +1,3 @@ +null +random +urandom \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/etc/.gitignore b/v4-cokapi/backends/java/java_jail/etc/.gitignore new file mode 100644 index 000000000..884135bea --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/etc/.gitignore @@ -0,0 +1 @@ +ld.so.cache \ No newline at end of file diff --git a/v4-cokapi/backends/java/java_jail/java/.gitignore b/v4-cokapi/backends/java/java_jail/java/.gitignore new file mode 100644 index 000000000..de4f4dbd1 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/java/.gitignore @@ -0,0 +1,16 @@ +bin +COPYRIGHT +db +include +jre +lib +LICENSE +man +README.html +release +src.zip +THIRDPARTYLICENSEREADME-JAVAFX.txt +THIRDPARTYLICENSEREADME.txt +demo +sample +javafx-src.zip diff --git a/v4-cokapi/backends/java/java_jail/lib64/.gitignore b/v4-cokapi/backends/java/java_jail/lib64/.gitignore new file mode 100644 index 000000000..bede1dfb7 --- /dev/null +++ b/v4-cokapi/backends/java/java_jail/lib64/.gitignore @@ -0,0 +1,15 @@ +ld-linux-x86-64.so.2 +libc.so.6 +libdl.so.2 +libjava.so +libjli.so +libjvm.so +libm.so.6 +libnsl.so.1 +libnss_compat.so.2 +libnss_dns.so.2 +libnss_files.so.2 +libnss_nis.so.2 +libpthread.so.0 +libresolv.so.2 +librt.so.1 diff --git a/v4-cokapi/backends/java/run-java-backend.sh b/v4-cokapi/backends/java/run-java-backend.sh new file mode 100644 index 000000000..f5cd0be24 --- /dev/null +++ b/v4-cokapi/backends/java/run-java-backend.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# $1 is a string representing a JSON object that the Java backend +# expects as input, such as: java_jail/cp/traceprinter/test-input.txt + +# this will be run within Docker + +# tricky! use a heredoc to pipe the $1 argument into the stdin of the +# java executable WITHOUT interpreting escape chars such as '\n' ... +# echo doesn't work here since it interprets '\n' and other chars +# +# TODO: use -Xmx512m if we need more memory +cat <', ' 0xADDR>', line) + print >> outf, filtered_line + + outf.close() + + +def clobber_golden_file(golden_file): + (base, ext) = os.path.splitext(golden_file) + outfile = base + OUTPUT_FILE_EXTENSION + assert os.path.isfile(outfile) + print ' Clobber %s => %s' % (outfile, golden_file) + shutil.copy(outfile, golden_file) + + +# returns True if there is a diff, False otherwise +def golden_differs_from_out(golden_file): + (base, ext) = os.path.splitext(golden_file) + outfile = base + OUTPUT_FILE_EXTENSION + assert os.path.isfile(outfile) + assert os.path.isfile(golden_file) + + golden_s = open(golden_file).readlines() + out_s = open(outfile).readlines() + + golden_s_filtered = filter_output(golden_s) + out_s_filtered = filter_output(out_s) + + return out_s_filtered != golden_s_filtered + + +def diff_test_output(test_name): + (base, ext) = os.path.splitext(test_name) + + golden_file = base + GOLDEN_FILE_EXTENSION + assert os.path.isfile(golden_file) + outfile = base + OUTPUT_FILE_EXTENSION + assert os.path.isfile(outfile) + + golden_s = open(golden_file).readlines() + out_s = open(outfile).readlines() + + golden_s_filtered = filter_output(golden_s) + out_s_filtered = filter_output(out_s) + + first_line = True + for line in difflib.unified_diff(golden_s_filtered, out_s_filtered, \ + fromfile=golden_file, tofile=outfile): + if first_line: + print # print an extra line to ease readability + first_line = False + print line, + + +def run_test(input_filename, clobber_golden=False): + print 'Testing', input_filename, + + (base, ext) = os.path.splitext(input_filename) + assert ext == INPUT_FILE_EXTENSION + + # to eliminate possibility of using stale output: + outfile = base + OUTPUT_FILE_EXTENSION + if os.path.isfile(outfile): + os.remove(outfile) + + input_fullpath = input_filename + execute(input_fullpath) + + golden_file = base + GOLDEN_FILE_EXTENSION + if os.path.isfile(golden_file): + if golden_differs_from_out(golden_file): + print " " + RED + "FAILED!!!" + ENDC + if clobber_golden: + clobber_golden_file(golden_file) + else: + clobber_golden_file(golden_file) + + +def run_all_tests(clobber=False): + for t in ALL_TESTS: + run_test(t, clobber) + +def diff_all_test_outputs(): + for t in ALL_TESTS: + diff_test_output(t) + + +if __name__ == "__main__": + parser = optparse.OptionParser() + parser.add_option("--all", action="store_true", dest="run_all", + help="Run all tests") + parser.add_option("--only-clobber", action="store_true", dest="only_clobber", + help="Clobber ALL golden files WITHOUT re-running tests") + parser.add_option("--clobber", action="store_true", dest="clobber", + help="Clobber golden files when running tests") + parser.add_option("--test", dest="test_name", + help="Run one test") + parser.add_option("--difftest", dest="diff_test_name", + help="Diff against golden file for one test") + parser.add_option("--diffall", action="store_true", dest="diff_all", + help="Diff against golden file for all tests") + (options, args) = parser.parse_args() + + ALL_TESTS = [] + + for (pwd, subdirs, files) in itertools.chain(*[os.walk(e) for e in TESTDIRS]): + for f in files: + (base, ext) = os.path.splitext(f) + if ext == INPUT_FILE_EXTENSION: + fullpath = os.path.join(pwd, f) + ALL_TESTS.append(fullpath) + + + if options.run_all: + if options.clobber: + print 'Running all tests and clobbering results ...' + else: + print 'Running all tests ...' + run_all_tests(options.clobber) + + elif options.diff_all: + diff_all_test_outputs() + elif options.diff_test_name: + assert options.diff_test_name in ALL_TESTS + diff_test_output(options.diff_test_name) + elif options.test_name: + assert options.test_name in ALL_TESTS + run_test(options.test_name, options.clobber) + elif options.only_clobber: + for t in ALL_TESTS: + (base, ext) = os.path.splitext(t) + golden_file = base + GOLDEN_FILE_EXTENSION + clobber_golden_file(golden_file) + else: + parser.print_help() + diff --git a/v4-cokapi/backends/javascript/jslogger.js b/v4-cokapi/backends/javascript/jslogger.js new file mode 100644 index 000000000..069edfaf7 --- /dev/null +++ b/v4-cokapi/backends/javascript/jslogger.js @@ -0,0 +1,1020 @@ +/* + +JS logger backend for Online Python Tutor runtime visualizer + +First version created on: 2015-01-02 by Philip Guo + +Run as: +node --expose-debug-as=Debug jslogger.js + +Usage: + +# to output trace as 'var trace=' to a JavaScript file, run: +node --expose-debug-as=Debug jslogger.js --jsfile= + +# to dump compact json to stdout, run: +node --expose-debug-as=Debug jslogger.js --jsondump=true + +# to dump a pretty-printed version suitable for diffing and regression tests +node --expose-debug-as=Debug jslogger.js --prettydump=true + +# to run with a script provided on the command line, run something like: +node --expose-debug-as=Debug jslogger.js --jsondump=true --code="" + +see v8/src/debug-debugger.js for some of the impl of the API + +v8 debugger protocol: +https://code.google.com/p/v8-wiki/wiki/DebuggerProtocol + +Prereqs: +npm install eval +npm install underscore +npm install esprima +npm install minimist + +For TypeScript support: + +npm install typescript +sudo npm link typescript # to expose TypeScript compiler +npm install source-map + + +From: https://code.google.com/p/v8-wiki/wiki/DebuggerProtocol +regarding the 'handle_' field of serialized objects ... + + All objects exposed through the debugger is assigned an ID called a + handle. This handle is serialized and can be used to identify objects. + A handle has a certain lifetime after which it will no longer refer to + the same object. Currently the lifetime of handles match the + processing of a debug event. For each debug event handles are + recycled. + + +TODOs: + + +Low-priority TODOs: + +- maybe directly use vm.runInContext +- realize that running within VM module leads to subtle behavioral + differences, as documented in the Node docs + +- check out PromiseEvent and AsyncTaskEvent for maybe handling callbacks? + +Debug.DebugEvent = { Break: 1, + Exception: 2, + NewFunction: 3, + BeforeCompile: 4, + AfterCompile: 5, + CompileError: 6, + PromiseEvent: 7, + AsyncTaskEvent: 8, + BreakForCommand: 9 }; + + +TypeScript TODOs: + +- display more than one error in the trace when there's a TypeScript + compiler error. right now we display only the first error for simplicity. + +- add regression tests + +*/ + + +/*jshint node: true */ +/* global Debug */ +"use strict"; + +var _eval = require('eval'); +var esprima = require('esprima'); +var util = require('util'); +var fs = require('fs'); +var _ = require('underscore'); +var debug = Debug.Debug; + +var log = console.warn; // use stderr because stdout is being captured in the trace + + +var argv = require('minimist')(process.argv.slice(2)); + + +var IGNORE_GLOBAL_VARS = {'ArrayBuffer': true, + 'Int8Array': true, + 'Uint8Array': true, + 'Uint8ClampedArray': true, + 'Int16Array': true, + 'Uint16Array': true, + 'Int32Array': true, + 'Uint32Array': true, + 'Float32Array': true, + 'Float64Array': true, + 'DataView': true, + 'DTRACE_NET_SERVER_CONNECTION': true, + 'DTRACE_NET_STREAM_END': true, + 'DTRACE_NET_SOCKET_READ': true, + 'DTRACE_NET_SOCKET_WRITE': true, + 'DTRACE_HTTP_SERVER_REQUEST': true, + 'DTRACE_HTTP_SERVER_RESPONSE': true, + 'DTRACE_HTTP_CLIENT_REQUEST': true, + 'DTRACE_HTTP_CLIENT_RESPONSE': true, + 'global': true, + 'process': true, + 'GLOBAL': true, + 'root': true, + 'Buffer': true, + 'setTimeout': true, + 'setInterval': true, + 'clearTimeout': true, + 'clearInterval': true, + 'setImmediate': true, + 'clearImmediate': true, + 'console': true, + 'require': true, + 'exports': true, + 'module': true}; + + +var MAX_EXECUTED_LINES = 300; + +String.prototype.rtrim = function() { + return this.replace(/\s*$/g, ""); +}; + + +// Inspired by https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API +var ts = require("typescript"); +var path = require("path"); + +function typescriptCompile(contents) { + // default ts standard library + var libSource = fs.readFileSync(path.join(path.dirname(require.resolve('typescript')), 'lib.d.ts')).toString(); + + var compilerOptions = {sourceMap: true}; // yes, create a source map! + // Generated outputs + var outputs = []; + // Create a compilerHost object to allow the compiler to read and write files + var compilerHost = { + getSourceFile: function (filename, languageVersion) { + if (filename === "file.ts") + return ts.createSourceFile(filename, contents, compilerOptions.target, "0"); + if (filename === "lib.d.ts") + return ts.createSourceFile(filename, libSource, compilerOptions.target, "0"); + return undefined; + }, + writeFile: function (name, text, writeByteOrderMark) { + outputs.push({ name: name, text: text, writeByteOrderMark: writeByteOrderMark }); + }, + getDefaultLibFilename: function () { return "lib.d.ts"; }, + useCaseSensitiveFileNames: function () { return false; }, + getCanonicalFileName: function (filename) { return filename; }, + getCurrentDirectory: function () { return ""; }, + getNewLine: function () { return "\n"; } + }; + // Create a program from inputs + var program = ts.createProgram(["file.ts"], compilerOptions, compilerHost); + // Query for early errors + var errors = program.getDiagnostics(); + // Do not generate code in the presence of early errors + if (!errors.length) { + // Type check and get semantic errors + var checker = program.getTypeChecker(true); + errors = checker.getDiagnostics(); + // Generate output + checker.emitFiles(); + } + return { + outputs: outputs, + //errors: errors.map(function (e) { return e.file.filename + "(" + e.file.getLineAndCharacterFromPosition(e.start).line + "): " + e.messageText; }) + errors: errors.map(function (e) { + var errPos = e.file.getLineAndCharacterFromPosition(e.start); + return {line: errPos.line, msg: e.messageText}; + }) + }; +} + + +// for some reason, stderr is borked when running under the node +// debugger, so we must print to stdout. the node 'assert' module fails +// silently :/ +function assert(cond) { + if (!cond) { + var stack = new Error().stack; + log('Assertion error'); + log(stack); + throw 'Assertion Failure'; + } +} + + +function wrapUserscript(userscript) { + var s = "\"use strict\";\ndebugger;\n"; + s += userscript.rtrim(); + return s; +} + + +var originalStdout = process.stdout.write; +var fauxStdout = []; + +function redirectStdout() { + process.stdout.write = function(string) { + fauxStdout.push(string); + }; +} + +function resetStdout() { + process.stdout.write = originalStdout; +} + +function fauxStdoutToString() { + return fauxStdout.join(''); +} + + +// Key: string form of f.details_.frameId() +// Value: integer number of times called +// +// because v8 reuses frame objects (presumably for optimizations), we +// must munge frame IDs based on the number of times a function was +// called. every time a function RETURNS, increment the call count by 1 +var frameIdCalls = {}; + +var curSmallId = 1; +var frameIdToSmallIds = {}; + +function getCanonicalFrameId(frame) { + var baseFrameId = String(frame.details_.frameId()); // don't forget to stringify! + var realFrameId = baseFrameId; + if (frameIdCalls[baseFrameId] !== undefined) { + realFrameId = baseFrameId + '_' + String(frameIdCalls[baseFrameId]); + } + + // now canonicalize + if (frameIdToSmallIds[realFrameId] === undefined) { + frameIdToSmallIds[realFrameId] = curSmallId++; + } + + return frameIdToSmallIds[realFrameId]; +} + +function encodeToplevelObject(o) { + return encodeObject(o.value_); +} + +var smallObjId = 1; + +// Key: string form of smallObjId +// Value: encoded (compound) heap object +var encodedHeapObjects = {}; + +function getHeap() { + return encodedHeapObjects; +} + +function resetHeap() { + // VERY IMPORTANT to reassign to an empty object rather than just + // clearing the existing object, since getHeap() could have been + // called earlier to return a reference to a previous heap state + encodedHeapObjects = {}; +} + +// modeled after: +// https://github.com/pgbovine/OnlinePythonTutor/blob/master/v3/pg_encoder.py +// +// modifies global encodedHeapObjects +function encodeObject(o) { + if (_.isNumber(o)) { + if (_.isNaN(o)) { + return ['SPECIAL_FLOAT', 'NaN']; + } else if (o === Infinity) { + return ['SPECIAL_FLOAT', 'Infinity']; + } else if (o === -Infinity) { + return ['SPECIAL_FLOAT', '-Infinity']; + } else { + return o; + } + } else if (_.isString(o)) { + return o; + } else if (_.isBoolean(o) || _.isNull(o) || _.isUndefined(o)) { + return ['JS_SPECIAL_VAL', String(o)]; + } else { + // render these as heap objects + + // very important to use _.has since we don't want to + // grab the property in your prototype, only in YOURSELF ... SUBTLE! + if (!_.has(o, 'smallObjId_hidden_')) { + // make this non-enumerable so that it doesn't show up in + // console.log() or other inspector functions + Object.defineProperty(o, 'smallObjId_hidden_', { value: smallObjId, + enumerable: false }); + smallObjId++; + } + assert(o.smallObjId_hidden_ > 0); + + var ret = ['REF', o.smallObjId_hidden_]; + + if (encodedHeapObjects[String(o.smallObjId_hidden_)] !== undefined) { + return ret; + } + else { + assert(_.isObject(o)); + + var newEncodedObj = []; + encodedHeapObjects[String(o.smallObjId_hidden_)] = newEncodedObj; + + var i; + + if (_.isFunction(o)) { + var funcProperties = []; // each element is a pair of [name, encoded value] + + var encodedProto = null; + if (_.isObject(o.prototype)) { + // TRICKY TRICKY! for inheritance to be displayed properly, we + // want to find the prototype of o.prototype and see if it's + // non-empty. if that's true, then even if o.prototype is + // empty (i.e., has no properties of its own), then we should + // still encode it since its 'prototype' "uber-hidden + // property" is non-empty + var prototypeOfPrototype = Object.getPrototypeOf(o.prototype); + if (!_.isEmpty(o.prototype) || + (_.isObject(prototypeOfPrototype) && !_.isEmpty(prototypeOfPrototype))) { + encodedProto = encodeObject(o.prototype); + } + } + + if (encodedProto) { + funcProperties.push(['prototype', encodedProto]); + } + + // now get all of the normal properties out of this function + // object (it's unusual to put properties in a function object, + // but it's still legal!) + var funcPropPairs = _.pairs(o); + for (i = 0; i < funcPropPairs.length; i++) { + funcProperties.push([funcPropPairs[i][0], encodeObject(funcPropPairs[i][1])]); + } + + var funcCodeString = o.toString(); + + /* + + #craftsmanship -- make nested functions look better by indenting + the first line of a nested function definition by however much + the LAST line is indented, ONLY if the last line is simply a + single ending '}'. otherwise it will look ugly since the + function definition doesn't start out indented, like so: + +function bar(x) { + globalZ += 100; + return x + y + globalZ; + } + + */ + var codeLines = funcCodeString.split('\n'); + if (codeLines.length > 1) { + var lastLine = _.last(codeLines); + if (lastLine.trim() === '}') { + var lastLinePrefix = lastLine.slice(0, lastLine.indexOf('}')); + funcCodeString = lastLinePrefix + funcCodeString; // prepend! + } + } + + newEncodedObj.push('JS_FUNCTION', + o.name, + funcCodeString, /* code string*/ + funcProperties.length ? funcProperties : null, /* OPTIONAL */ + null /* parent frame */); + } else if (_.isArray(o)) { + newEncodedObj.push('LIST'); + for (i = 0; i < o.length; i++) { + newEncodedObj.push(encodeObject(o[i])); + } + } else { + // a true object + + // if there's a custom toString() function (note that a truly + // prototypeless object won't have toString method, so check first to + // see if toString is *anywhere* up the prototype chain) + var s = (o.toString !== undefined) ? o.toString() : ''; + if (s !== '' && s !== '[object Object]') { + newEncodedObj.push('INSTANCE_PPRINT', 'object', s); + } else { + newEncodedObj.push('INSTANCE', ''); + var pairs = _.pairs(o); + for (i = 0; i < pairs.length; i++) { + var e = pairs[i]; + newEncodedObj.push([encodeObject(e[0]), encodeObject(e[1])]); + } + + var proto = Object.getPrototypeOf(o); + if (_.isObject(proto) && !_.isEmpty(proto)) { + //log('obj.prototype', proto, proto.smallObjId_hidden_); + // I think __proto__ is the official term for this field, + // *not* 'prototype' + newEncodedObj.push(['__proto__', encodeObject(proto)]); + } + } + } + + return ret; + } + + } + assert(false); +} + + +var curTrace = []; + +// to detect whether we have a possible function call +var prevStack = null; + +function listener(event, execState, eventData, data) { + var stepType, i, n; + var ii, jj, sc, scopeType, scopeObj; + var f; + + // TODO: catch CompileError and maybe other events too + if (event !== debug.DebugEvent.Break && event !== debug.DebugEvent.Exception) { + return; + } + + var isException = (event === debug.DebugEvent.Exception); + + var script = eventData.func().script().name(); + var line = eventData.sourceLine() + 1; + var col = eventData.sourceColumn(); + assert(line >= 2); + line -= 2; // to account for wrapUserscript() adding extra lines + + // if what we're currently executing isn't inside of userscript.js, + // then PUNT, since we're probably in the first line of console.log() + // or some other utility function (except for exceptions, heh) + if (script !== 'userscript.js') { + // this is SUPER hacky ... but if we encounter an exception in a + // library function AND we've already been running userscript.js + // (i.e., curTrace.length > 0), then still log that exception but + // adjust the line and column numbers to the proper values within + // the user's script. + if (isException && curTrace.length > 0) { + stepType = debug.StepAction.StepOut; // step out of the library func + + // SUPER HACKY -- use the line and column numbers from the + // previous trace entry since that was in userscript.js + line = _.last(curTrace).line; + col = _.last(curTrace).col; + } else { + // any non-exception event should just be steppd out of + // immediately without logging to the trace ... + execState.prepareStep(debug.StepAction.StepOut); + return; + } + } else { + // NB: StepInMin is slightly finer-grained than StepIn + stepType = debug.StepAction.StepIn; + + if (line === 0) { // the 'debugger;' line at the beginning of wrapUserscript + execState.prepareStep(stepType); + return; + } + } + + //assert(script === 'userscript.js'); + + // VERY VERY VERY IMPORTANT, or else we won't properly capture heap + // object mutations in the trace! + resetHeap(); + + var all_userscript_frames = []; + + + //log('execState.frameCount', execState.frameCount()); + + // only dig up frames in userscript.js + for (i = 0, n = execState.frameCount(); i < n; i++) { + f = execState.frame(i); + var sn = f.func().script().name(); + + if (sn === 'userscript.js') { + all_userscript_frames.push(f); + } + } + + if (all_userscript_frames.length > 0) { + var curTraceEntry = {}; + + var logEventType = 'step_line'; // the default until proven otherwise + + var curStack = all_userscript_frames.map(function(f) {return getCanonicalFrameId(f);}); + assert(curStack.length > 0); + + if (prevStack) { + if (!_.isEqual(prevStack, curStack)) { + // test whether exactly one extra entry has been pushed to the + // front; if so, that's our newly-called frame + if (_.isEqual(prevStack, curStack.slice(1))) { + logEventType = 'call'; + } + } + } + prevStack = curStack; + + var topFrame = all_userscript_frames[0]; + var topIsReturn = topFrame.isAtReturn(); + if (topIsReturn) { + // nix this check below since it sometimes happens. see + // tests/eloquentjs-8.1.js + //assert(logEventType != 'call'); // shouldn't be a call AND return + + logEventType = 'return'; + + // for aesthetics, if we're returning out of a function, set the + // line number to the PREVIOUS entry's line, since v8 records the + // line number here as usually where the '}' is in the function, + // which doesn't look good + // + // NB: this hack doesn't work all the time, e.g., when you're + // returning from more than one function call in short succession + if (curTrace.length > 0) { + var prevEntry = curTrace[curTrace.length - 1]; + var prevEntryStack = prevEntry.stack_to_render; + if (prevEntryStack.length > 0) { + // do this ONLY IF if we're still in the same frame + var topFid = getCanonicalFrameId(topFrame); + if (prevEntryStack[prevEntryStack.length - 1].frame_id === topFid) { + line = prevEntry.line; + } + } + } + } + + if (isException) { + logEventType = 'exception'; + curTraceEntry.exception_msg = String(eventData.exception_); + } + + curTraceEntry.stdout = fauxStdoutToString(); + curTraceEntry.func_name = topFrame.func().name(); + curTraceEntry.stack_to_render = []; + + curTraceEntry.globals = {}; + curTraceEntry.ordered_globals = []; + + // apply the source map to get the right line numbers: + if (isTypescript) { + // source map doesn't seem to work for 'return' lines since the + // column is 0. hack: set the column to the FIRST column of the text + // in the line to get the source map to detect it ... + // (actually if it's more reliable, do this for EVERY kind of event, + // since we really don't care about column numbers, we care only + // about line numbers) + if (logEventType === 'return') { + var retline = allCodLines[line-1]; + var retlineTrimmed = retline.trim(); + var firstInd = retline.indexOf(retlineTrimmed); + assert(firstInd >= 0); + col = firstInd; + } + var tsPos = tsSourceMap.originalPositionFor({line: line, column: col}); + //log('TS:', tsPos.line, tsPos.column); + line = tsPos.line; + col = tsPos.column; + + // TypeScript features that lead to auto-generated hidden JS code + // (e.g., inheritance) leave no corresponding lines in the .ts file, + // so the conservative thing to do is to *SKIP* those steps, since we + // have nothing sensible to render for them anyhow + if (line === null || line === undefined) { + assert(stepType !== undefined); + execState.prepareStep(stepType); // set debugger to stop at next step + return; // get outta here early! + } + } + + curTraceEntry.line = line; + curTraceEntry.col = col; + curTraceEntry.event = logEventType; + curTraceEntry.heap = getHeap(); + + // inspect only the top "global" frame to grab globals + for (ii = 0; ii < topFrame.scopeCount(); ii++) { + sc = topFrame.scope(ii); + // According to https://code.google.com/p/v8-wiki/wiki/DebuggerProtocol + // + // 0: Global + // 1: Local + // 2: With + // 3: Closure + // 4: Catch + scopeType = sc.details_.details_[0]; + if (scopeType === 0) { // Global -- to handle global variables + scopeObj = sc.details_.details_[1]; + var globalScopePairs = _.pairs(scopeObj); + for (jj = 0; jj < globalScopePairs.length; jj++) { + var globalVarname = globalScopePairs[jj][0]; + var globalVal = globalScopePairs[jj][1]; + if (!_.has(IGNORE_GLOBAL_VARS, globalVarname)) { + curTraceEntry.ordered_globals.push(globalVarname); + assert(!_.has(curTraceEntry.globals, globalVarname)); + curTraceEntry.globals[globalVarname] = encodeObject(globalVal); + } + } + } + else if (scopeType === 4) { // Catch -- to handle global exception blocks + scopeObj = sc.details_.details_[1]; + + var globalCatchScopePairs = _.pairs(scopeObj); + for (jj = 0; jj < globalCatchScopePairs.length; jj++) { + var globalCatchVarname = globalCatchScopePairs[jj][0]; + var globalCatchVal = globalCatchScopePairs[jj][1]; + curTraceEntry.ordered_globals.push(globalCatchVarname); + assert(!_.has(curTraceEntry.globals, globalCatchVarname)); + curTraceEntry.globals[globalCatchVarname] = encodeObject(globalCatchVal); + } + } + } + + for (i = 0; + i < all_userscript_frames.length - 1; /* last frame is fake 'top-level' frame */ + i++) { + var traceStackEntry = {}; + + f = all_userscript_frames[i]; + assert(f.func().script().name() == 'userscript.js'); + + var isConstructorCall = f.isConstructCall(); + + var fid = getCanonicalFrameId(f); + //log(i, 'funcname:', f.func().name(), fid); + + traceStackEntry.func_name = f.func().name(); + traceStackEntry.frame_id = fid; + + if (isConstructorCall) { + traceStackEntry.func_name += ' (constructor)'; + } + + // TODO: this might not still be correct if we have closures + traceStackEntry.is_highlighted = (f === topFrame); + + + // TODO: implement support for closures + traceStackEntry.is_parent = false; + traceStackEntry.is_zombie = false; + traceStackEntry.parent_frame_id_list = []; + + // TODO: need to modify when we have closures with parent and + // zombie frames + traceStackEntry.unique_hash = traceStackEntry.func_name + '_f' + traceStackEntry.frame_id; + + + traceStackEntry.ordered_varnames = []; // TODO: how should we sort these? + traceStackEntry.encoded_locals = {}; + + // encode 'this' if it's defined and doesn't point to the + // pseudo-'global' top-level wrapper in the _eval call: + var receiver = f.receiver(); + if (receiver.type_ === 'object') { + var realThis = receiver.value_; + + // sometimes you'll get a weirdo receiver that's an empty object + // with NO PROTOTYPE ... wtf?!? WTF?!? that's real bad news, so + // we don't want to try to run encodeObject on it, since it + // blows the hell up. so skip those bad cases + var thisProto = Object.getPrototypeOf(realThis); + if (thisProto) { + traceStackEntry.ordered_varnames.push('this'); + assert(traceStackEntry.encoded_locals['this'] === undefined); + traceStackEntry.encoded_locals['this'] = encodeObject(realThis); + } + } + + var j, k, v; + + /* + + // This is the OLD DEPRECATED WAY to get args and locals, which is + // brittle. instead we just grab elements from the Local scope + // dict below. I suppose one "advantage" of this approach is that + // you get arguments and locals IN ORDER, so maybe that could be + // used later to populate ordered_varnames or something. But it's + // brittle :/ + + for (j = 0; j < f.argumentCount(); j++) { + log('ARG', k, '->', v); + k = f.argumentName(j); + v = f.argumentValue(j); + + traceStackEntry.ordered_varnames.push(k); + assert(traceStackEntry.encoded_locals[k] === undefined); + traceStackEntry.encoded_locals[k] = encodeToplevelObject(v); + } + + // always encode arguments BEFORE locals, since there's the + // possibility that a local and argument with the SAME NAME + // exists, in which case the local's value should override the + // argument's value. if you mutate a local, apparently the entry + // in arguments stays unmodified; interesting + /* + for (j = 0; j < f.localCount(); j++) { + log('LOCAL', k, '->', v); + k = f.localName(j); + v = f.localValue(j); + + // don't push a duplicate in case it already appeared in + // arguments above + if (!_.contains(traceStackEntry.ordered_varnames, k)) { + traceStackEntry.ordered_varnames.push(k); + } + + // will override the earlier entry from arguments if it exists + traceStackEntry.encoded_locals[k] = encodeToplevelObject(v); + } + */ + + var nParentScopes = 1; + for (ii = 0; + ii < f.scopeCount(); + ii++) { + sc = f.scope(ii); + + // According to https://code.google.com/p/v8-wiki/wiki/DebuggerProtocol + // + // 0: Global + // 1: Local + // 2: With + // 3: Closure + // 4: Catch + scopeType = sc.details_.details_[0]; + var e; + // DON'T grab globals again since it's redundant + if (scopeType === 1 || scopeType === 4) { // Local or Catch (for exceptions) + // encode local variables + + scopeObj = sc.details_.details_[1]; + assert(_.isObject(scopeObj)); + var localScopePairs = _.pairs(scopeObj); + for (jj = 0; jj < localScopePairs.length; jj++) { + e = localScopePairs[jj]; + traceStackEntry.ordered_varnames.push(e[0]); + assert(!_.has(traceStackEntry.encoded_locals, e[0])); + traceStackEntry.encoded_locals[e[0]] = encodeObject(e[1]); + } + } else if (scopeType === 2 || scopeType === 3) { // With, Closure + // poor person's closure display ... simply INLINE closure + // variables into this frame, since that's what v8 provides us. + // not as great as drawing real environment diagrams, but + // whatevers ... + // + // as far as i can tell, v8 exposes scope objects, so i can get + // all the closure vars. but it doesn't tie those scopes to specific + // function call frames :( + scopeObj = sc.details_.details_[1]; + assert(_.isObject(scopeObj)); + var parentScopePairs = _.pairs(scopeObj); + for (jj = 0; jj < parentScopePairs.length; jj++) { + e = parentScopePairs[jj]; + if (nParentScopes > 1) { + k = 'parent' + nParentScopes + ':' + e[0]; + } else { + k = 'parent:' + e[0]; + } + traceStackEntry.ordered_varnames.push(k); + assert(!_.has(traceStackEntry.encoded_locals, k)); + traceStackEntry.encoded_locals[k] = encodeObject(e[1]); + } + + nParentScopes++; + } else { + assert(scopeType === 0); + } + } + + if (f.isAtReturn()) { + // constructors implicitly return 'this' + var retval = isConstructorCall ? receiver : f.returnValue(); + traceStackEntry.ordered_varnames.push('__return__'); + traceStackEntry.encoded_locals.__return__ = encodeToplevelObject(retval); + } + + // push to front so that the stack grows 'downwards' + curTraceEntry.stack_to_render.unshift(traceStackEntry); + } + + + // check whether the top frame is currently returning, and if so, + // update frameIdCalls. it's VERY IMPORTANT to do this update at + // the very end, or else getCanonicalFrameId() for this iteration + // will return the wrong number. + if (topIsReturn) { + var s = String(topFrame.details_.frameId()); + if (frameIdCalls[s] === undefined) { + frameIdCalls[s] = 1; + } + else { + frameIdCalls[s] += 1; + } + } + + curTrace.push(curTraceEntry); + } + + // do this at the VERY END of this function, or else weird stuff happens + if (curTrace.length >= MAX_EXECUTED_LINES) { + curTrace.push({event: 'instruction_limit_reached', + exception_msg: '(stopped after ' + MAX_EXECUTED_LINES + ' steps to prevent possible infinite loop)'}); + + finalize(); + // GET OUTTA HERE so that the user's script doesn't keep infinite looping + process.exit(); + } else { + assert(stepType !== undefined); + execState.prepareStep(stepType); // set debugger to stop at next step + } +} + + +// for testing +function simpleListener(event, execState, eventData, data) { + var stepType, i, n; + var ii, jj, sc, scopeType, scopeObj; + var f; + + // TODO: catch CompileError and maybe other events too + if (event !== debug.DebugEvent.Break && event !== debug.DebugEvent.Exception) { + return; + } + + var isException = (event === debug.DebugEvent.Exception); + + var script = eventData.func().script().name(); + var line = eventData.sourceLine() + 1; + var col = eventData.sourceColumn(); + assert(line >= 2); + line -= 2; // to account for wrapUserscript() adding extra lines + + log(script, line, col, isException); + + // if what we're currently executing isn't inside of userscript.js, + // then PUNT, since we're probably in the first line of console.log() + // or some other utility function + if (script !== 'userscript.js') { + execState.prepareStep(debug.StepAction.StepOut); + } else { + execState.prepareStep(debug.StepAction.StepIn); + } +} + + +assert(argv._.length <= 1); +var cod; +if (argv._.length === 1) { + var FN = argv._[0]; + // trim trailing newlines so that nothing dangles off of the end + cod = String(fs.readFileSync(FN)).rtrim(); +} else { + assert(argv._.length === 0); + // take a string from the command line, trimming trailing newlines + cod = argv.code.rtrim(); +} + +var isTypescript = false; +var sm = require('source-map'); + +var originalTsCod; + +if (argv.typescript) { + isTypescript = true; + originalTsCod = cod; // stash this away! + var tscCompilerOutput = typescriptCompile(cod); + //console.log(tscCompilerOutput); + + var tsSourceMap, compiledJsCod; + tscCompilerOutput.outputs.forEach(function(e, i) { + if (e.name === 'file.js.map') { + tsSourceMap = new sm.SourceMapConsumer(e.text); + } else if (e.name === 'file.js') { + compiledJsCod = e.text; + } + }); + + // if there are any errors, then handle them here, create a trace, and + // bail out before executing! + if (tscCompilerOutput.errors.length > 0) { + // right now just grab and display the first error + // TODO: handle displaying multiple errors + + var firstErr = tscCompilerOutput.errors[0]; + + var errorTraceEntry = {}; + errorTraceEntry.event = 'uncaught_exception'; + + errorTraceEntry.exception_msg = firstErr.msg; + errorTraceEntry.line = firstErr.line; + curTrace.push(errorTraceEntry); + finalize(); + process.exit(); // bail out early!!! + } else { + // strip off the final line, which should say something like: + // '//# sourceMappingURL=file.js.map' + // since that screws up line numbers when executing, and looks ugly too + var idx = compiledJsCod.indexOf('//# sourceMappingURL=file.js.map'); + assert(idx >= 0); + cod = compiledJsCod.substr(0, idx-1); + } +} + +assert(cod); +var allCodLines = cod.split('\n'); + +var wrappedCod = wrapUserscript(cod); + +try { + redirectStdout(); + debug.setListener(listener); + debug.setBreakOnException(); // for exception handling + //debug.setBreakOnUncaughtException(); // doesn't seem to do anything :/ + + _eval(wrappedCod, 'userscript.js', {} /* scope */, true /* includeGlobals */); +} +catch (e) { + // for some reason, the node debugger doesn't allow us to keep going + // after an uncaught exception to, say, execute 'finally' clauses. + if (curTrace.length > 0) { + // do a NOP for now ... it's weird to issue an uncaught_exception since + // that's usually reserved for syntax errors + /* + var lastEntry = curTrace[curTrace.length - 1]; + lastEntry.event = 'exception'; + lastEntry.exception_msg = String(e); + lastEntry.exception_msg += "\n(Uncaught Exception: execution ended due to current limits of\nthis visualizer. 'finally' blocks and other code might not be run.)"; + lastEntry.line = 0; + */ + } else { + // likely a compile error since nothing executed yet; trace is empty + + var originalErrorMsg = e.toString(); + + var errorTraceEntry = {}; + errorTraceEntry.event = 'uncaught_exception'; + + // OK now try to parse the user's original code using esprima, not + // node's compiler/parser, since esprima gives precise line/column + // numbers for errors while node doesn't. + // + // the main caveat here is that the error messages might be slightly + // different, and also out of sync, since we're using a different + // parser. so beware!!! + + var hasEsprimaErr = false; + + try { + esprima.parse(cod); + } + catch (esprimaErr) { + hasEsprimaErr = true; + errorTraceEntry.exception_msg = esprimaErr.description; + errorTraceEntry.line = esprimaErr.lineNumber; + errorTraceEntry.col = esprimaErr.column; + } + + if (!hasEsprimaErr) { + // crap, esprima didn't find a parse error, so just go with + // originalErrorMsg and throw up our hands since we can't pinpoint + // the location of the error. + errorTraceEntry.exception_msg = originalErrorMsg + "\n(sorry, tool can't find the line number)"; + } + + curTrace.push(errorTraceEntry); + } +} +finally { + finalize(); +} + +function finalize() { + resetStdout(); // so that we can print to stdout again! + + // do some postprocessing to delete the last entry if it's a 'return' + // and there's nothing on the stack + if (curTrace.length > 0) { + var lastEntry = _.last(curTrace); + if (lastEntry.event === 'return' && _.isEmpty(lastEntry.stack_to_render.length)) { + curTrace.pop(); + } + } + + // very important to display the ORIGINAL TypeScript code in the + // trace, not the auto-generated JS code + var blob = {code: isTypescript ? originalTsCod : cod, trace: curTrace}; + if (argv.jsfile) { + fs.writeFileSync(argv.jsfile, 'var trace = ' + JSON.stringify(blob) + ';\n'); + log('Wrote trace to', argv.jsfile); + } else if (argv.jsondump) { + console.log(JSON.stringify(blob)); + } else if (argv.prettydump) { + console.log(util.inspect(blob, {depth: null})); + } +} + diff --git a/v4-cokapi/backends/javascript/tests/assert-fail-exception.golden b/v4-cokapi/backends/javascript/tests/assert-fail-exception.golden new file mode 100644 index 000000000..a1364e773 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/assert-fail-exception.golden @@ -0,0 +1,432 @@ +{ code: 'var assert = require(\'assert\');\n\nassert(true);\nassert(true);\nassert(false); // should fail here with an error message\nassert(true);\nassert(true);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { assert: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'assert' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { assert: [ 'REF', 1 ] }, + ordered_globals: [ 'assert' ], + line: 3, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'ok', + 'function ok(value, message) {\n if (!!!value) fail(value, true, message, \'==\', assert.ok);\n}', + [ [ 'AssertionError', [ 'REF', 2 ] ], + [ 'fail', [ 'REF', 5 ] ], + [ 'ok', [ 'REF', 1 ] ], + [ 'equal', [ 'REF', 6 ] ], + [ 'notEqual', [ 'REF', 7 ] ], + [ 'deepEqual', [ 'REF', 8 ] ], + [ 'notDeepEqual', [ 'REF', 9 ] ], + [ 'strictEqual', [ 'REF', 10 ] ], + [ 'notStrictEqual', [ 'REF', 11 ] ], + [ 'throws', [ 'REF', 12 ] ], + [ 'doesNotThrow', [ 'REF', 13 ] ], + [ 'ifError', [ 'REF', 14 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'AssertionError', + 'function AssertionError(options) {\n this.name = \'AssertionError\';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n this.message = options.message || getMessage(this);\n var stackStartFunction = options.stackStartFunction || fail;\n Error.captureStackTrace(this, stackStartFunction);\n}', + [ [ 'super_', [ 'REF', 3 ] ] ], + null ], + '3': + [ 'JS_FUNCTION', + 'Error', + 'function Error() { [native code] }', + [ [ 'captureStackTrace', [ 'REF', 4 ] ], + [ 'stackTraceLimit', 10 ] ], + null ], + '4': + [ 'JS_FUNCTION', + 'captureStackTrace', + 'function captureStackTrace() { [native code] }', + null, + null ], + '5': + [ 'JS_FUNCTION', + 'fail', + 'function fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}', + null, + null ], + '6': + [ 'JS_FUNCTION', + 'equal', + 'function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, \'==\', assert.equal);\n}', + null, + null ], + '7': + [ 'JS_FUNCTION', + 'notEqual', + 'function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, \'!=\', assert.notEqual);\n }\n}', + null, + null ], + '8': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'deepEqual\', assert.deepEqual);\n }\n}', + null, + null ], + '9': + [ 'JS_FUNCTION', + 'notDeepEqual', + 'function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'notDeepEqual\', assert.notDeepEqual);\n }\n}', + null, + null ], + '10': + [ 'JS_FUNCTION', + 'strictEqual', + 'function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, \'===\', assert.strictEqual);\n }\n}', + null, + null ], + '11': + [ 'JS_FUNCTION', + 'notStrictEqual', + 'function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, \'!==\', assert.notStrictEqual);\n }\n}', + null, + null ], + '12': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n}', + null, + null ], + '13': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n}', + null, + null ], + '14': + [ 'JS_FUNCTION', + '', + 'function (err) { if (err) {throw err;}}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { assert: [ 'REF', 1 ] }, + ordered_globals: [ 'assert' ], + line: 4, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'ok', + 'function ok(value, message) {\n if (!!!value) fail(value, true, message, \'==\', assert.ok);\n}', + [ [ 'AssertionError', [ 'REF', 2 ] ], + [ 'fail', [ 'REF', 5 ] ], + [ 'ok', [ 'REF', 1 ] ], + [ 'equal', [ 'REF', 6 ] ], + [ 'notEqual', [ 'REF', 7 ] ], + [ 'deepEqual', [ 'REF', 8 ] ], + [ 'notDeepEqual', [ 'REF', 9 ] ], + [ 'strictEqual', [ 'REF', 10 ] ], + [ 'notStrictEqual', [ 'REF', 11 ] ], + [ 'throws', [ 'REF', 12 ] ], + [ 'doesNotThrow', [ 'REF', 13 ] ], + [ 'ifError', [ 'REF', 14 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'AssertionError', + 'function AssertionError(options) {\n this.name = \'AssertionError\';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n this.message = options.message || getMessage(this);\n var stackStartFunction = options.stackStartFunction || fail;\n Error.captureStackTrace(this, stackStartFunction);\n}', + [ [ 'super_', [ 'REF', 3 ] ] ], + null ], + '3': + [ 'JS_FUNCTION', + 'Error', + 'function Error() { [native code] }', + [ [ 'captureStackTrace', [ 'REF', 4 ] ], + [ 'stackTraceLimit', 10 ] ], + null ], + '4': + [ 'JS_FUNCTION', + 'captureStackTrace', + 'function captureStackTrace() { [native code] }', + null, + null ], + '5': + [ 'JS_FUNCTION', + 'fail', + 'function fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}', + null, + null ], + '6': + [ 'JS_FUNCTION', + 'equal', + 'function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, \'==\', assert.equal);\n}', + null, + null ], + '7': + [ 'JS_FUNCTION', + 'notEqual', + 'function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, \'!=\', assert.notEqual);\n }\n}', + null, + null ], + '8': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'deepEqual\', assert.deepEqual);\n }\n}', + null, + null ], + '9': + [ 'JS_FUNCTION', + 'notDeepEqual', + 'function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'notDeepEqual\', assert.notDeepEqual);\n }\n}', + null, + null ], + '10': + [ 'JS_FUNCTION', + 'strictEqual', + 'function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, \'===\', assert.strictEqual);\n }\n}', + null, + null ], + '11': + [ 'JS_FUNCTION', + 'notStrictEqual', + 'function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, \'!==\', assert.notStrictEqual);\n }\n}', + null, + null ], + '12': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n}', + null, + null ], + '13': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n}', + null, + null ], + '14': + [ 'JS_FUNCTION', + '', + 'function (err) { if (err) {throw err;}}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { assert: [ 'REF', 1 ] }, + ordered_globals: [ 'assert' ], + line: 5, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'ok', + 'function ok(value, message) {\n if (!!!value) fail(value, true, message, \'==\', assert.ok);\n}', + [ [ 'AssertionError', [ 'REF', 2 ] ], + [ 'fail', [ 'REF', 5 ] ], + [ 'ok', [ 'REF', 1 ] ], + [ 'equal', [ 'REF', 6 ] ], + [ 'notEqual', [ 'REF', 7 ] ], + [ 'deepEqual', [ 'REF', 8 ] ], + [ 'notDeepEqual', [ 'REF', 9 ] ], + [ 'strictEqual', [ 'REF', 10 ] ], + [ 'notStrictEqual', [ 'REF', 11 ] ], + [ 'throws', [ 'REF', 12 ] ], + [ 'doesNotThrow', [ 'REF', 13 ] ], + [ 'ifError', [ 'REF', 14 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'AssertionError', + 'function AssertionError(options) {\n this.name = \'AssertionError\';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n this.message = options.message || getMessage(this);\n var stackStartFunction = options.stackStartFunction || fail;\n Error.captureStackTrace(this, stackStartFunction);\n}', + [ [ 'super_', [ 'REF', 3 ] ] ], + null ], + '3': + [ 'JS_FUNCTION', + 'Error', + 'function Error() { [native code] }', + [ [ 'captureStackTrace', [ 'REF', 4 ] ], + [ 'stackTraceLimit', 10 ] ], + null ], + '4': + [ 'JS_FUNCTION', + 'captureStackTrace', + 'function captureStackTrace() { [native code] }', + null, + null ], + '5': + [ 'JS_FUNCTION', + 'fail', + 'function fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}', + null, + null ], + '6': + [ 'JS_FUNCTION', + 'equal', + 'function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, \'==\', assert.equal);\n}', + null, + null ], + '7': + [ 'JS_FUNCTION', + 'notEqual', + 'function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, \'!=\', assert.notEqual);\n }\n}', + null, + null ], + '8': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'deepEqual\', assert.deepEqual);\n }\n}', + null, + null ], + '9': + [ 'JS_FUNCTION', + 'notDeepEqual', + 'function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'notDeepEqual\', assert.notDeepEqual);\n }\n}', + null, + null ], + '10': + [ 'JS_FUNCTION', + 'strictEqual', + 'function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, \'===\', assert.strictEqual);\n }\n}', + null, + null ], + '11': + [ 'JS_FUNCTION', + 'notStrictEqual', + 'function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, \'!==\', assert.notStrictEqual);\n }\n}', + null, + null ], + '12': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n}', + null, + null ], + '13': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n}', + null, + null ], + '14': + [ 'JS_FUNCTION', + '', + 'function (err) { if (err) {throw err;}}', + null, + null ] } }, + { exception_msg: 'AssertionError: false == true', + stdout: '', + func_name: '', + stack_to_render: [], + globals: { assert: [ 'REF', 1 ] }, + ordered_globals: [ 'assert' ], + line: 5, + col: 0, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'ok', + 'function ok(value, message) {\n if (!!!value) fail(value, true, message, \'==\', assert.ok);\n}', + [ [ 'AssertionError', [ 'REF', 2 ] ], + [ 'fail', [ 'REF', 5 ] ], + [ 'ok', [ 'REF', 1 ] ], + [ 'equal', [ 'REF', 6 ] ], + [ 'notEqual', [ 'REF', 7 ] ], + [ 'deepEqual', [ 'REF', 8 ] ], + [ 'notDeepEqual', [ 'REF', 9 ] ], + [ 'strictEqual', [ 'REF', 10 ] ], + [ 'notStrictEqual', [ 'REF', 11 ] ], + [ 'throws', [ 'REF', 12 ] ], + [ 'doesNotThrow', [ 'REF', 13 ] ], + [ 'ifError', [ 'REF', 14 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'AssertionError', + 'function AssertionError(options) {\n this.name = \'AssertionError\';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n this.message = options.message || getMessage(this);\n var stackStartFunction = options.stackStartFunction || fail;\n Error.captureStackTrace(this, stackStartFunction);\n}', + [ [ 'super_', [ 'REF', 3 ] ] ], + null ], + '3': + [ 'JS_FUNCTION', + 'Error', + 'function Error() { [native code] }', + [ [ 'captureStackTrace', [ 'REF', 4 ] ], + [ 'stackTraceLimit', 10 ] ], + null ], + '4': + [ 'JS_FUNCTION', + 'captureStackTrace', + 'function captureStackTrace() { [native code] }', + null, + null ], + '5': + [ 'JS_FUNCTION', + 'fail', + 'function fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}', + null, + null ], + '6': + [ 'JS_FUNCTION', + 'equal', + 'function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, \'==\', assert.equal);\n}', + null, + null ], + '7': + [ 'JS_FUNCTION', + 'notEqual', + 'function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, \'!=\', assert.notEqual);\n }\n}', + null, + null ], + '8': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'deepEqual\', assert.deepEqual);\n }\n}', + null, + null ], + '9': + [ 'JS_FUNCTION', + 'notDeepEqual', + 'function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected)) {\n fail(actual, expected, message, \'notDeepEqual\', assert.notDeepEqual);\n }\n}', + null, + null ], + '10': + [ 'JS_FUNCTION', + 'strictEqual', + 'function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, \'===\', assert.strictEqual);\n }\n}', + null, + null ], + '11': + [ 'JS_FUNCTION', + 'notStrictEqual', + 'function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, \'!==\', assert.notStrictEqual);\n }\n}', + null, + null ], + '12': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/error, /*optional*/message) {\n _throws.apply(this, [true].concat(pSlice.call(arguments)));\n}', + null, + null ], + '13': + [ 'JS_FUNCTION', + '', + 'function (block, /*optional*/message) {\n _throws.apply(this, [false].concat(pSlice.call(arguments)));\n}', + null, + null ], + '14': + [ 'JS_FUNCTION', + '', + 'function (err) { if (err) {throw err;}}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/assert-fail-exception.js b/v4-cokapi/backends/javascript/tests/assert-fail-exception.js new file mode 100644 index 000000000..1d369b460 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/assert-fail-exception.js @@ -0,0 +1,7 @@ +var assert = require('assert'); + +assert(true); +assert(true); +assert(false); // should fail here with an error message +assert(true); +assert(true); diff --git a/v4-cokapi/backends/javascript/tests/basic-funcs.golden b/v4-cokapi/backends/javascript/tests/basic-funcs.golden new file mode 100644 index 000000000..c46a28642 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/basic-funcs.golden @@ -0,0 +1,1722 @@ +{ code: 'var global_x = 5;\nvar global_y = 10;\n\nvar foo = function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}\n\nfunction bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}\n\nfor (var i=0; i<3; i++) {\n foo(i)\n}', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { global_x: [ 'JS_SPECIAL_VAL', 'undefined' ], + global_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + foo: [ 'JS_SPECIAL_VAL', 'undefined' ], + bar: [ 'REF', 1 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 1, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + foo: [ 'JS_SPECIAL_VAL', 'undefined' ], + bar: [ 'REF', 1 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'JS_SPECIAL_VAL', 'undefined' ], + bar: [ 'REF', 1 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 4, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 19, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 20, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 5, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 6, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 7, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 8, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 9, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 10, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 11, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: 'bar', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } }, + { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'i', 'obj_lst' ], + encoded_locals: { i: 0, obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 16, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: 'bar', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } }, + { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'i', 'obj_lst', '__return__' ], + encoded_locals: + { i: 0, + obj_lst: [ 'REF', 3 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 16, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ], + '3': [ 'LIST', 0, [ 'REF', 4 ], [ 'REF', 6 ] ], + '4': [ 'INSTANCE', '', [ 'foo', 1 ], [ 'poop', [ 'REF', 5 ] ] ], + '5': [ 'LIST', 1, 2, 3 ], + '6': [ 'INSTANCE', '', [ 'bar', 2 ] ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 12, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f2', + ordered_varnames: + [ 'i', + 'local_x', + 'local_y', + 'local_z', + 'local_w', + 'local_q', + '__return__' ], + encoded_locals: + { i: 0, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ], + __return__: 1764 } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 12, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 0 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 19, + col: 19, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 20, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 5, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 6, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 7, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 8, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 9, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 10, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 11, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: 'bar', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } }, + { func_name: 'bar', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f5', + ordered_varnames: [ 'i', 'obj_lst' ], + encoded_locals: { i: 1, obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 16, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: 'bar', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } }, + { func_name: 'bar', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f5', + ordered_varnames: [ 'i', 'obj_lst', '__return__' ], + encoded_locals: + { i: 1, + obj_lst: [ 'REF', 7 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 16, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ], + '7': [ 'LIST', 1, [ 'REF', 8 ], [ 'REF', 10 ] ], + '8': [ 'INSTANCE', '', [ 'foo', 2 ], [ 'poop', [ 'REF', 9 ] ] ], + '9': [ 'LIST', 1, 2, 3 ], + '10': [ 'INSTANCE', '', [ 'bar', 3 ] ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 12, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: + [ 'i', + 'local_x', + 'local_y', + 'local_z', + 'local_w', + 'local_q', + '__return__' ], + encoded_locals: + { i: 1, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ], + __return__: 1764 } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 12, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 1 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 19, + col: 19, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 20, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 5, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 6, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 7, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 8, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 9, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 10, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 11, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: 'bar', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } }, + { func_name: 'bar', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f7', + ordered_varnames: [ 'i', 'obj_lst' ], + encoded_locals: { i: 2, obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 16, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: 'bar', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } }, + { func_name: 'bar', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f7', + ordered_varnames: [ 'i', 'obj_lst', '__return__' ], + encoded_locals: + { i: 2, + obj_lst: [ 'REF', 11 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 16, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ], + '11': [ 'LIST', 2, [ 'REF', 12 ], [ 'REF', 14 ] ], + '12': [ 'INSTANCE', '', [ 'foo', 3 ], [ 'poop', [ 'REF', 13 ] ] ], + '13': [ 'LIST', 1, 2, 3 ], + '14': [ 'INSTANCE', '', [ 'bar', 4 ] ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'i', 'local_x', 'local_y', 'local_z', 'local_w', 'local_q' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ] } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 12, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: + [ 'i', + 'local_x', + 'local_y', + 'local_z', + 'local_w', + 'local_q', + '__return__' ], + encoded_locals: + { i: 2, + local_x: 42, + local_y: 'hello world', + local_z: [ 'JS_SPECIAL_VAL', 'true' ], + local_w: [ 'JS_SPECIAL_VAL', 'false' ], + local_q: [ 'JS_SPECIAL_VAL', 'null' ], + __return__: 1764 } } ], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 12, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 2 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 19, + col: 19, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } }, + { stdout: 'foo: 0\nfoo: 1\nfoo: 4\n', + func_name: '', + stack_to_render: [], + globals: + { global_x: 5, + global_y: 10, + foo: [ 'REF', 2 ], + bar: [ 'REF', 1 ], + i: 3 }, + ordered_globals: [ 'global_x', 'global_y', 'foo', 'bar', 'i' ], + line: 21, + col: 1, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'bar', + 'function bar(i) {\n var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + '', + 'function (i) {\n var local_x = 42;\n var local_y = "hello world";\n var local_z = true;\n var local_w = false;\n var local_q = null;\n console.log(\'foo:\', i*i);\n bar(i);\n return (local_x * local_x);\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/basic-funcs.js b/v4-cokapi/backends/javascript/tests/basic-funcs.js new file mode 100644 index 000000000..3d6f13357 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/basic-funcs.js @@ -0,0 +1,21 @@ +var global_x = 5; +var global_y = 10; + +var foo = function (i) { + var local_x = 42; + var local_y = "hello world"; + var local_z = true; + var local_w = false; + var local_q = null; + console.log('foo:', i*i); + bar(i); + return (local_x * local_x); +} + +function bar(i) { + var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}]; +} + +for (var i=0; i<3; i++) { + foo(i) +} diff --git a/v4-cokapi/backends/javascript/tests/caught-exception.golden b/v4-cokapi/backends/javascript/tests/caught-exception.golden new file mode 100644 index 000000000..5ad52987e --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/caught-exception.golden @@ -0,0 +1,66 @@ +{ code: 'try {\n var x = 5;\n throw new Error("oh crapo");\n}\ncatch (e) {\n console.log(\'hello\');\n console.log(\'caught\');\n}\nfinally {\n console.log(\'done\');\n}', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x' ], + line: 2, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 5 }, + ordered_globals: [ 'x' ], + line: 3, + col: 12, + event: 'step_line', + heap: {} }, + { exception_msg: 'Error: oh crapo', + stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 5 }, + ordered_globals: [ 'x' ], + line: 3, + col: 8, + event: 'exception', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { e: [ 'REF', 1 ], x: 5 }, + ordered_globals: [ 'e', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'INSTANCE_PPRINT', 'object', 'Error: oh crapo' ] } }, + { stdout: 'hello\n', + func_name: '', + stack_to_render: [], + globals: { e: [ 'REF', 1 ], x: 5 }, + ordered_globals: [ 'e', 'x' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'INSTANCE_PPRINT', 'object', 'Error: oh crapo' ] } }, + { stdout: 'hello\ncaught\n', + func_name: '', + stack_to_render: [], + globals: { x: 5 }, + ordered_globals: [ 'x' ], + line: 10, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: 'hello\ncaught\ndone\n', + func_name: '', + stack_to_render: [], + globals: { x: 5 }, + ordered_globals: [ 'x' ], + line: 11, + col: 1, + event: 'step_line', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/caught-exception.js b/v4-cokapi/backends/javascript/tests/caught-exception.js new file mode 100644 index 000000000..8675219ed --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/caught-exception.js @@ -0,0 +1,11 @@ +try { + var x = 5; + throw new Error("oh crapo"); +} +catch (e) { + console.log('hello'); + console.log('caught'); +} +finally { + console.log('done'); +} diff --git a/v4-cokapi/backends/javascript/tests/closure0.golden b/v4-cokapi/backends/javascript/tests/closure0.golden new file mode 100644 index 000000000..a19691a63 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/closure0.golden @@ -0,0 +1,251 @@ +{ code: 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}\n\nfoo(10);\nfoo(20);\nfoo(30);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 8, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'bar' ], + encoded_locals: { y: 10, bar: [ 'REF', 2 ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n return x + y;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'bar', '__return__' ], + encoded_locals: + { y: 30, + bar: [ 'REF', 2 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n return x + y;\n }', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 9, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f3', + ordered_varnames: [ 'y', 'bar' ], + encoded_locals: { y: 20, bar: [ 'REF', 3 ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n return x + y;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f3', + ordered_varnames: [ 'y', 'bar', '__return__' ], + encoded_locals: + { y: 60, + bar: [ 'REF', 3 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n return x + y;\n }', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 10, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f4', + ordered_varnames: [ 'y', 'bar' ], + encoded_locals: { y: 30, bar: [ 'REF', 4 ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n return x + y;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f4', + ordered_varnames: [ 'y', 'bar', '__return__' ], + encoded_locals: + { y: 90, + bar: [ 'REF', 4 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n return x + y;\n }', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 10, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n return x + y;\n }\n y *= 3;\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/closure0.js b/v4-cokapi/backends/javascript/tests/closure0.js new file mode 100644 index 000000000..6607d530b --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/closure0.js @@ -0,0 +1,10 @@ +function foo(y) { + function bar(x) { + return x + y; + } + y *= 3; +} + +foo(10); +foo(20); +foo(30); diff --git a/v4-cokapi/backends/javascript/tests/closure1.golden b/v4-cokapi/backends/javascript/tests/closure1.golden new file mode 100644 index 000000000..cdfd7a2f0 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/closure1.golden @@ -0,0 +1,236 @@ +{ code: 'var globalZ = 10;\n\nfunction foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}\n\nvar b = foo(1);\nb(2);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { globalZ: [ 'JS_SPECIAL_VAL', 'undefined' ], + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 1, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { globalZ: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 11, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'bar' ], + encoded_locals: { y: 1, bar: [ 'REF', 2 ] } } ], + globals: + { globalZ: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 8, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'bar', '__return__' ], + encoded_locals: { y: 1, bar: [ 'REF', 2 ], __return__: [ 'REF', 2 ] } } ], + globals: + { globalZ: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { globalZ: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 12, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'x', 'parent:y' ], + encoded_locals: { x: 2, 'parent:y': 1 } } ], + globals: { globalZ: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 5, + col: 8, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'x', 'parent:y' ], + encoded_locals: { x: 2, 'parent:y': 1 } } ], + globals: { globalZ: 110, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 6, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'x', 'parent:y', '__return__' ], + encoded_locals: { x: 2, 'parent:y': 1, __return__: 113 } } ], + globals: { globalZ: 110, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 6, + col: 4, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { globalZ: 110, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'globalZ', 'foo', 'b' ], + line: 12, + col: 5, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar(x) {\n globalZ += 100;\n return x + y + globalZ;\n }', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/closure1.js b/v4-cokapi/backends/javascript/tests/closure1.js new file mode 100644 index 000000000..2606e1859 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/closure1.js @@ -0,0 +1,12 @@ +var globalZ = 10; + +function foo(y) { + function bar(x) { + globalZ += 100; + return x + y + globalZ; + } + return bar; +} + +var b = foo(1); +b(2); diff --git a/v4-cokapi/backends/javascript/tests/console-log-objs.golden b/v4-cokapi/backends/javascript/tests/console-log-objs.golden new file mode 100644 index 000000000..a7ada680f --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/console-log-objs.golden @@ -0,0 +1,55 @@ +{ code: 'var x = [1,2,3,4,5];\nvar y = {joe: 1, jane: 3};\nconsole.log(x);\nconsole.log(y);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { x: [ 'JS_SPECIAL_VAL', 'undefined' ], + y: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'y' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: [ 'REF', 1 ], y: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'y' ], + line: 2, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: [ 'REF', 1 ], y: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'y' ], + line: 3, + col: 0, + event: 'step_line', + heap: + { '1': [ 'LIST', 1, 2, 3, 4, 5 ], + '2': [ 'INSTANCE', '', [ 'joe', 1 ], [ 'jane', 3 ] ] } }, + { stdout: '[ 1, 2, 3, 4, 5 ]\n', + func_name: '', + stack_to_render: [], + globals: { x: [ 'REF', 1 ], y: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'y' ], + line: 4, + col: 0, + event: 'step_line', + heap: + { '1': [ 'LIST', 1, 2, 3, 4, 5 ], + '2': [ 'INSTANCE', '', [ 'joe', 1 ], [ 'jane', 3 ] ] } }, + { stdout: '[ 1, 2, 3, 4, 5 ]\n{ joe: 1, jane: 3 }\n', + func_name: '', + stack_to_render: [], + globals: { x: [ 'REF', 1 ], y: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'y' ], + line: 4, + col: 15, + event: 'step_line', + heap: + { '1': [ 'LIST', 1, 2, 3, 4, 5 ], + '2': [ 'INSTANCE', '', [ 'joe', 1 ], [ 'jane', 3 ] ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/console-log-objs.js b/v4-cokapi/backends/javascript/tests/console-log-objs.js new file mode 100644 index 000000000..3d76eb8aa --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/console-log-objs.js @@ -0,0 +1,4 @@ +var x = [1,2,3,4,5]; +var y = {joe: 1, jane: 3}; +console.log(x); +console.log(y); diff --git a/v4-cokapi/backends/javascript/tests/console-log.golden b/v4-cokapi/backends/javascript/tests/console-log.golden new file mode 100644 index 000000000..fa44cc30a --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/console-log.golden @@ -0,0 +1,60 @@ +{ code: 'console.log(\'hello\');\nvar i = 5;\nconsole.log(\'foo:\', i*i);\nvar local_q = null;\nconsole.log(\'goodbye\');', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { i: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'i', 'local_q' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: 'hello\n', + func_name: '', + stack_to_render: [], + globals: + { i: [ 'JS_SPECIAL_VAL', 'undefined' ], + local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'i', 'local_q' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: 'hello\n', + func_name: '', + stack_to_render: [], + globals: { i: 5, local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'i', 'local_q' ], + line: 3, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: 'hello\nfoo: 25\n', + func_name: '', + stack_to_render: [], + globals: { i: 5, local_q: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'i', 'local_q' ], + line: 4, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: 'hello\nfoo: 25\n', + func_name: '', + stack_to_render: [], + globals: { i: 5, local_q: [ 'JS_SPECIAL_VAL', 'null' ] }, + ordered_globals: [ 'i', 'local_q' ], + line: 5, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: 'hello\nfoo: 25\ngoodbye\n', + func_name: '', + stack_to_render: [], + globals: { i: 5, local_q: [ 'JS_SPECIAL_VAL', 'null' ] }, + ordered_globals: [ 'i', 'local_q' ], + line: 5, + col: 23, + event: 'step_line', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/console-log.js b/v4-cokapi/backends/javascript/tests/console-log.js new file mode 100644 index 000000000..09d80d9f9 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/console-log.js @@ -0,0 +1,5 @@ +console.log('hello'); +var i = 5; +console.log('foo:', i*i); +var local_q = null; +console.log('goodbye'); diff --git a/v4-cokapi/backends/javascript/tests/constructor.golden b/v4-cokapi/backends/javascript/tests/constructor.golden new file mode 100644 index 000000000..c9b6705ac --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/constructor.golden @@ -0,0 +1,352 @@ +{ code: 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}\n\nVector.prototype.plus = function(other) {\n return new Vector(this.x + other.x, this.y + other.y);\n};\n\nvar v1 = new Vector(1, 2);\nvar v2 = Vector(20, 30); // whoops, forgot \'new\'', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 6, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 10, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 4 ], x: 1, y: 2 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 2, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 4 ], x: 1, y: 2 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 3, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: { this: [ 'REF', 4 ], x: 1, y: 2, __return__: [ 'REF', 4 ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 4 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 11, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector_f3', + ordered_varnames: [ 'x', 'y' ], + encoded_locals: { x: 20, y: 30 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 4 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2' ], + line: 2, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector_f3', + ordered_varnames: [ 'x', 'y' ], + encoded_locals: { x: 20, y: 30 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 4 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + x: 20 }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'x' ], + line: 3, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector_f3', + ordered_varnames: [ 'x', 'y', '__return__' ], + encoded_locals: { x: 20, y: 30, __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 4 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + x: 20, + y: 30 }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'x', 'y' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 4 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + x: 20, + y: 30 }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'x', 'y' ], + line: 11, + col: 48, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/constructor.js b/v4-cokapi/backends/javascript/tests/constructor.js new file mode 100644 index 000000000..404aa617d --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/constructor.js @@ -0,0 +1,11 @@ +function Vector(x, y) { + this.x = x; + this.y = y; +} + +Vector.prototype.plus = function(other) { + return new Vector(this.x + other.x, this.y + other.y); +}; + +var v1 = new Vector(1, 2); +var v2 = Vector(20, 30); // whoops, forgot 'new' diff --git a/v4-cokapi/backends/javascript/tests/data-types.golden b/v4-cokapi/backends/javascript/tests/data-types.golden new file mode 100644 index 000000000..acd1e6b75 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/data-types.golden @@ -0,0 +1,630 @@ +{ code: 'var intNum = 42;\nvar floatNum = 3.14159;\nvar nanNum = NaN;\nvar infNum = Infinity;\nvar ninfNum = -Infinity;\n\nvar str = "hello world";\n\nvar boolTrue = true;\nvar boolFalse = false;\n\nvar nullVal = null;\nvar undefVal = undefined;\n\nvar lst = [\'a\', \'b\', 3, 4, 5, \'f\'];\n\nvar obj = {name: \'John\', age: 35, hasChildren: true};\n\nvar i = 5;\nvar obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}];\n\nobj.name = \'Jane\';', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + floatNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + nanNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + infNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + ninfNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + str: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + nanNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + infNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + ninfNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + str: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + infNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + ninfNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + str: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 3, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + ninfNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + str: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 4, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'JS_SPECIAL_VAL', 'undefined' ], + str: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 5, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 7, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'undefined' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 9, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'undefined' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 10, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 12, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 13, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 15, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'REF', 1 ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 17, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 'a', 'b', 3, 4, 5, 'f' ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'REF', 1 ], + obj: [ 'REF', 2 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 19, + col: 0, + event: 'step_line', + heap: + { '1': [ 'LIST', 'a', 'b', 3, 4, 5, 'f' ], + '2': + [ 'INSTANCE', + '', + [ 'name', 'John' ], + [ 'age', 35 ], + [ 'hasChildren', [ 'JS_SPECIAL_VAL', 'true' ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'REF', 1 ], + obj: [ 'REF', 2 ], + i: 5, + obj_lst: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 20, + col: 0, + event: 'step_line', + heap: + { '1': [ 'LIST', 'a', 'b', 3, 4, 5, 'f' ], + '2': + [ 'INSTANCE', + '', + [ 'name', 'John' ], + [ 'age', 35 ], + [ 'hasChildren', [ 'JS_SPECIAL_VAL', 'true' ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'REF', 1 ], + obj: [ 'REF', 2 ], + i: 5, + obj_lst: [ 'REF', 3 ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 22, + col: 0, + event: 'step_line', + heap: + { '1': [ 'LIST', 'a', 'b', 3, 4, 5, 'f' ], + '2': + [ 'INSTANCE', + '', + [ 'name', 'John' ], + [ 'age', 35 ], + [ 'hasChildren', [ 'JS_SPECIAL_VAL', 'true' ] ] ], + '3': [ 'LIST', 5, [ 'REF', 4 ], [ 'REF', 6 ] ], + '4': [ 'INSTANCE', '', [ 'foo', 6 ], [ 'poop', [ 'REF', 5 ] ] ], + '5': [ 'LIST', 1, 2, 3 ], + '6': [ 'INSTANCE', '', [ 'bar', 7 ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { intNum: 42, + floatNum: 3.14159, + nanNum: [ 'SPECIAL_FLOAT', 'NaN' ], + infNum: [ 'SPECIAL_FLOAT', 'Infinity' ], + ninfNum: [ 'SPECIAL_FLOAT', '-Infinity' ], + str: 'hello world', + boolTrue: [ 'JS_SPECIAL_VAL', 'true' ], + boolFalse: [ 'JS_SPECIAL_VAL', 'false' ], + nullVal: [ 'JS_SPECIAL_VAL', 'null' ], + undefVal: [ 'JS_SPECIAL_VAL', 'undefined' ], + lst: [ 'REF', 1 ], + obj: [ 'REF', 2 ], + i: 5, + obj_lst: [ 'REF', 3 ] }, + ordered_globals: + [ 'intNum', + 'floatNum', + 'nanNum', + 'infNum', + 'ninfNum', + 'str', + 'boolTrue', + 'boolFalse', + 'nullVal', + 'undefVal', + 'lst', + 'obj', + 'i', + 'obj_lst' ], + line: 22, + col: 18, + event: 'step_line', + heap: + { '1': [ 'LIST', 'a', 'b', 3, 4, 5, 'f' ], + '2': + [ 'INSTANCE', + '', + [ 'name', 'Jane' ], + [ 'age', 35 ], + [ 'hasChildren', [ 'JS_SPECIAL_VAL', 'true' ] ] ], + '3': [ 'LIST', 5, [ 'REF', 4 ], [ 'REF', 6 ] ], + '4': [ 'INSTANCE', '', [ 'foo', 6 ], [ 'poop', [ 'REF', 5 ] ] ], + '5': [ 'LIST', 1, 2, 3 ], + '6': [ 'INSTANCE', '', [ 'bar', 7 ] ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/data-types.js b/v4-cokapi/backends/javascript/tests/data-types.js new file mode 100644 index 000000000..b31728f03 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/data-types.js @@ -0,0 +1,22 @@ +var intNum = 42; +var floatNum = 3.14159; +var nanNum = NaN; +var infNum = Infinity; +var ninfNum = -Infinity; + +var str = "hello world"; + +var boolTrue = true; +var boolFalse = false; + +var nullVal = null; +var undefVal = undefined; + +var lst = ['a', 'b', 3, 4, 5, 'f']; + +var obj = {name: 'John', age: 35, hasChildren: true}; + +var i = 5; +var obj_lst = [i, {foo: i+1, poop: [1, 2, 3]}, {bar: i+2}]; + +obj.name = 'Jane'; diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-2.3.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-2.3.golden new file mode 100644 index 000000000..c3deec2e4 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-2.3.golden @@ -0,0 +1,2515 @@ +{ code: 'var size = 8;\n\nvar board = "";\n\nfor (var y = 0; y < size; y++) {\n for (var x = 0; x < size; x++) {\n if ((x + y) % 2 == 0)\n board += " ";\n else\n board += "#";\n }\n board += "\\n";\n}\n\nconsole.log(board);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: [ 'JS_SPECIAL_VAL', 'undefined' ], + board: [ 'JS_SPECIAL_VAL', 'undefined' ], + y: [ 'JS_SPECIAL_VAL', 'undefined' ], + x: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: [ 'JS_SPECIAL_VAL', 'undefined' ], + y: [ 'JS_SPECIAL_VAL', 'undefined' ], + x: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 3, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: '', + y: [ 'JS_SPECIAL_VAL', 'undefined' ], + x: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: '', y: 0, x: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: '', y: 0, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: '', y: 0, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' ', y: 0, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' ', y: 0, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' ', y: 0, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' #', y: 0, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' #', y: 0, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' #', y: 0, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # ', y: 0, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # ', y: 0, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # ', y: 0, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # #', y: 0, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # #', y: 0, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # #', y: 0, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # ', y: 0, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # ', y: 0, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # ', y: 0, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # #', y: 0, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # #', y: 0, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # #', y: 0, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # ', y: 0, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # ', y: 0, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # ', y: 0, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #', y: 0, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #', y: 0, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n', y: 0, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n', y: 1, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n', y: 1, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n', y: 1, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n#', y: 1, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n#', y: 1, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n#', y: 1, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# ', y: 1, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# ', y: 1, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# ', y: 1, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# #', y: 1, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# #', y: 1, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# #', y: 1, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # ', y: 1, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # ', y: 1, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # ', y: 1, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # #', y: 1, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # #', y: 1, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # #', y: 1, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # ', y: 1, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # ', y: 1, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # ', y: 1, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # #', y: 1, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # #', y: 1, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # #', y: 1, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # ', y: 1, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # ', y: 1, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n', y: 1, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n', y: 2, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n', y: 2, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n', y: 2, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n ', y: 2, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n ', y: 2, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n ', y: 2, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n #', y: 2, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n #', y: 2, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n #', y: 2, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # ', y: 2, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # ', y: 2, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # ', y: 2, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # #', y: 2, x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # #', y: 2, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # #', y: 2, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # ', y: 2, x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # ', y: 2, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # ', y: 2, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # #', y: 2, x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # #', y: 2, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # #', y: 2, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # ', y: 2, x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # ', y: 2, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # ', y: 2, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #', y: 2, x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #', y: 2, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n', y: 2, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n', y: 3, x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n', y: 3, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n', y: 3, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n#', y: 3, x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n#', y: 3, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n#', y: 3, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n# ', y: 3, x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n# ', y: 3, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { size: 8, board: ' # # # #\n# # # # \n # # # #\n# ', y: 3, x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# #', + y: 3, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# #', + y: 3, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# #', + y: 3, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # ', + y: 3, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # ', + y: 3, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # ', + y: 3, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # #', + y: 3, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # #', + y: 3, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # #', + y: 3, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # ', + y: 3, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # ', + y: 3, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # ', + y: 3, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # #', + y: 3, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # #', + y: 3, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # #', + y: 3, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # ', + y: 3, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # ', + y: 3, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n', + y: 3, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n', + y: 4, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n', + y: 4, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n', + y: 4, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n ', + y: 4, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n ', + y: 4, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n ', + y: 4, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n #', + y: 4, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n #', + y: 4, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n #', + y: 4, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # ', + y: 4, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # ', + y: 4, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # ', + y: 4, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # #', + y: 4, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # #', + y: 4, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # #', + y: 4, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # ', + y: 4, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # ', + y: 4, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # ', + y: 4, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # #', + y: 4, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # #', + y: 4, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # #', + y: 4, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # ', + y: 4, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # ', + y: 4, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # ', + y: 4, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #', + y: 4, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #', + y: 4, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 4, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 5, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 5, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 5, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n#', + y: 5, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n#', + y: 5, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n#', + y: 5, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# ', + y: 5, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# ', + y: 5, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# ', + y: 5, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# #', + y: 5, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# #', + y: 5, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# #', + y: 5, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # ', + y: 5, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # ', + y: 5, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # ', + y: 5, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # #', + y: 5, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # #', + y: 5, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # #', + y: 5, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # ', + y: 5, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # ', + y: 5, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # ', + y: 5, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # #', + y: 5, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # #', + y: 5, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # #', + y: 5, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # ', + y: 5, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # ', + y: 5, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 5, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 6, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 6, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 6, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n ', + y: 6, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n ', + y: 6, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n ', + y: 6, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n #', + y: 6, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n #', + y: 6, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n #', + y: 6, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # ', + y: 6, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # ', + y: 6, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # ', + y: 6, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # #', + y: 6, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # #', + y: 6, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # #', + y: 6, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # ', + y: 6, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # ', + y: 6, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # ', + y: 6, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # #', + y: 6, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # #', + y: 6, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # #', + y: 6, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # ', + y: 6, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # ', + y: 6, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # ', + y: 6, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #', + y: 6, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #', + y: 6, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 6, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 7, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 7, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n', + y: 7, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n#', + y: 7, + x: 0 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n#', + y: 7, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n#', + y: 7, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# ', + y: 7, + x: 1 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# ', + y: 7, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# ', + y: 7, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# #', + y: 7, + x: 2 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# #', + y: 7, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# #', + y: 7, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # ', + y: 7, + x: 3 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # ', + y: 7, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # ', + y: 7, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # #', + y: 7, + x: 4 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # #', + y: 7, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # #', + y: 7, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # ', + y: 7, + x: 5 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # ', + y: 7, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # ', + y: 7, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 10, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # #', + y: 7, + x: 6 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # #', + y: 7, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 7, + col: 4, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # #', + y: 7, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 8, + col: 6, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # ', + y: 7, + x: 7 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 6, + col: 28, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # ', + y: 7, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 12, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 7, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 5, + col: 26, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 8, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 15, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n\n', + func_name: '', + stack_to_render: [], + globals: + { size: 8, + board: ' # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n # # # #\n# # # # \n', + y: 8, + x: 8 }, + ordered_globals: [ 'size', 'board', 'y', 'x' ], + line: 15, + col: 19, + event: 'step_line', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-2.3.js b/v4-cokapi/backends/javascript/tests/eloquentjs-2.3.js new file mode 100644 index 000000000..7d8274beb --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-2.3.js @@ -0,0 +1,15 @@ +var size = 8; + +var board = ""; + +for (var y = 0; y < size; y++) { + for (var x = 0; x < size; x++) { + if ((x + y) % 2 == 0) + board += " "; + else + board += "#"; + } + board += "\n"; +} + +console.log(board); diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-3.2.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-3.2.golden new file mode 100644 index 000000000..23ef2f53c --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-3.2.golden @@ -0,0 +1,1373 @@ +{ code: 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}\n\n\nconsole.log(isEven(11));', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 13, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 4, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 6, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 9, + col: 11, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 4, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 6, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 9, + col: 11, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 4, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 6, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 9, + col: 11, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 4, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 6, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 9, + col: 11, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 4, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 6, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 9, + col: 11, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'isEven', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'isEven', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 4, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'isEven', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 5, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'isEven', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f7', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 1, __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 5, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 5 } }, + { func_name: 'isEven', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f6', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 3, __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 10, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 7 } }, + { func_name: 'isEven', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f5', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 5, __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 10, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 9 } }, + { func_name: 'isEven', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f4', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 7, __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 10, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 11 } }, + { func_name: 'isEven', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f3', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 9, __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 10, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'isEven', + stack_to_render: + [ { func_name: 'isEven', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'isEven_f2', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 11, __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 10, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 13, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } }, + { stdout: 'false\n', + func_name: '', + stack_to_render: [], + globals: { isEven: [ 'REF', 1 ] }, + ordered_globals: [ 'isEven' ], + line: 13, + col: 24, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'isEven', + 'function isEven(n) {\n if (n == 0)\n return true;\n else if (n == 1)\n return false;\n else if (n < 0)\n return isEven(-n);\n else\n return isEven(n - 2);\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-3.2.js b/v4-cokapi/backends/javascript/tests/eloquentjs-3.2.js new file mode 100644 index 000000000..2a7b35e52 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-3.2.js @@ -0,0 +1,13 @@ +function isEven(n) { + if (n == 0) + return true; + else if (n == 1) + return false; + else if (n < 0) + return isEven(-n); + else + return isEven(n - 2); +} + + +console.log(isEven(11)); diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.1-min.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1-min.golden new file mode 100644 index 000000000..41a853029 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1-min.golden @@ -0,0 +1,498 @@ +{ code: '// minimized version of eloquentjs-4.1.js\nfunction range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}\n\nrange(1, 10); // print 1\nrange(1, 10, 0); // print 0\nrange(1, 10, 1); // print 1', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 9, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: [ 'JS_SPECIAL_VAL', 'undefined' ], + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: [ 'JS_SPECIAL_VAL', 'undefined' ], + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 3, + col: 20, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 2 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 5, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '2': [ 'LIST' ] } }, + { stdout: '1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 2 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 6, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '2': [ 'LIST' ] } }, + { stdout: '1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', '__return__' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'REF', 2 ], + __return__: [ 'REF', 2 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 6, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '2': [ 'LIST' ] } }, + { stdout: '1\n', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 10, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f3', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: 0, + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f3', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: 0, + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f3', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: { start: 1, end: 10, step: 0, array: [ 'REF', 3 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 5, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '3': [ 'LIST' ] } }, + { stdout: '1\n0\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f3', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: { start: 1, end: 10, step: 0, array: [ 'REF', 3 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 6, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '3': [ 'LIST' ] } }, + { stdout: '1\n0\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f3', + ordered_varnames: [ 'start', 'end', 'step', 'array', '__return__' ], + encoded_locals: + { start: 1, + end: 10, + step: 0, + array: [ 'REF', 3 ], + __return__: [ 'REF', 3 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 6, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '3': [ 'LIST' ] } }, + { stdout: '1\n0\n', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 11, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '1\n0\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '1\n0\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } }, + { stdout: '1\n0\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 4 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 5, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '4': [ 'LIST' ] } }, + { stdout: '1\n0\n1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 4 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 6, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '4': [ 'LIST' ] } }, + { stdout: '1\n0\n1\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', '__return__' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'REF', 4 ], + __return__: [ 'REF', 4 ] } } ], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 6, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ], + '4': [ 'LIST' ] } }, + { stdout: '1\n0\n1\n', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ] }, + ordered_globals: [ 'range' ], + line: 11, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n console.log(step);\n return array;\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.1-min.js b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1-min.js new file mode 100644 index 000000000..72daf640d --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1-min.js @@ -0,0 +1,11 @@ +// minimized version of eloquentjs-4.1.js +function range(start, end, step) { + if (step == null) step = 1; + var array = []; + console.log(step); + return array; +} + +range(1, 10); // print 1 +range(1, 10, 0); // print 0 +range(1, 10, 1); // print 1 diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.1.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1.golden new file mode 100644 index 000000000..0bba86963 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1.golden @@ -0,0 +1,2198 @@ +{ code: 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}\n\nfunction sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}\n\nconsole.log(sum(range(1, 10)));\nconsole.log(range(5, 2, -1));', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 22, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 1, + end: 10, + step: [ 'JS_SPECIAL_VAL', 'undefined' ], + array: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 1, + end: 10, + step: [ 'JS_SPECIAL_VAL', 'undefined' ], + array: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 2, + col: 20, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 3, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'REF', 3 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 5, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST' ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'REF', 3 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST' ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 1 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST' ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 2 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 2 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 3 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 3 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 4 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 4 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 5 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 5 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 6 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 6 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 7 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 7 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 8 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 8 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 9 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 9 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 10 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 10 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 7, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 11 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 1, end: 10, step: 1, array: [ 'REF', 3 ], i: 11 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 12, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f2', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i', '__return__' ], + encoded_locals: + { start: 1, + end: 10, + step: 1, + array: [ 'REF', 3 ], + i: 11, + __return__: [ 'REF', 3 ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 12, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 22, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: + { array: [ 'REF', 3 ], + total: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 16, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 0, i: 0 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 0, i: 0 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 1, i: 1 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 1, i: 1 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 3, i: 2 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 3, i: 2 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 6, i: 3 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 6, i: 3 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 10, i: 4 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 10, i: 4 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 15, i: 5 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 15, i: 5 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 21, i: 6 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 21, i: 6 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 28, i: 7 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 28, i: 7 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 36, i: 8 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 36, i: 8 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 45, i: 9 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 45, i: 9 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 18, + col: 18, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 55, i: 10 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 17, + col: 27, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], total: 55, i: 10 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 19, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: 'sum', + stack_to_render: + [ { func_name: 'sum', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'sum_f3', + ordered_varnames: [ 'array', 'total', 'i', '__return__' ], + encoded_locals: { array: [ 'REF', 3 ], total: 55, i: 10, __return__: 55 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 19, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '3': [ 'LIST', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 22, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '55\n', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 23, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 5, + end: 2, + step: -1, + array: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 5, + end: 2, + step: -1, + array: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 3, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 5, + end: 2, + step: -1, + array: [ 'REF', 4 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 5, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST' ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: + { start: 5, + end: 2, + step: -1, + array: [ 'REF', 4 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST' ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 5 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 10, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST' ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 4 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 4 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 10, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 3 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 3 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 10, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 2 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4, 3 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 2 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 10, + col: 12, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4, 3 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 1 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4, 3, 2 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i' ], + encoded_locals: { start: 5, end: 2, step: -1, array: [ 'REF', 4 ], i: 1 } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 12, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4, 3, 2 ] } }, + { stdout: '55\n', + func_name: 'range', + stack_to_render: + [ { func_name: 'range', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'range_f4', + ordered_varnames: [ 'start', 'end', 'step', 'array', 'i', '__return__' ], + encoded_locals: + { start: 5, + end: 2, + step: -1, + array: [ 'REF', 4 ], + i: 1, + __return__: [ 'REF', 4 ] } } ], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 12, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ], + '4': [ 'LIST', 5, 4, 3, 2 ] } }, + { stdout: '55\n', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 23, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } }, + { stdout: '55\n[ 5, 4, 3, 2 ]\n', + func_name: '', + stack_to_render: [], + globals: { range: [ 'REF', 1 ], sum: [ 'REF', 2 ] }, + ordered_globals: [ 'range', 'sum' ], + line: 23, + col: 29, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'range', + 'function range(start, end, step) {\n if (step == null) step = 1;\n var array = [];\n\n if (step > 0) {\n for (var i = start; i <= end; i += step)\n array.push(i);\n } else {\n for (var i = start; i >= end; i += step)\n array.push(i);\n }\n return array;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'sum', + 'function sum(array) {\n var total = 0;\n for (var i = 0; i < array.length; i++)\n total += array[i];\n return total;\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.1.js b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1.js new file mode 100644 index 000000000..e538a5e64 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.1.js @@ -0,0 +1,23 @@ +function range(start, end, step) { + if (step == null) step = 1; + var array = []; + + if (step > 0) { + for (var i = start; i <= end; i += step) + array.push(i); + } else { + for (var i = start; i >= end; i += step) + array.push(i); + } + return array; +} + +function sum(array) { + var total = 0; + for (var i = 0; i < array.length; i++) + total += array[i]; + return total; +} + +console.log(sum(range(1, 10))); +console.log(range(5, 2, -1)); diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.2.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-4.2.golden new file mode 100644 index 000000000..60485b54a --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.2.golden @@ -0,0 +1,888 @@ +{ code: 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}\n\nfunction reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}\n\nconsole.log(reverseArray(["A", "B", "C"]));\n// → ["C", "B", "A"];\nvar arrayValue = [1, 2, 3, 4, 5];\nreverseArrayInPlace(arrayValue);\nconsole.log(arrayValue);\n// → [5, 4, 3, 2, 1]\n\n// Source: Eloquent JavaScript -- Exercise 4.2\n// http://eloquentjavascript.net/code/#4.2', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 17, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: + { array: [ 'REF', 3 ], + output: [ 'JS_SPECIAL_VAL', 'undefined' ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: + { array: [ 'REF', 3 ], + output: [ 'REF', 4 ], + i: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 3, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: 2 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 4, + col: 21, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: 1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 3, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: 1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 4, + col: 21, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: 0 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 3, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C', 'B' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: 0 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 4, + col: 21, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C', 'B' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: -1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 3, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C', 'B', 'A' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i' ], + encoded_locals: { array: [ 'REF', 3 ], output: [ 'REF', 4 ], i: -1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 5, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C', 'B', 'A' ] } }, + { stdout: '', + func_name: 'reverseArray', + stack_to_render: + [ { func_name: 'reverseArray', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArray_f2', + ordered_varnames: [ 'array', 'output', 'i', '__return__' ], + encoded_locals: + { array: [ 'REF', 3 ], + output: [ 'REF', 4 ], + i: -1, + __return__: [ 'REF', 4 ] } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 5, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '3': [ 'LIST', 'A', 'B', 'C' ], + '4': [ 'LIST', 'C', 'B', 'A' ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 17, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: '', + stack_to_render: [], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 19, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: '', + stack_to_render: [], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 20, + col: 20, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: + { array: [ 'REF', 5 ], + i: 0, + old: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 9, + col: 22, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: + { array: [ 'REF', 5 ], + i: 0, + old: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 10, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 0, old: 1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 11, + col: 26, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 1, 2, 3, 4, 5 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 0, old: 1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 12, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 2, 3, 4, 5 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 1, old: 1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 9, + col: 22, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 2, 3, 4, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 1, old: 1 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 10, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 2, 3, 4, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 1, old: 2 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 11, + col: 26, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 2, 3, 4, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 1, old: 2 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 12, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 4, 3, 4, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 2, old: 2 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 9, + col: 22, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 4, 3, 2, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old' ], + encoded_locals: { array: [ 'REF', 5 ], i: 2, old: 2 } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 14, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 4, 3, 2, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: 'reverseArrayInPlace', + stack_to_render: + [ { func_name: 'reverseArrayInPlace', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reverseArrayInPlace_f3', + ordered_varnames: [ 'array', 'i', 'old', '__return__' ], + encoded_locals: { array: [ 'REF', 5 ], i: 2, old: 2, __return__: [ 'REF', 5 ] } } ], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 14, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 4, 3, 2, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n', + func_name: '', + stack_to_render: [], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 21, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 4, 3, 2, 1 ] } }, + { stdout: '[ \'C\', \'B\', \'A\' ]\n[ 5, 4, 3, 2, 1 ]\n', + func_name: '', + stack_to_render: [], + globals: + { reverseArray: [ 'REF', 1 ], + reverseArrayInPlace: [ 'REF', 2 ], + arrayValue: [ 'REF', 5 ] }, + ordered_globals: [ 'reverseArray', 'reverseArrayInPlace', 'arrayValue' ], + line: 25, + col: 42, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'reverseArray', + 'function reverseArray(array) {\n var output = [];\n for (var i = array.length - 1; i >= 0; i--)\n output.push(array[i]);\n return output;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'reverseArrayInPlace', + 'function reverseArrayInPlace(array) {\n for (var i = 0; i < Math.floor(array.length / 2); i++) {\n var old = array[i];\n array[i] = array[array.length - 1 - i];\n array[array.length - 1 - i] = old;\n }\n return array;\n}', + null, + null ], + '5': [ 'LIST', 5, 4, 3, 2, 1 ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.2.js b/v4-cokapi/backends/javascript/tests/eloquentjs-4.2.js new file mode 100644 index 000000000..114572d58 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.2.js @@ -0,0 +1,25 @@ +function reverseArray(array) { + var output = []; + for (var i = array.length - 1; i >= 0; i--) + output.push(array[i]); + return output; +} + +function reverseArrayInPlace(array) { + for (var i = 0; i < Math.floor(array.length / 2); i++) { + var old = array[i]; + array[i] = array[array.length - 1 - i]; + array[array.length - 1 - i] = old; + } + return array; +} + +console.log(reverseArray(["A", "B", "C"])); +// → ["C", "B", "A"]; +var arrayValue = [1, 2, 3, 4, 5]; +reverseArrayInPlace(arrayValue); +console.log(arrayValue); +// → [5, 4, 3, 2, 1] + +// Source: Eloquent JavaScript -- Exercise 4.2 +// http://eloquentjavascript.net/code/#4.2 diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.4.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-4.4.golden new file mode 100644 index 000000000..7a4f8bccd --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.4.golden @@ -0,0 +1,1932 @@ +{ code: 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}\n\nvar obj = {here: {is: "an"}, object: 2};\nconsole.log(deepEqual(obj, obj));\n// → true\nconsole.log(deepEqual(obj, {here: 1, object: 2}));\n// → false\nconsole.log(deepEqual(obj, {here: {is: "an"}, object: 2}));\n// → true', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { deepEqual: [ 'REF', 1 ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 22, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 23, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: '', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f2', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 2 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: '', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f2', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 2 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: '', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f2', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 2 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ], + __return__: [ 'JS_SPECIAL_VAL', 'true' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 23, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\n', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 25, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 8, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 0, + propsInB: 0, + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 10, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 0, + propsInB: 0, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 11, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 0, + prop: 'object' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 13, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 0, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 14, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 15, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f4', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: 1, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f4', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: 1, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f4', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: 1, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f4', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: 1, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ], + __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 6, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 16, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f3', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 4 ], + propsInA: 2, + propsInB: 1, + prop: 'here', + __return__: [ 'JS_SPECIAL_VAL', 'false' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 16, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '4': [ 'INSTANCE', '', [ 'here', 1 ], [ 'object', 2 ] ] } }, + { stdout: 'true\n', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 25, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 27, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 8, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 0, + propsInB: 0, + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 10, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 0, + propsInB: 0, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 11, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 0, + prop: 'object' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 13, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 0, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 14, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 15, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 4, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 8, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 0, + propsInB: 0, + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 10, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 0, + propsInB: 0, + prop: 'is' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 11, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 0, + prop: 'is' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 13, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 0, + prop: 'is' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 14, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 1, + prop: 'is' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 15, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 1, + prop: 'is' } }, + { func_name: 'deepEqual', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f7', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: 'an', + b: 'an', + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 1, + prop: 'is' } }, + { func_name: 'deepEqual', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f7', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: 'an', + b: 'an', + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 1, + prop: 'is' } }, + { func_name: 'deepEqual', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f7', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: 'an', + b: 'an', + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ], + __return__: [ 'JS_SPECIAL_VAL', 'true' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 1, + prop: 'is' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 19, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'here' } }, + { func_name: 'deepEqual', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f6', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: [ 'REF', 3 ], + b: [ 'REF', 6 ], + propsInA: 1, + propsInB: 1, + prop: 'is', + __return__: [ 'JS_SPECIAL_VAL', 'true' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 19, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 1, + prop: 'object' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 14, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 2, + prop: 'object' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 15, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 2, + prop: 'object' } }, + { func_name: 'deepEqual', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f8', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: 2, + b: 2, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 2, + prop: 'object' } }, + { func_name: 'deepEqual', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f8', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: 2, + b: 2, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 2, + prop: 'object' } }, + { func_name: 'deepEqual', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f8', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: 2, + b: 2, + propsInA: [ 'JS_SPECIAL_VAL', 'undefined' ], + propsInB: [ 'JS_SPECIAL_VAL', 'undefined' ], + prop: [ 'JS_SPECIAL_VAL', 'undefined' ], + __return__: [ 'JS_SPECIAL_VAL', 'true' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 2, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 2, + prop: 'object' } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 19, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: 'deepEqual', + stack_to_render: + [ { func_name: 'deepEqual', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'deepEqual_f5', + ordered_varnames: [ 'a', 'b', 'propsInA', 'propsInB', 'prop', '__return__' ], + encoded_locals: + { a: [ 'REF', 2 ], + b: [ 'REF', 5 ], + propsInA: 2, + propsInB: 2, + prop: 'object', + __return__: [ 'JS_SPECIAL_VAL', 'true' ] } } ], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 19, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ], + '5': [ 'INSTANCE', '', [ 'here', [ 'REF', 6 ] ], [ 'object', 2 ] ], + '6': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\n', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 27, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } }, + { stdout: 'true\nfalse\ntrue\n', + func_name: '', + stack_to_render: [], + globals: { deepEqual: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'deepEqual', 'obj' ], + line: 28, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'deepEqual', + 'function deepEqual(a, b) {\n if (a === b) return true;\n \n if (a == null || typeof a != "object" ||\n b == null || typeof b != "object")\n return false;\n \n var propsInA = 0, propsInB = 0;\n\n for (var prop in a)\n propsInA += 1;\n\n for (var prop in b) {\n propsInB += 1;\n if (!(prop in a) || !deepEqual(a[prop], b[prop]))\n return false;\n }\n\n return propsInA == propsInB;\n}', + null, + null ], + '2': [ 'INSTANCE', '', [ 'here', [ 'REF', 3 ] ], [ 'object', 2 ] ], + '3': [ 'INSTANCE', '', [ 'is', 'an' ] ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-4.4.js b/v4-cokapi/backends/javascript/tests/eloquentjs-4.4.js new file mode 100644 index 000000000..b26c75acb --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-4.4.js @@ -0,0 +1,28 @@ +function deepEqual(a, b) { + if (a === b) return true; + + if (a == null || typeof a != "object" || + b == null || typeof b != "object") + return false; + + var propsInA = 0, propsInB = 0; + + for (var prop in a) + propsInA += 1; + + for (var prop in b) { + propsInB += 1; + if (!(prop in a) || !deepEqual(a[prop], b[prop])) + return false; + } + + return propsInA == propsInB; +} + +var obj = {here: {is: "an"}, object: 2}; +console.log(deepEqual(obj, obj)); +// → true +console.log(deepEqual(obj, {here: 1, object: 2})); +// → false +console.log(deepEqual(obj, {here: {is: "an"}, object: 2})); +// → true diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-6.1-mod.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-6.1-mod.golden new file mode 100644 index 000000000..37afed703 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-6.1-mod.golden @@ -0,0 +1,980 @@ +{ code: 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}\n\nVector.prototype.plus = function(other) {\n return new Vector(this.x + other.x, this.y + other.y);\n};\n\nVector.prototype.minus = function(other) {\n return new Vector(this.x - other.x, this.y - other.y);\n};\n\nObject.defineProperty(Vector.prototype, "length", {\n get: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n});\n\nvar v1 = new Vector(1, 2);\nvar v2 = new Vector(2, 3);\nvar v3 = v1.plus(v2);\nconsole.log(v3);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 6, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 10, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': [ 'INSTANCE', '', [ 'plus', [ 'REF', 3 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 14, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 20, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 5 ], x: 1, y: 2 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 2, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 5 ], x: 1, y: 2 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 3, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: { this: [ 'REF', 5 ], x: 1, y: 2, __return__: [ 'REF', 5 ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'JS_SPECIAL_VAL', 'undefined' ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 21, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f3', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 6 ], x: 2, y: 3 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 2, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f3', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 6 ], x: 2, y: 3 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 3, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: 'Vector (constructor)', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f3', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: { this: [ 'REF', 6 ], x: 2, y: 3, __return__: [ 'REF', 6 ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'JS_SPECIAL_VAL', 'undefined' ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 22, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'other' ], + encoded_locals: { this: [ 'REF', 5 ], other: [ 'REF', 6 ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 7, + col: 13, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'other' ], + encoded_locals: { this: [ 'REF', 5 ], other: [ 'REF', 6 ] } }, + { func_name: 'Vector (constructor)', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f5', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 3, y: 5 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 2, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '7': + [ 'INSTANCE', + '', + [ 'x', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'other' ], + encoded_locals: { this: [ 'REF', 5 ], other: [ 'REF', 6 ] } }, + { func_name: 'Vector (constructor)', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f5', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 3, y: 5 } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 3, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '7': + [ 'INSTANCE', + '', + [ 'x', 3 ], + [ 'y', [ 'JS_SPECIAL_VAL', 'undefined' ] ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: 'Vector', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'other' ], + encoded_locals: { this: [ 'REF', 5 ], other: [ 'REF', 6 ] } }, + { func_name: 'Vector (constructor)', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Vector (constructor)_f5', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: { this: [ 'REF', 7 ], x: 3, y: 5, __return__: [ 'REF', 7 ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '7': + [ 'INSTANCE', + '', + [ 'x', 3 ], + [ 'y', 5 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'other', '__return__' ], + encoded_locals: + { this: [ 'REF', 5 ], + other: [ 'REF', 6 ], + __return__: [ 'REF', 7 ] } } ], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '7': + [ 'INSTANCE', + '', + [ 'x', 3 ], + [ 'y', 5 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'REF', 7 ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 23, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '7': + [ 'INSTANCE', + '', + [ 'x', 3 ], + [ 'y', 5 ], + [ '__proto__', [ 'REF', 2 ] ] ] } }, + { stdout: '{ x: 3, y: 5 }\n', + func_name: '', + stack_to_render: [], + globals: + { Vector: [ 'REF', 1 ], + v1: [ 'REF', 5 ], + v2: [ 'REF', 6 ], + v3: [ 'REF', 7 ] }, + ordered_globals: [ 'Vector', 'v1', 'v2', 'v3' ], + line: 23, + col: 16, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Vector', + 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 2 ] ] ], + null ], + '2': + [ 'INSTANCE', + '', + [ 'plus', [ 'REF', 3 ] ], + [ 'minus', [ 'REF', 4 ] ] ], + '3': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x + other.x, this.y + other.y);\n}', + null, + null ], + '4': + [ 'JS_FUNCTION', + '', + 'function (other) {\n return new Vector(this.x - other.x, this.y - other.y);\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'x', 1 ], + [ 'y', 2 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '6': + [ 'INSTANCE', + '', + [ 'x', 2 ], + [ 'y', 3 ], + [ '__proto__', [ 'REF', 2 ] ] ], + '7': + [ 'INSTANCE', + '', + [ 'x', 3 ], + [ 'y', 5 ], + [ '__proto__', [ 'REF', 2 ] ] ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-6.1-mod.js b/v4-cokapi/backends/javascript/tests/eloquentjs-6.1-mod.js new file mode 100644 index 000000000..bf7cbc484 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-6.1-mod.js @@ -0,0 +1,23 @@ +function Vector(x, y) { + this.x = x; + this.y = y; +} + +Vector.prototype.plus = function(other) { + return new Vector(this.x + other.x, this.y + other.y); +}; + +Vector.prototype.minus = function(other) { + return new Vector(this.x - other.x, this.y - other.y); +}; + +Object.defineProperty(Vector.prototype, "length", { + get: function() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } +}); + +var v1 = new Vector(1, 2); +var v2 = new Vector(2, 3); +var v3 = v1.plus(v2); +console.log(v3); diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-8.1.golden b/v4-cokapi/backends/javascript/tests/eloquentjs-8.1.golden new file mode 100644 index 000000000..3fe3eec11 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-8.1.golden @@ -0,0 +1,2899 @@ +{ code: 'var nTimes = 0; // for determinism\n\nfunction MultiplicatorUnitFailure() {}\n\nfunction primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}\n\nfunction reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}\n\nconsole.log(reliableMultiply(8, 8));\n// → 64', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { nTimes: [ 'JS_SPECIAL_VAL', 'undefined' ], + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 1, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { nTimes: 0, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 25, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 0, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 0, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 0, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 0, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'MultiplicatorUnitFailure', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'MultiplicatorUnitFailure (constructor)', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'MultiplicatorUnitFailure (constructor)_f4', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: { this: [ 'REF', 4 ], __return__: [ 'REF', 4 ] } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 3, + col: 37, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '4': [ 'INSTANCE', '' ] } }, + { exception_msg: '[object Object]', + stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 10, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'e', 'a', 'b' ], + encoded_locals: { e: [ 'REF', 4 ], a: 8, b: 8 } } ], + globals: + { e: [ 'REF', 4 ], + nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'e', + 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 19, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '4': [ 'INSTANCE', '' ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 1, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'MultiplicatorUnitFailure', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'MultiplicatorUnitFailure (constructor)', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'MultiplicatorUnitFailure (constructor)_f5', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: { this: [ 'REF', 5 ], __return__: [ 'REF', 5 ] } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 3, + col: 37, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '5': [ 'INSTANCE', '' ] } }, + { exception_msg: '[object Object]', + stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 10, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'e', 'a', 'b' ], + encoded_locals: { e: [ 'REF', 5 ], a: 8, b: 8 } } ], + globals: + { e: [ 'REF', 5 ], + nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'e', + 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 19, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '5': [ 'INSTANCE', '' ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 2, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'MultiplicatorUnitFailure', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'MultiplicatorUnitFailure (constructor)', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'MultiplicatorUnitFailure (constructor)_f6', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: { this: [ 'REF', 6 ], __return__: [ 'REF', 6 ] } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 3, + col: 37, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '6': [ 'INSTANCE', '' ] } }, + { exception_msg: '[object Object]', + stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 10, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'e', 'a', 'b' ], + encoded_locals: { e: [ 'REF', 6 ], a: 8, b: 8 } } ], + globals: + { e: [ 'REF', 6 ], + nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'e', + 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 19, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '6': [ 'INSTANCE', '' ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 3, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'MultiplicatorUnitFailure', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'MultiplicatorUnitFailure (constructor)', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'MultiplicatorUnitFailure (constructor)_f7', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: { this: [ 'REF', 7 ], __return__: [ 'REF', 7 ] } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 3, + col: 37, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '7': [ 'INSTANCE', '' ] } }, + { exception_msg: '[object Object]', + stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 10, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'e', 'a', 'b' ], + encoded_locals: { e: [ 'REF', 7 ], a: 8, b: 8 } } ], + globals: + { e: [ 'REF', 7 ], + nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'e', + 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 19, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '7': [ 'INSTANCE', '' ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 4, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'MultiplicatorUnitFailure', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'MultiplicatorUnitFailure (constructor)', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'MultiplicatorUnitFailure (constructor)_f8', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: { this: [ 'REF', 8 ], __return__: [ 'REF', 8 ] } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 3, + col: 37, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '8': [ 'INSTANCE', '' ] } }, + { exception_msg: '[object Object]', + stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 10, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'e', 'a', 'b' ], + encoded_locals: { e: [ 'REF', 8 ], a: 8, b: 8 } } ], + globals: + { e: [ 'REF', 8 ], + nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'e', + 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 19, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '8': [ 'INSTANCE', '' ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 5, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 9, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'MultiplicatorUnitFailure', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'MultiplicatorUnitFailure (constructor)', + frame_id: 9, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'MultiplicatorUnitFailure (constructor)_f9', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: { this: [ 'REF', 9 ], __return__: [ 'REF', 9 ] } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 3, + col: 37, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '9': [ 'INSTANCE', '' ] } }, + { exception_msg: '[object Object]', + stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 10, + col: 10, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'e', 'a', 'b' ], + encoded_locals: { e: [ 'REF', 9 ], a: 8, b: 8 } } ], + globals: + { e: [ 'REF', 9 ], + nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'e', + 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 19, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ], + '9': [ 'INSTANCE', '' ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 15, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 17, + col: 13, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 6, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 7, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'primitiveMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b' ], + encoded_locals: { a: 8, b: 8 } }, + { func_name: 'primitiveMultiply', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'primitiveMultiply_f3', + ordered_varnames: [ 'a', 'b', '__return__' ], + encoded_locals: { a: 8, b: 8, __return__: 64 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 7, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'reliableMultiply', + stack_to_render: + [ { func_name: 'reliableMultiply', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'reliableMultiply_f2', + ordered_varnames: [ 'a', 'b', '__return__' ], + encoded_locals: { a: 8, b: 8, __return__: 64 } } ], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 23, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 25, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } }, + { stdout: '64\n', + func_name: '', + stack_to_render: [], + globals: + { nTimes: 6, + MultiplicatorUnitFailure: [ 'REF', 1 ], + primitiveMultiply: [ 'REF', 2 ], + reliableMultiply: [ 'REF', 3 ] }, + ordered_globals: + [ 'nTimes', + 'MultiplicatorUnitFailure', + 'primitiveMultiply', + 'reliableMultiply' ], + line: 26, + col: 7, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'MultiplicatorUnitFailure', + 'function MultiplicatorUnitFailure() {}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'primitiveMultiply', + 'function primitiveMultiply(a, b) {\n if (nTimes > 5)\n return a * b;\n else {\n nTimes++;\n throw new MultiplicatorUnitFailure();\n }\n}', + null, + null ], + '3': + [ 'JS_FUNCTION', + 'reliableMultiply', + 'function reliableMultiply(a, b) {\n for (;;) {\n try {\n return primitiveMultiply(a, b);\n } catch (e) {\n if (!(e instanceof MultiplicatorUnitFailure))\n throw e;\n }\n }\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/eloquentjs-8.1.js b/v4-cokapi/backends/javascript/tests/eloquentjs-8.1.js new file mode 100644 index 000000000..eef50ea3a --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/eloquentjs-8.1.js @@ -0,0 +1,26 @@ +var nTimes = 0; // for determinism + +function MultiplicatorUnitFailure() {} + +function primitiveMultiply(a, b) { + if (nTimes > 5) + return a * b; + else { + nTimes++; + throw new MultiplicatorUnitFailure(); + } +} + +function reliableMultiply(a, b) { + for (;;) { + try { + return primitiveMultiply(a, b); + } catch (e) { + if (!(e instanceof MultiplicatorUnitFailure)) + throw e; + } + } +} + +console.log(reliableMultiply(8, 8)); +// → 64 diff --git a/v4-cokapi/backends/javascript/tests/empty-obj.golden b/v4-cokapi/backends/javascript/tests/empty-obj.golden new file mode 100644 index 000000000..fa977299a --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/empty-obj.golden @@ -0,0 +1,31 @@ +{ code: '// make sure weird stuff doesn\'t happen with empty objects\nvar lst = []\nvar obj = {}', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { lst: [ 'JS_SPECIAL_VAL', 'undefined' ], + obj: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'lst', 'obj' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { lst: [ 'REF', 1 ], obj: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'lst', 'obj' ], + line: 3, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST' ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { lst: [ 'REF', 1 ], obj: [ 'REF', 2 ] }, + ordered_globals: [ 'lst', 'obj' ], + line: 3, + col: 12, + event: 'step_line', + heap: { '1': [ 'LIST' ], '2': [ 'INSTANCE', '' ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/empty-obj.js b/v4-cokapi/backends/javascript/tests/empty-obj.js new file mode 100644 index 000000000..9c0097687 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/empty-obj.js @@ -0,0 +1,3 @@ +// make sure weird stuff doesn't happen with empty objects +var lst = [] +var obj = {} diff --git a/v4-cokapi/backends/javascript/tests/exception-oneliner.golden b/v4-cokapi/backends/javascript/tests/exception-oneliner.golden new file mode 100644 index 000000000..aa43ccd8f --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/exception-oneliner.golden @@ -0,0 +1,21 @@ +{ code: 'var y = Object.create(5);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { y: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'y' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { exception_msg: 'TypeError: Object prototype may only be an Object or null', + stdout: '', + func_name: '', + stack_to_render: [], + globals: { y: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'y' ], + line: 1, + col: 0, + event: 'exception', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/exception-oneliner.js b/v4-cokapi/backends/javascript/tests/exception-oneliner.js new file mode 100644 index 000000000..83d03f517 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/exception-oneliner.js @@ -0,0 +1 @@ +var y = Object.create(5); diff --git a/v4-cokapi/backends/javascript/tests/exception-small.golden b/v4-cokapi/backends/javascript/tests/exception-small.golden new file mode 100644 index 000000000..3ed2d8ddc --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/exception-small.golden @@ -0,0 +1,48 @@ +{ code: 'try {\n throw Error(\'oops\');\n}\ncatch (e) {\n var xxx = 1;\n console.log(e); // e should be in scope here\n}', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { xxx: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'xxx' ], + line: 2, + col: 10, + event: 'step_line', + heap: {} }, + { exception_msg: 'Error: oops', + stdout: '', + func_name: '', + stack_to_render: [], + globals: { xxx: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'xxx' ], + line: 2, + col: 10, + event: 'exception', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { e: [ 'REF', 1 ], xxx: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'e', 'xxx' ], + line: 5, + col: 4, + event: 'step_line', + heap: { '1': [ 'INSTANCE_PPRINT', 'object', 'Error: oops' ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { e: [ 'REF', 1 ], xxx: 1 }, + ordered_globals: [ 'e', 'xxx' ], + line: 6, + col: 4, + event: 'step_line', + heap: { '1': [ 'INSTANCE_PPRINT', 'object', 'Error: oops' ] } }, + { stdout: '[Error: oops]\n', + func_name: '', + stack_to_render: [], + globals: { xxx: 1 }, + ordered_globals: [ 'xxx' ], + line: 7, + col: 1, + event: 'step_line', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/exception-small.js b/v4-cokapi/backends/javascript/tests/exception-small.js new file mode 100644 index 000000000..30c4fa648 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/exception-small.js @@ -0,0 +1,7 @@ +try { + throw Error('oops'); +} +catch (e) { + var xxx = 1; + console.log(e); // e should be in scope here +} diff --git a/v4-cokapi/backends/javascript/tests/exception.golden b/v4-cokapi/backends/javascript/tests/exception.golden new file mode 100644 index 000000000..b4065190e --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/exception.golden @@ -0,0 +1,858 @@ +{ code: '// adapted from OPT Python example\n// Tutorial code from Prof. Peter Wentworth\n// Rhodes University, South Africa (http://www.ru.ac.za/)\n\nfunction f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}\n\nf(4);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 22, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 7, + col: 8, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 11, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 12, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 13, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 7, + col: 8, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 11, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 12, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 13, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 7, + col: 8, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 11, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 12, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 13, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 7, + col: 8, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 11, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: 10 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 12, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\nx is 10\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: 10 } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 13, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\nx is 10\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: 10 } }, + { func_name: 'f', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f6', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 0, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 7, + col: 8, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\nx is 10\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: 10 } }, + { func_name: 'f', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f6', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 0, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 8, + col: 20, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { exception_msg: 'Error: DivByZero', + stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\nx is 10\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: 10 } }, + { func_name: 'f', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f6', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 0, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 8, + col: 16, + event: 'exception', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } }, + { stdout: 'x is 2.5\nx is 3.3333333333333335\nx is 5\nx is 10\n', + func_name: 'f', + stack_to_render: + [ { func_name: 'f', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f2', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 4, x: 2.5 } }, + { func_name: 'f', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f3', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 3, x: 3.3333333333333335 } }, + { func_name: 'f', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f4', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 2, x: 5 } }, + { func_name: 'f', + frame_id: 5, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f5', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 1, x: 10 } }, + { func_name: 'f', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'f_f6', + ordered_varnames: [ 'n', 'x' ], + encoded_locals: { n: 0, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { f: [ 'REF', 1 ] }, + ordered_globals: [ 'f' ], + line: 18, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'f', + 'function f(n) {\n try {\n if (n == 0) {\n throw new Error(\'DivByZero\');\n }\n else {\n var x = 10 / n;\n console.log("x is " + x);\n f(n-1);\n console.log("survived!");\n }\n }\n finally {\n console.log("Bye from f where n = " + n);\n }\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/exception.js b/v4-cokapi/backends/javascript/tests/exception.js new file mode 100644 index 000000000..fa9e10c17 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/exception.js @@ -0,0 +1,22 @@ +// adapted from OPT Python example +// Tutorial code from Prof. Peter Wentworth +// Rhodes University, South Africa (http://www.ru.ac.za/) + +function f(n) { + try { + if (n == 0) { + throw new Error('DivByZero'); + } + else { + var x = 10 / n; + console.log("x is " + x); + f(n-1); + console.log("survived!"); + } + } + finally { + console.log("Bye from f where n = " + n); + } +} + +f(4); diff --git a/v4-cokapi/backends/javascript/tests/fact.golden b/v4-cokapi/backends/javascript/tests/fact.golden new file mode 100644 index 000000000..d94950f73 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/fact.golden @@ -0,0 +1,947 @@ +{ code: 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}\n\nfact(3);\nfact(3);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 10, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 6, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 6, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 6, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } }, + { func_name: 'fact', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 0 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } }, + { func_name: 'fact', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f5', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 0 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 3, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 4, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f4', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } }, + { func_name: 'fact', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f5', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 0, __return__: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f4', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 1, __return__: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f3', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 2, __return__: 2 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f2', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 3, __return__: 6 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 11, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 6, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 6, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f8', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f8', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 6, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 8, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f8', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } }, + { func_name: 'fact', + frame_id: 9, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f9', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 0 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 8, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f8', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } }, + { func_name: 'fact', + frame_id: 9, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f9', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 0 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 3, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 8, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f8', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 1 } }, + { func_name: 'fact', + frame_id: 9, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f9', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 0, __return__: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 3, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 2 } }, + { func_name: 'fact', + frame_id: 8, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f8', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 1, __return__: 1 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n' ], + encoded_locals: { n: 3 } }, + { func_name: 'fact', + frame_id: 7, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f7', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 2, __return__: 2 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: 'fact', + stack_to_render: + [ { func_name: 'fact', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'fact_f6', + ordered_varnames: [ 'n', '__return__' ], + encoded_locals: { n: 3, __return__: 6 } } ], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 8, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { fact: [ 'REF', 1 ] }, + ordered_globals: [ 'fact' ], + line: 11, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'fact', + 'function fact(n) {\n if (n == 0) {\n return 1;\n }\n else {\n return n * fact(n-1);\n }\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/fact.js b/v4-cokapi/backends/javascript/tests/fact.js new file mode 100644 index 000000000..1c156a0d1 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/fact.js @@ -0,0 +1,11 @@ +function fact(n) { + if (n == 0) { + return 1; + } + else { + return n * fact(n-1); + } +} + +fact(3); +fact(3); diff --git a/v4-cokapi/backends/javascript/tests/first.golden b/v4-cokapi/backends/javascript/tests/first.golden new file mode 100644 index 000000000..a6a26e490 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/first.golden @@ -0,0 +1,59 @@ +{ code: 'var x = 5;\nvar y = 10;\nvar z = x + y;\nvar w = z - (y / x);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { x: [ 'JS_SPECIAL_VAL', 'undefined' ], + y: [ 'JS_SPECIAL_VAL', 'undefined' ], + z: [ 'JS_SPECIAL_VAL', 'undefined' ], + w: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'y', 'z', 'w' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { x: 5, + y: [ 'JS_SPECIAL_VAL', 'undefined' ], + z: [ 'JS_SPECIAL_VAL', 'undefined' ], + w: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'y', 'z', 'w' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { x: 5, + y: 10, + z: [ 'JS_SPECIAL_VAL', 'undefined' ], + w: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'y', 'z', 'w' ], + line: 3, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 5, y: 10, z: 15, w: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'y', 'z', 'w' ], + line: 4, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 5, y: 10, z: 15, w: 13 }, + ordered_globals: [ 'x', 'y', 'z', 'w' ], + line: 4, + col: 20, + event: 'step_line', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/first.js b/v4-cokapi/backends/javascript/tests/first.js new file mode 100644 index 000000000..f84bd59bc --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/first.js @@ -0,0 +1,4 @@ +var x = 5; +var y = 10; +var z = x + y; +var w = z - (y / x); diff --git a/v4-cokapi/backends/javascript/tests/func-mod-arg.golden b/v4-cokapi/backends/javascript/tests/func-mod-arg.golden new file mode 100644 index 000000000..b73802d5d --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/func-mod-arg.golden @@ -0,0 +1,104 @@ +{ code: '// modify argument\nfunction foo(y) {\n y *= 3;\n var x = 42;\n}\n\nfoo(10);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 7, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n y *= 3;\n var x = 42;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'x' ], + encoded_locals: { y: 10, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 3, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n y *= 3;\n var x = 42;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'x' ], + encoded_locals: { y: 30, x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 4, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n y *= 3;\n var x = 42;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'y', 'x', '__return__' ], + encoded_locals: { y: 30, x: 42, __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 4, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n y *= 3;\n var x = 42;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 7, + col: 8, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(y) {\n y *= 3;\n var x = 42;\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/func-mod-arg.js b/v4-cokapi/backends/javascript/tests/func-mod-arg.js new file mode 100644 index 000000000..a02c8937c --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/func-mod-arg.js @@ -0,0 +1,7 @@ +// modify argument +function foo(y) { + y *= 3; + var x = 42; +} + +foo(10); diff --git a/v4-cokapi/backends/javascript/tests/func-properties.golden b/v4-cokapi/backends/javascript/tests/func-properties.golden new file mode 100644 index 000000000..2727aecba --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/func-properties.golden @@ -0,0 +1,62 @@ +{ code: 'function foo() {\n return \'hello\';\n}\n\n// display ordinary properties of functions\nfoo.prop1 = 42;\nfoo.prop2 = \'why?\';\n\nconsole.log(foo.prop1, foo.prop2);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 6, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n return \'hello\';\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 7, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n return \'hello\';\n}', + [ [ 'prop1', 42 ] ], + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 9, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n return \'hello\';\n}', + [ [ 'prop1', 42 ], [ 'prop2', 'why?' ] ], + null ] } }, + { stdout: '42 \'why?\'\n', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 9, + col: 34, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n return \'hello\';\n}', + [ [ 'prop1', 42 ], [ 'prop2', 'why?' ] ], + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/func-properties.js b/v4-cokapi/backends/javascript/tests/func-properties.js new file mode 100644 index 000000000..7b9931246 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/func-properties.js @@ -0,0 +1,9 @@ +function foo() { + return 'hello'; +} + +// display ordinary properties of functions +foo.prop1 = 42; +foo.prop2 = 'why?'; + +console.log(foo.prop1, foo.prop2); diff --git a/v4-cokapi/backends/javascript/tests/func-return.golden b/v4-cokapi/backends/javascript/tests/func-return.golden new file mode 100644 index 000000000..ee1220f5f --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/func-return.golden @@ -0,0 +1,191 @@ +{ code: 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}\n\nfoo(10);\nfoo(-10);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 13, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'i' ], + encoded_locals: { i: 10 } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'i' ], + encoded_locals: { i: 10 } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 4, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'i', '__return__' ], + encoded_locals: { i: 10, __return__: 10 } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 4, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 14, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f3', + ordered_varnames: [ 'i' ], + encoded_locals: { i: -10 } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f3', + ordered_varnames: [ 'i' ], + encoded_locals: { i: -10 } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 7, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f3', + ordered_varnames: [ 'i', '__return__' ], + encoded_locals: { i: -10, __return__: 10 } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 7, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 14, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(i) {\n\n if (i > 0) {\n return i;\n\n } else {\n return -1 * i;\n\n }\n\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/func-return.js b/v4-cokapi/backends/javascript/tests/func-return.js new file mode 100644 index 000000000..edd95fb06 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/func-return.js @@ -0,0 +1,14 @@ +function foo(i) { + + if (i > 0) { + return i; + + } else { + return -1 * i; + + } + +} + +foo(10); +foo(-10); diff --git a/v4-cokapi/backends/javascript/tests/infinite-fibonacci.golden b/v4-cokapi/backends/javascript/tests/infinite-fibonacci.golden new file mode 100644 index 000000000..1a89f28d5 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/infinite-fibonacci.golden @@ -0,0 +1,2706 @@ +{ code: '// Infinite Fibonacci!!!\nvar arr = [1, 1];\nconsole.log(arr[0]);\nwhile (true) {\n console.log(arr[arr.length-1]);\n var tmp = arr[0] + arr[1];\n arr.push(tmp);\n arr.shift();\n}', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { arr: [ 'JS_SPECIAL_VAL', 'undefined' ], + tmp: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'arr', 'tmp' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'arr', 'tmp' ], + line: 3, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 1 ] } }, + { stdout: '1\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 1 ] } }, + { stdout: '1\n1\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 1 ] } }, + { stdout: '1\n1\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 1 ] } }, + { stdout: '1\n1\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 1, 2 ] } }, + { stdout: '1\n1\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 2 ] } }, + { stdout: '1\n1\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 2 ] } }, + { stdout: '1\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 2 ] } }, + { stdout: '1\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 2 ] } }, + { stdout: '1\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1, 2, 3 ] } }, + { stdout: '1\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 2, 3 ] } }, + { stdout: '1\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2, 3 ] } }, + { stdout: '1\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2, 3 ] } }, + { stdout: '1\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2, 3 ] } }, + { stdout: '1\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2, 3, 5 ] } }, + { stdout: '1\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 3, 5 ] } }, + { stdout: '1\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3, 5 ] } }, + { stdout: '1\n1\n2\n3\n5\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3, 5 ] } }, + { stdout: '1\n1\n2\n3\n5\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 8 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3, 5 ] } }, + { stdout: '1\n1\n2\n3\n5\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 8 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3, 5, 8 ] } }, + { stdout: '1\n1\n2\n3\n5\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 8 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 5, 8 ] } }, + { stdout: '1\n1\n2\n3\n5\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 8 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5, 8 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 8 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5, 8 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 13 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5, 8 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 13 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5, 8, 13 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 13 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 8, 13 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 13 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 8, 13 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 13 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 8, 13 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 21 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 8, 13 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 21 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 8, 13, 21 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 21 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 13, 21 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 21 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 13, 21 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 21 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 13, 21 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 34 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 13, 21 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 34 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 13, 21, 34 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 34 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 21, 34 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 34 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 21, 34 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 34 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 21, 34 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 55 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 21, 34 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 55 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 21, 34, 55 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 55 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 34, 55 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 55 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 34, 55 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 55 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 34, 55 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 89 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 34, 55 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 89 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 34, 55, 89 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 89 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 55, 89 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 89 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 55, 89 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 89 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 55, 89 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 144 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 55, 89 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 144 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 55, 89, 144 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 144 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 89, 144 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 144 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 89, 144 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 144 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 89, 144 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 233 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 89, 144 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 233 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 89, 144, 233 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 233 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 144, 233 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 233 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 144, 233 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 233 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 144, 233 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 377 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 144, 233 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 377 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 144, 233, 377 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 377 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 233, 377 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 377 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 233, 377 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 377 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 233, 377 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 610 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 233, 377 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 610 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 233, 377, 610 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 610 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 377, 610 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 610 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 377, 610 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 610 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 377, 610 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 987 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 377, 610 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 987 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 377, 610, 987 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 987 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 610, 987 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 987 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 610, 987 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 987 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 610, 987 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1597 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 610, 987 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1597 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 610, 987, 1597 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1597 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 987, 1597 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1597 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 987, 1597 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1597 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 987, 1597 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2584 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 987, 1597 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2584 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 987, 1597, 2584 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2584 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1597, 2584 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2584 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1597, 2584 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2584 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1597, 2584 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4181 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1597, 2584 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4181 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1597, 2584, 4181 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4181 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 2584, 4181 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4181 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2584, 4181 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4181 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2584, 4181 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 6765 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2584, 4181 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 6765 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2584, 4181, 6765 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 6765 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 4181, 6765 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 6765 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4181, 6765 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 6765 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4181, 6765 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 10946 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4181, 6765 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 10946 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4181, 6765, 10946 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 10946 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 6765, 10946 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 10946 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 6765, 10946 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 10946 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 6765, 10946 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 17711 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 6765, 10946 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 17711 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 6765, 10946, 17711 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 17711 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 10946, 17711 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 17711 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 10946, 17711 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 17711 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 10946, 17711 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 28657 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 10946, 17711 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 28657 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 10946, 17711, 28657 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 28657 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 17711, 28657 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 28657 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 17711, 28657 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 28657 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 17711, 28657 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 46368 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 17711, 28657 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 46368 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 17711, 28657, 46368 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 46368 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 28657, 46368 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 46368 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 28657, 46368 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 46368 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 28657, 46368 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 75025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 28657, 46368 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 75025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 28657, 46368, 75025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 75025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 46368, 75025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 75025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 46368, 75025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 75025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 46368, 75025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 121393 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 46368, 75025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 121393 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 46368, 75025, 121393 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 121393 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 75025, 121393 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 121393 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 75025, 121393 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 121393 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 75025, 121393 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 196418 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 75025, 121393 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 196418 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 75025, 121393, 196418 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 196418 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 121393, 196418 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 196418 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 121393, 196418 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 196418 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 121393, 196418 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 317811 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 121393, 196418 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 317811 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 121393, 196418, 317811 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 317811 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 196418, 317811 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 317811 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 196418, 317811 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 317811 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 196418, 317811 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 514229 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 196418, 317811 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 514229 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 196418, 317811, 514229 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 514229 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 317811, 514229 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 514229 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 317811, 514229 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 514229 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 317811, 514229 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 832040 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 317811, 514229 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 832040 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 317811, 514229, 832040 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 832040 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 514229, 832040 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 832040 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 514229, 832040 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 832040 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 514229, 832040 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1346269 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 514229, 832040 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1346269 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 514229, 832040, 1346269 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1346269 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 832040, 1346269 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1346269 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 832040, 1346269 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1346269 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 832040, 1346269 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2178309 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 832040, 1346269 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2178309 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 832040, 1346269, 2178309 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2178309 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1346269, 2178309 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2178309 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1346269, 2178309 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2178309 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1346269, 2178309 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3524578 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1346269, 2178309 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3524578 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1346269, 2178309, 3524578 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3524578 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 2178309, 3524578 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3524578 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2178309, 3524578 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 3524578 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2178309, 3524578 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5702887 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2178309, 3524578 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5702887 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2178309, 3524578, 5702887 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5702887 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 3524578, 5702887 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5702887 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3524578, 5702887 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 5702887 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3524578, 5702887 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 9227465 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3524578, 5702887 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 9227465 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 3524578, 5702887, 9227465 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 9227465 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 5702887, 9227465 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 9227465 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5702887, 9227465 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 9227465 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5702887, 9227465 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 14930352 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5702887, 9227465 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 14930352 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 5702887, 9227465, 14930352 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 14930352 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 9227465, 14930352 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 14930352 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 9227465, 14930352 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 14930352 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 9227465, 14930352 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 24157817 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 9227465, 14930352 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 24157817 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 9227465, 14930352, 24157817 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 24157817 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 14930352, 24157817 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 24157817 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 14930352, 24157817 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 24157817 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 14930352, 24157817 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 39088169 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 14930352, 24157817 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 39088169 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 14930352, 24157817, 39088169 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 39088169 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 24157817, 39088169 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 39088169 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 24157817, 39088169 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 39088169 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 24157817, 39088169 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 63245986 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 24157817, 39088169 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 63245986 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 24157817, 39088169, 63245986 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 63245986 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 39088169, 63245986 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 63245986 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 39088169, 63245986 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 63245986 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 39088169, 63245986 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 102334155 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 39088169, 63245986 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 102334155 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 39088169, 63245986, 102334155 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 102334155 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 63245986, 102334155 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 102334155 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 63245986, 102334155 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 102334155 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 63245986, 102334155 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 165580141 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 63245986, 102334155 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 165580141 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 63245986, 102334155, 165580141 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 165580141 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 102334155, 165580141 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 165580141 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 102334155, 165580141 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 165580141 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 102334155, 165580141 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 267914296 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 102334155, 165580141 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 267914296 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 102334155, 165580141, 267914296 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 267914296 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 165580141, 267914296 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 267914296 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 165580141, 267914296 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 267914296 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 165580141, 267914296 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 433494437 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 165580141, 267914296 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 433494437 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 165580141, 267914296, 433494437 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 433494437 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 267914296, 433494437 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 433494437 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 267914296, 433494437 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 433494437 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 267914296, 433494437 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 701408733 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 267914296, 433494437 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 701408733 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 267914296, 433494437, 701408733 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 701408733 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 433494437, 701408733 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 701408733 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 433494437, 701408733 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 701408733 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 433494437, 701408733 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1134903170 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 433494437, 701408733 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1134903170 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 433494437, 701408733, 1134903170 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1134903170 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 701408733, 1134903170 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1134903170 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 701408733, 1134903170 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1134903170 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 701408733, 1134903170 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1836311903 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 701408733, 1134903170 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1836311903 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 701408733, 1134903170, 1836311903 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1836311903 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1134903170, 1836311903 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1836311903 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1134903170, 1836311903 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1836311903 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1134903170, 1836311903 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2971215073 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1134903170, 1836311903 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2971215073 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1134903170, 1836311903, 2971215073 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2971215073 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1836311903, 2971215073 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2971215073 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1836311903, 2971215073 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2971215073 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1836311903, 2971215073 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4807526976 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1836311903, 2971215073 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4807526976 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1836311903, 2971215073, 4807526976 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4807526976 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 2971215073, 4807526976 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4807526976 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2971215073, 4807526976 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4807526976 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2971215073, 4807526976 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 7778742049 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2971215073, 4807526976 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 7778742049 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 2971215073, 4807526976, 7778742049 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 7778742049 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 4807526976, 7778742049 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 7778742049 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4807526976, 7778742049 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 7778742049 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4807526976, 7778742049 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 12586269025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4807526976, 7778742049 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 12586269025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 4807526976, 7778742049, 12586269025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 12586269025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 7778742049, 12586269025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 12586269025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 7778742049, 12586269025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 12586269025 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 7778742049, 12586269025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 20365011074 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 7778742049, 12586269025 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 20365011074 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 7778742049, 12586269025, 20365011074 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 20365011074 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 12586269025, 20365011074 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 20365011074 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 12586269025, 20365011074 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 20365011074 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 12586269025, 20365011074 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 32951280099 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 12586269025, 20365011074 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 32951280099 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 12586269025, 20365011074, 32951280099 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 32951280099 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 20365011074, 32951280099 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 32951280099 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 20365011074, 32951280099 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 32951280099 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 20365011074, 32951280099 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 53316291173 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 20365011074, 32951280099 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 53316291173 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 20365011074, 32951280099, 53316291173 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 53316291173 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 32951280099, 53316291173 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 53316291173 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 32951280099, 53316291173 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 53316291173 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 32951280099, 53316291173 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 86267571272 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 32951280099, 53316291173 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 86267571272 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 32951280099, 53316291173, 86267571272 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 86267571272 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 53316291173, 86267571272 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 86267571272 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 53316291173, 86267571272 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 86267571272 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 53316291173, 86267571272 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 139583862445 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 53316291173, 86267571272 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 139583862445 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 53316291173, 86267571272, 139583862445 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 139583862445 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 86267571272, 139583862445 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 139583862445 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 86267571272, 139583862445 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 139583862445 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 86267571272, 139583862445 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 225851433717 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 86267571272, 139583862445 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 225851433717 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 86267571272, 139583862445, 225851433717 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 225851433717 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 139583862445, 225851433717 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 225851433717 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 139583862445, 225851433717 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 225851433717 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 139583862445, 225851433717 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 365435296162 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 139583862445, 225851433717 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 365435296162 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 139583862445, 225851433717, 365435296162 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 365435296162 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 225851433717, 365435296162 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 365435296162 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 225851433717, 365435296162 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 365435296162 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 225851433717, 365435296162 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 591286729879 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 225851433717, 365435296162 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 591286729879 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 225851433717, 365435296162, 591286729879 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 591286729879 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 365435296162, 591286729879 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 591286729879 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 365435296162, 591286729879 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 591286729879 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 365435296162, 591286729879 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 956722026041 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 365435296162, 591286729879 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 956722026041 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 365435296162, 591286729879, 956722026041 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 956722026041 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 591286729879, 956722026041 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 956722026041 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 591286729879, 956722026041 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 956722026041 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 591286729879, 956722026041 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1548008755920 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 591286729879, 956722026041 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1548008755920 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 591286729879, 956722026041, 1548008755920 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1548008755920 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 956722026041, 1548008755920 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1548008755920 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 956722026041, 1548008755920 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 1548008755920 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 956722026041, 1548008755920 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2504730781961 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 956722026041, 1548008755920 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2504730781961 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 8, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 956722026041, 1548008755920, 2504730781961 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2504730781961 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 4, + col: 0, + event: 'step_line', + heap: { '1': [ 'LIST', 1548008755920, 2504730781961 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2504730781961 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 5, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1548008755920, 2504730781961 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 2504730781961 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 6, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1548008755920, 2504730781961 ] } }, + { stdout: '1\n1\n2\n3\n5\n8\n13\n21\n34\n55\n89\n144\n233\n377\n610\n987\n1597\n2584\n4181\n6765\n10946\n17711\n28657\n46368\n75025\n121393\n196418\n317811\n514229\n832040\n1346269\n2178309\n3524578\n5702887\n9227465\n14930352\n24157817\n39088169\n63245986\n102334155\n165580141\n267914296\n433494437\n701408733\n1134903170\n1836311903\n2971215073\n4807526976\n7778742049\n12586269025\n20365011074\n32951280099\n53316291173\n86267571272\n139583862445\n225851433717\n365435296162\n591286729879\n956722026041\n1548008755920\n2504730781961\n', + func_name: '', + stack_to_render: [], + globals: { arr: [ 'REF', 1 ], tmp: 4052739537881 }, + ordered_globals: [ 'arr', 'tmp' ], + line: 7, + col: 2, + event: 'step_line', + heap: { '1': [ 'LIST', 1548008755920, 2504730781961 ] } }, + { event: 'instruction_limit_reached', + exception_msg: '(stopped after 300 steps to prevent possible infinite loop)' } ] } diff --git a/v4-cokapi/backends/javascript/tests/infinite-fibonacci.js b/v4-cokapi/backends/javascript/tests/infinite-fibonacci.js new file mode 100644 index 000000000..0558077c7 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/infinite-fibonacci.js @@ -0,0 +1,9 @@ +// Infinite Fibonacci!!! +var arr = [1, 1]; +console.log(arr[0]); +while (true) { + console.log(arr[arr.length-1]); + var tmp = arr[0] + arr[1]; + arr.push(tmp); + arr.shift(); +} diff --git a/v4-cokapi/backends/javascript/tests/infinite-loop.golden b/v4-cokapi/backends/javascript/tests/infinite-loop.golden new file mode 100644 index 000000000..81600341e --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/infinite-loop.golden @@ -0,0 +1,2704 @@ +{ code: 'var i = 0;\nwhile(true) {\n console.log(i++);\n}', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { i: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'i' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { i: 0 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n', + func_name: '', + stack_to_render: [], + globals: { i: 1 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n', + func_name: '', + stack_to_render: [], + globals: { i: 1 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n', + func_name: '', + stack_to_render: [], + globals: { i: 2 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n', + func_name: '', + stack_to_render: [], + globals: { i: 2 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { i: 3 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n', + func_name: '', + stack_to_render: [], + globals: { i: 3 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { i: 4 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n', + func_name: '', + stack_to_render: [], + globals: { i: 4 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n', + func_name: '', + stack_to_render: [], + globals: { i: 5 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n', + func_name: '', + stack_to_render: [], + globals: { i: 5 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n', + func_name: '', + stack_to_render: [], + globals: { i: 6 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n', + func_name: '', + stack_to_render: [], + globals: { i: 6 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n', + func_name: '', + stack_to_render: [], + globals: { i: 7 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n', + func_name: '', + stack_to_render: [], + globals: { i: 7 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n', + func_name: '', + stack_to_render: [], + globals: { i: 8 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n', + func_name: '', + stack_to_render: [], + globals: { i: 8 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n', + func_name: '', + stack_to_render: [], + globals: { i: 9 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n', + func_name: '', + stack_to_render: [], + globals: { i: 9 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n', + func_name: '', + stack_to_render: [], + globals: { i: 10 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n', + func_name: '', + stack_to_render: [], + globals: { i: 10 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n', + func_name: '', + stack_to_render: [], + globals: { i: 11 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n', + func_name: '', + stack_to_render: [], + globals: { i: 11 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n', + func_name: '', + stack_to_render: [], + globals: { i: 12 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n', + func_name: '', + stack_to_render: [], + globals: { i: 12 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n', + func_name: '', + stack_to_render: [], + globals: { i: 13 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n', + func_name: '', + stack_to_render: [], + globals: { i: 13 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n', + func_name: '', + stack_to_render: [], + globals: { i: 14 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n', + func_name: '', + stack_to_render: [], + globals: { i: 14 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n', + func_name: '', + stack_to_render: [], + globals: { i: 15 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n', + func_name: '', + stack_to_render: [], + globals: { i: 15 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n', + func_name: '', + stack_to_render: [], + globals: { i: 16 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n', + func_name: '', + stack_to_render: [], + globals: { i: 16 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n', + func_name: '', + stack_to_render: [], + globals: { i: 17 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n', + func_name: '', + stack_to_render: [], + globals: { i: 17 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n', + func_name: '', + stack_to_render: [], + globals: { i: 18 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n', + func_name: '', + stack_to_render: [], + globals: { i: 18 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n', + func_name: '', + stack_to_render: [], + globals: { i: 19 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n', + func_name: '', + stack_to_render: [], + globals: { i: 19 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n', + func_name: '', + stack_to_render: [], + globals: { i: 20 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n', + func_name: '', + stack_to_render: [], + globals: { i: 20 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n', + func_name: '', + stack_to_render: [], + globals: { i: 21 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n', + func_name: '', + stack_to_render: [], + globals: { i: 21 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n', + func_name: '', + stack_to_render: [], + globals: { i: 22 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n', + func_name: '', + stack_to_render: [], + globals: { i: 22 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n', + func_name: '', + stack_to_render: [], + globals: { i: 23 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n', + func_name: '', + stack_to_render: [], + globals: { i: 23 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n', + func_name: '', + stack_to_render: [], + globals: { i: 24 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n', + func_name: '', + stack_to_render: [], + globals: { i: 24 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n', + func_name: '', + stack_to_render: [], + globals: { i: 25 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n', + func_name: '', + stack_to_render: [], + globals: { i: 25 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n', + func_name: '', + stack_to_render: [], + globals: { i: 26 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n', + func_name: '', + stack_to_render: [], + globals: { i: 26 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n', + func_name: '', + stack_to_render: [], + globals: { i: 27 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n', + func_name: '', + stack_to_render: [], + globals: { i: 27 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n', + func_name: '', + stack_to_render: [], + globals: { i: 28 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n', + func_name: '', + stack_to_render: [], + globals: { i: 28 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n', + func_name: '', + stack_to_render: [], + globals: { i: 29 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n', + func_name: '', + stack_to_render: [], + globals: { i: 29 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n', + func_name: '', + stack_to_render: [], + globals: { i: 30 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n', + func_name: '', + stack_to_render: [], + globals: { i: 30 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n', + func_name: '', + stack_to_render: [], + globals: { i: 31 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n', + func_name: '', + stack_to_render: [], + globals: { i: 31 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n', + func_name: '', + stack_to_render: [], + globals: { i: 32 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n', + func_name: '', + stack_to_render: [], + globals: { i: 32 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n', + func_name: '', + stack_to_render: [], + globals: { i: 33 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n', + func_name: '', + stack_to_render: [], + globals: { i: 33 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n', + func_name: '', + stack_to_render: [], + globals: { i: 34 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n', + func_name: '', + stack_to_render: [], + globals: { i: 34 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n', + func_name: '', + stack_to_render: [], + globals: { i: 35 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n', + func_name: '', + stack_to_render: [], + globals: { i: 35 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n', + func_name: '', + stack_to_render: [], + globals: { i: 36 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n', + func_name: '', + stack_to_render: [], + globals: { i: 36 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n', + func_name: '', + stack_to_render: [], + globals: { i: 37 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n', + func_name: '', + stack_to_render: [], + globals: { i: 37 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n', + func_name: '', + stack_to_render: [], + globals: { i: 38 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n', + func_name: '', + stack_to_render: [], + globals: { i: 38 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n', + func_name: '', + stack_to_render: [], + globals: { i: 39 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n', + func_name: '', + stack_to_render: [], + globals: { i: 39 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n', + func_name: '', + stack_to_render: [], + globals: { i: 40 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n', + func_name: '', + stack_to_render: [], + globals: { i: 40 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n', + func_name: '', + stack_to_render: [], + globals: { i: 41 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n', + func_name: '', + stack_to_render: [], + globals: { i: 41 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n', + func_name: '', + stack_to_render: [], + globals: { i: 42 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n', + func_name: '', + stack_to_render: [], + globals: { i: 42 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n', + func_name: '', + stack_to_render: [], + globals: { i: 43 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n', + func_name: '', + stack_to_render: [], + globals: { i: 43 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n', + func_name: '', + stack_to_render: [], + globals: { i: 44 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n', + func_name: '', + stack_to_render: [], + globals: { i: 44 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n', + func_name: '', + stack_to_render: [], + globals: { i: 45 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n', + func_name: '', + stack_to_render: [], + globals: { i: 45 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n', + func_name: '', + stack_to_render: [], + globals: { i: 46 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n', + func_name: '', + stack_to_render: [], + globals: { i: 46 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n', + func_name: '', + stack_to_render: [], + globals: { i: 47 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n', + func_name: '', + stack_to_render: [], + globals: { i: 47 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n', + func_name: '', + stack_to_render: [], + globals: { i: 48 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n', + func_name: '', + stack_to_render: [], + globals: { i: 48 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n', + func_name: '', + stack_to_render: [], + globals: { i: 49 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n', + func_name: '', + stack_to_render: [], + globals: { i: 49 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n', + func_name: '', + stack_to_render: [], + globals: { i: 50 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n', + func_name: '', + stack_to_render: [], + globals: { i: 50 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n', + func_name: '', + stack_to_render: [], + globals: { i: 51 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n', + func_name: '', + stack_to_render: [], + globals: { i: 51 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n', + func_name: '', + stack_to_render: [], + globals: { i: 52 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n', + func_name: '', + stack_to_render: [], + globals: { i: 52 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n', + func_name: '', + stack_to_render: [], + globals: { i: 53 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n', + func_name: '', + stack_to_render: [], + globals: { i: 53 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n', + func_name: '', + stack_to_render: [], + globals: { i: 54 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n', + func_name: '', + stack_to_render: [], + globals: { i: 54 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n', + func_name: '', + stack_to_render: [], + globals: { i: 55 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n', + func_name: '', + stack_to_render: [], + globals: { i: 55 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n', + func_name: '', + stack_to_render: [], + globals: { i: 56 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n', + func_name: '', + stack_to_render: [], + globals: { i: 56 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n', + func_name: '', + stack_to_render: [], + globals: { i: 57 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n', + func_name: '', + stack_to_render: [], + globals: { i: 57 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n', + func_name: '', + stack_to_render: [], + globals: { i: 58 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n', + func_name: '', + stack_to_render: [], + globals: { i: 58 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n', + func_name: '', + stack_to_render: [], + globals: { i: 59 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n', + func_name: '', + stack_to_render: [], + globals: { i: 59 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n', + func_name: '', + stack_to_render: [], + globals: { i: 60 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n', + func_name: '', + stack_to_render: [], + globals: { i: 60 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n', + func_name: '', + stack_to_render: [], + globals: { i: 61 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n', + func_name: '', + stack_to_render: [], + globals: { i: 61 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n', + func_name: '', + stack_to_render: [], + globals: { i: 62 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n', + func_name: '', + stack_to_render: [], + globals: { i: 62 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n', + func_name: '', + stack_to_render: [], + globals: { i: 63 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n', + func_name: '', + stack_to_render: [], + globals: { i: 63 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n', + func_name: '', + stack_to_render: [], + globals: { i: 64 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n', + func_name: '', + stack_to_render: [], + globals: { i: 64 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n', + func_name: '', + stack_to_render: [], + globals: { i: 65 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n', + func_name: '', + stack_to_render: [], + globals: { i: 65 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n', + func_name: '', + stack_to_render: [], + globals: { i: 66 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n', + func_name: '', + stack_to_render: [], + globals: { i: 66 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n', + func_name: '', + stack_to_render: [], + globals: { i: 67 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n', + func_name: '', + stack_to_render: [], + globals: { i: 67 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n', + func_name: '', + stack_to_render: [], + globals: { i: 68 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n', + func_name: '', + stack_to_render: [], + globals: { i: 68 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n', + func_name: '', + stack_to_render: [], + globals: { i: 69 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n', + func_name: '', + stack_to_render: [], + globals: { i: 69 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n', + func_name: '', + stack_to_render: [], + globals: { i: 70 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n', + func_name: '', + stack_to_render: [], + globals: { i: 70 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n', + func_name: '', + stack_to_render: [], + globals: { i: 71 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n', + func_name: '', + stack_to_render: [], + globals: { i: 71 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n', + func_name: '', + stack_to_render: [], + globals: { i: 72 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n', + func_name: '', + stack_to_render: [], + globals: { i: 72 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n', + func_name: '', + stack_to_render: [], + globals: { i: 73 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n', + func_name: '', + stack_to_render: [], + globals: { i: 73 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n', + func_name: '', + stack_to_render: [], + globals: { i: 74 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n', + func_name: '', + stack_to_render: [], + globals: { i: 74 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n', + func_name: '', + stack_to_render: [], + globals: { i: 75 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n', + func_name: '', + stack_to_render: [], + globals: { i: 75 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n', + func_name: '', + stack_to_render: [], + globals: { i: 76 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n', + func_name: '', + stack_to_render: [], + globals: { i: 76 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n', + func_name: '', + stack_to_render: [], + globals: { i: 77 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n', + func_name: '', + stack_to_render: [], + globals: { i: 77 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n', + func_name: '', + stack_to_render: [], + globals: { i: 78 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n', + func_name: '', + stack_to_render: [], + globals: { i: 78 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n', + func_name: '', + stack_to_render: [], + globals: { i: 79 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n', + func_name: '', + stack_to_render: [], + globals: { i: 79 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n', + func_name: '', + stack_to_render: [], + globals: { i: 80 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n', + func_name: '', + stack_to_render: [], + globals: { i: 80 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n', + func_name: '', + stack_to_render: [], + globals: { i: 81 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n', + func_name: '', + stack_to_render: [], + globals: { i: 81 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n', + func_name: '', + stack_to_render: [], + globals: { i: 82 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n', + func_name: '', + stack_to_render: [], + globals: { i: 82 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n', + func_name: '', + stack_to_render: [], + globals: { i: 83 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n', + func_name: '', + stack_to_render: [], + globals: { i: 83 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n', + func_name: '', + stack_to_render: [], + globals: { i: 84 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n', + func_name: '', + stack_to_render: [], + globals: { i: 84 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n', + func_name: '', + stack_to_render: [], + globals: { i: 85 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n', + func_name: '', + stack_to_render: [], + globals: { i: 85 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n', + func_name: '', + stack_to_render: [], + globals: { i: 86 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n', + func_name: '', + stack_to_render: [], + globals: { i: 86 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n', + func_name: '', + stack_to_render: [], + globals: { i: 87 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n', + func_name: '', + stack_to_render: [], + globals: { i: 87 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n', + func_name: '', + stack_to_render: [], + globals: { i: 88 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n', + func_name: '', + stack_to_render: [], + globals: { i: 88 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n', + func_name: '', + stack_to_render: [], + globals: { i: 89 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n', + func_name: '', + stack_to_render: [], + globals: { i: 89 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n', + func_name: '', + stack_to_render: [], + globals: { i: 90 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n', + func_name: '', + stack_to_render: [], + globals: { i: 90 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n', + func_name: '', + stack_to_render: [], + globals: { i: 91 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n', + func_name: '', + stack_to_render: [], + globals: { i: 91 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n', + func_name: '', + stack_to_render: [], + globals: { i: 92 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n', + func_name: '', + stack_to_render: [], + globals: { i: 92 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n', + func_name: '', + stack_to_render: [], + globals: { i: 93 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n', + func_name: '', + stack_to_render: [], + globals: { i: 93 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n', + func_name: '', + stack_to_render: [], + globals: { i: 94 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n', + func_name: '', + stack_to_render: [], + globals: { i: 94 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n', + func_name: '', + stack_to_render: [], + globals: { i: 95 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n', + func_name: '', + stack_to_render: [], + globals: { i: 95 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n', + func_name: '', + stack_to_render: [], + globals: { i: 96 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n', + func_name: '', + stack_to_render: [], + globals: { i: 96 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n', + func_name: '', + stack_to_render: [], + globals: { i: 97 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n', + func_name: '', + stack_to_render: [], + globals: { i: 97 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n', + func_name: '', + stack_to_render: [], + globals: { i: 98 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n', + func_name: '', + stack_to_render: [], + globals: { i: 98 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n', + func_name: '', + stack_to_render: [], + globals: { i: 99 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n', + func_name: '', + stack_to_render: [], + globals: { i: 99 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n', + func_name: '', + stack_to_render: [], + globals: { i: 100 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n', + func_name: '', + stack_to_render: [], + globals: { i: 100 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n', + func_name: '', + stack_to_render: [], + globals: { i: 101 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n', + func_name: '', + stack_to_render: [], + globals: { i: 101 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n', + func_name: '', + stack_to_render: [], + globals: { i: 102 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n', + func_name: '', + stack_to_render: [], + globals: { i: 102 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n', + func_name: '', + stack_to_render: [], + globals: { i: 103 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n', + func_name: '', + stack_to_render: [], + globals: { i: 103 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n', + func_name: '', + stack_to_render: [], + globals: { i: 104 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n', + func_name: '', + stack_to_render: [], + globals: { i: 104 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n', + func_name: '', + stack_to_render: [], + globals: { i: 105 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n', + func_name: '', + stack_to_render: [], + globals: { i: 105 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n', + func_name: '', + stack_to_render: [], + globals: { i: 106 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n', + func_name: '', + stack_to_render: [], + globals: { i: 106 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n', + func_name: '', + stack_to_render: [], + globals: { i: 107 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n', + func_name: '', + stack_to_render: [], + globals: { i: 107 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n', + func_name: '', + stack_to_render: [], + globals: { i: 108 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n', + func_name: '', + stack_to_render: [], + globals: { i: 108 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n', + func_name: '', + stack_to_render: [], + globals: { i: 109 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n', + func_name: '', + stack_to_render: [], + globals: { i: 109 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n', + func_name: '', + stack_to_render: [], + globals: { i: 110 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n', + func_name: '', + stack_to_render: [], + globals: { i: 110 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n', + func_name: '', + stack_to_render: [], + globals: { i: 111 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n', + func_name: '', + stack_to_render: [], + globals: { i: 111 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n', + func_name: '', + stack_to_render: [], + globals: { i: 112 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n', + func_name: '', + stack_to_render: [], + globals: { i: 112 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n', + func_name: '', + stack_to_render: [], + globals: { i: 113 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n', + func_name: '', + stack_to_render: [], + globals: { i: 113 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n', + func_name: '', + stack_to_render: [], + globals: { i: 114 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n', + func_name: '', + stack_to_render: [], + globals: { i: 114 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n', + func_name: '', + stack_to_render: [], + globals: { i: 115 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n', + func_name: '', + stack_to_render: [], + globals: { i: 115 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n', + func_name: '', + stack_to_render: [], + globals: { i: 116 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n', + func_name: '', + stack_to_render: [], + globals: { i: 116 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n', + func_name: '', + stack_to_render: [], + globals: { i: 117 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n', + func_name: '', + stack_to_render: [], + globals: { i: 117 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n', + func_name: '', + stack_to_render: [], + globals: { i: 118 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n', + func_name: '', + stack_to_render: [], + globals: { i: 118 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n', + func_name: '', + stack_to_render: [], + globals: { i: 119 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n', + func_name: '', + stack_to_render: [], + globals: { i: 119 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n', + func_name: '', + stack_to_render: [], + globals: { i: 120 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n', + func_name: '', + stack_to_render: [], + globals: { i: 120 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n', + func_name: '', + stack_to_render: [], + globals: { i: 121 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n', + func_name: '', + stack_to_render: [], + globals: { i: 121 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n', + func_name: '', + stack_to_render: [], + globals: { i: 122 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n', + func_name: '', + stack_to_render: [], + globals: { i: 122 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n', + func_name: '', + stack_to_render: [], + globals: { i: 123 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n', + func_name: '', + stack_to_render: [], + globals: { i: 123 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n', + func_name: '', + stack_to_render: [], + globals: { i: 124 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n', + func_name: '', + stack_to_render: [], + globals: { i: 124 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n', + func_name: '', + stack_to_render: [], + globals: { i: 125 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n', + func_name: '', + stack_to_render: [], + globals: { i: 125 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n', + func_name: '', + stack_to_render: [], + globals: { i: 126 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n', + func_name: '', + stack_to_render: [], + globals: { i: 126 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n', + func_name: '', + stack_to_render: [], + globals: { i: 127 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n', + func_name: '', + stack_to_render: [], + globals: { i: 127 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n', + func_name: '', + stack_to_render: [], + globals: { i: 128 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n', + func_name: '', + stack_to_render: [], + globals: { i: 128 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n', + func_name: '', + stack_to_render: [], + globals: { i: 129 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n', + func_name: '', + stack_to_render: [], + globals: { i: 129 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n', + func_name: '', + stack_to_render: [], + globals: { i: 130 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n', + func_name: '', + stack_to_render: [], + globals: { i: 130 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n', + func_name: '', + stack_to_render: [], + globals: { i: 131 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n', + func_name: '', + stack_to_render: [], + globals: { i: 131 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n', + func_name: '', + stack_to_render: [], + globals: { i: 132 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n', + func_name: '', + stack_to_render: [], + globals: { i: 132 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n', + func_name: '', + stack_to_render: [], + globals: { i: 133 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n', + func_name: '', + stack_to_render: [], + globals: { i: 133 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n', + func_name: '', + stack_to_render: [], + globals: { i: 134 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n', + func_name: '', + stack_to_render: [], + globals: { i: 134 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n', + func_name: '', + stack_to_render: [], + globals: { i: 135 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n', + func_name: '', + stack_to_render: [], + globals: { i: 135 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n', + func_name: '', + stack_to_render: [], + globals: { i: 136 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n', + func_name: '', + stack_to_render: [], + globals: { i: 136 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n', + func_name: '', + stack_to_render: [], + globals: { i: 137 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n', + func_name: '', + stack_to_render: [], + globals: { i: 137 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n', + func_name: '', + stack_to_render: [], + globals: { i: 138 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n', + func_name: '', + stack_to_render: [], + globals: { i: 138 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n', + func_name: '', + stack_to_render: [], + globals: { i: 139 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n', + func_name: '', + stack_to_render: [], + globals: { i: 139 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n', + func_name: '', + stack_to_render: [], + globals: { i: 140 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n', + func_name: '', + stack_to_render: [], + globals: { i: 140 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n', + func_name: '', + stack_to_render: [], + globals: { i: 141 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n', + func_name: '', + stack_to_render: [], + globals: { i: 141 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n', + func_name: '', + stack_to_render: [], + globals: { i: 142 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n', + func_name: '', + stack_to_render: [], + globals: { i: 142 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n', + func_name: '', + stack_to_render: [], + globals: { i: 143 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n', + func_name: '', + stack_to_render: [], + globals: { i: 143 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n', + func_name: '', + stack_to_render: [], + globals: { i: 144 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n', + func_name: '', + stack_to_render: [], + globals: { i: 144 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n', + func_name: '', + stack_to_render: [], + globals: { i: 145 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n', + func_name: '', + stack_to_render: [], + globals: { i: 145 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n', + func_name: '', + stack_to_render: [], + globals: { i: 146 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n', + func_name: '', + stack_to_render: [], + globals: { i: 146 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n', + func_name: '', + stack_to_render: [], + globals: { i: 147 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n', + func_name: '', + stack_to_render: [], + globals: { i: 147 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n', + func_name: '', + stack_to_render: [], + globals: { i: 148 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n', + func_name: '', + stack_to_render: [], + globals: { i: 148 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n', + func_name: '', + stack_to_render: [], + globals: { i: 149 }, + ordered_globals: [ 'i' ], + line: 2, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n', + func_name: '', + stack_to_render: [], + globals: { i: 149 }, + ordered_globals: [ 'i' ], + line: 3, + col: 2, + event: 'step_line', + heap: {} }, + { event: 'instruction_limit_reached', + exception_msg: '(stopped after 300 steps to prevent possible infinite loop)' } ] } diff --git a/v4-cokapi/backends/javascript/tests/infinite-loop.js b/v4-cokapi/backends/javascript/tests/infinite-loop.js new file mode 100644 index 000000000..49e83d082 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/infinite-loop.js @@ -0,0 +1,4 @@ +var i = 0; +while(true) { + console.log(i++); +} diff --git a/v4-cokapi/backends/javascript/tests/inheritance.golden b/v4-cokapi/backends/javascript/tests/inheritance.golden new file mode 100644 index 000000000..58cfe1bcc --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/inheritance.golden @@ -0,0 +1,1152 @@ +{ code: '// Adapted from Effective JavaScript\nfunction Actor(x, y) {\n this.x = x;\n this.y = y;\n}\n\nActor.prototype.moveTo = function(x, y) {\n this.x = x;\n this.y = y;\n}\n\nfunction SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}\n\nSpaceShip.prototype = Object.create(Actor.prototype); // inherit!\nSpaceShip.prototype.type = "spaceship";\nSpaceShip.prototype.scorePoint = function() {\n this.points++;\n}\n\nvar s = new SpaceShip(10, 20);\ns.moveTo(30, 40);\ns.scorePoint();\ns.scorePoint();', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 7, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 17, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + null, + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 17, + col: 20, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + null, + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 18, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': [ 'INSTANCE', '', [ '__proto__', [ 'REF', 3 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 19, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ '__proto__', [ 'REF', 3 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 23, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'SpaceShip', + stack_to_render: + [ { func_name: 'SpaceShip (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'SpaceShip (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } } ], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 13, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': [ 'INSTANCE', '', [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: 'Actor', + stack_to_render: + [ { func_name: 'SpaceShip (constructor)', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'SpaceShip (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } }, + { func_name: 'Actor', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Actor_f3', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } } ], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 3, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': [ 'INSTANCE', '', [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: 'Actor', + stack_to_render: + [ { func_name: 'SpaceShip (constructor)', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'SpaceShip (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } }, + { func_name: 'Actor', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Actor_f3', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } } ], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 4, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': [ 'INSTANCE', '', [ 'x', 10 ], [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: 'Actor', + stack_to_render: + [ { func_name: 'SpaceShip (constructor)', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'SpaceShip (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } }, + { func_name: 'Actor', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'Actor_f3', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: + { this: [ 'REF', 7 ], + x: 10, + y: 20, + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 4, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 10 ], + [ 'y', 20 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: 'SpaceShip', + stack_to_render: + [ { func_name: 'SpaceShip (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'SpaceShip (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20 } } ], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 14, + col: 14, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 10 ], + [ 'y', 20 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: 'SpaceShip', + stack_to_render: + [ { func_name: 'SpaceShip (constructor)', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'SpaceShip (constructor)_f2', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: { this: [ 'REF', 7 ], x: 10, y: 20, __return__: [ 'REF', 7 ] } } ], + globals: + { Actor: [ 'REF', 1 ], + SpaceShip: [ 'REF', 2 ], + s: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 14, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 10 ], + [ 'y', 20 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 24, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 10 ], + [ 'y', 20 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 30, y: 40 } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 8, + col: 9, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 10 ], + [ 'y', 20 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'x', 'y' ], + encoded_locals: { this: [ 'REF', 7 ], x: 30, y: 40 } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 9, + col: 9, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 20 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 4, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f4', + ordered_varnames: [ 'this', 'x', 'y', '__return__' ], + encoded_locals: + { this: [ 'REF', 7 ], + x: 30, + y: 40, + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 9, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 25, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f5', + ordered_varnames: [ 'this' ], + encoded_locals: { this: [ 'REF', 7 ] } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 20, + col: 6, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 0 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 5, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f5', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: + { this: [ 'REF', 7 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 20, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 1 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 26, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 1 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'this' ], + encoded_locals: { this: [ 'REF', 7 ] } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 20, + col: 6, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 1 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: + [ { func_name: '', + frame_id: 6, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: '_f6', + ordered_varnames: [ 'this', '__return__' ], + encoded_locals: + { this: [ 'REF', 7 ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 20, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 2 ], + [ '__proto__', [ 'REF', 5 ] ] ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { Actor: [ 'REF', 1 ], SpaceShip: [ 'REF', 2 ], s: [ 'REF', 7 ] }, + ordered_globals: [ 'Actor', 'SpaceShip', 's' ], + line: 26, + col: 15, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'Actor', + 'function Actor(x, y) {\n this.x = x;\n this.y = y;\n}', + [ [ 'prototype', [ 'REF', 3 ] ] ], + null ], + '2': + [ 'JS_FUNCTION', + 'SpaceShip', + 'function SpaceShip(x, y) {\n Actor.call(this, x, y);\n this.points = 0;\n}', + [ [ 'prototype', [ 'REF', 5 ] ] ], + null ], + '3': [ 'INSTANCE', '', [ 'moveTo', [ 'REF', 4 ] ] ], + '4': + [ 'JS_FUNCTION', + '', + 'function (x, y) {\n this.x = x;\n this.y = y;\n}', + null, + null ], + '5': + [ 'INSTANCE', + '', + [ 'type', 'spaceship' ], + [ 'scorePoint', [ 'REF', 6 ] ], + [ '__proto__', [ 'REF', 3 ] ] ], + '6': + [ 'JS_FUNCTION', + '', + 'function () {\n this.points++;\n}', + null, + null ], + '7': + [ 'INSTANCE', + '', + [ 'x', 30 ], + [ 'y', 40 ], + [ 'points', 2 ], + [ '__proto__', [ 'REF', 5 ] ] ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/inheritance.js b/v4-cokapi/backends/javascript/tests/inheritance.js new file mode 100644 index 000000000..67b12f2a5 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/inheritance.js @@ -0,0 +1,26 @@ +// Adapted from Effective JavaScript +function Actor(x, y) { + this.x = x; + this.y = y; +} + +Actor.prototype.moveTo = function(x, y) { + this.x = x; + this.y = y; +} + +function SpaceShip(x, y) { + Actor.call(this, x, y); + this.points = 0; +} + +SpaceShip.prototype = Object.create(Actor.prototype); // inherit! +SpaceShip.prototype.type = "spaceship"; +SpaceShip.prototype.scorePoint = function() { + this.points++; +} + +var s = new SpaceShip(10, 20); +s.moveTo(30, 40); +s.scorePoint(); +s.scorePoint(); diff --git a/v4-cokapi/backends/javascript/tests/no-prototype-object.golden b/v4-cokapi/backends/javascript/tests/no-prototype-object.golden new file mode 100644 index 000000000..6b4524b85 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/no-prototype-object.golden @@ -0,0 +1,29 @@ +{ code: 'var y = Object.create(null);\nconsole.log(y);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { y: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'y' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { y: [ 'REF', 1 ] }, + ordered_globals: [ 'y' ], + line: 2, + col: 0, + event: 'step_line', + heap: { '1': [ 'INSTANCE', '' ] } }, + { stdout: '{}\n', + func_name: '', + stack_to_render: [], + globals: { y: [ 'REF', 1 ] }, + ordered_globals: [ 'y' ], + line: 2, + col: 15, + event: 'step_line', + heap: { '1': [ 'INSTANCE', '' ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/no-prototype-object.js b/v4-cokapi/backends/javascript/tests/no-prototype-object.js new file mode 100644 index 000000000..bfc7fb539 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/no-prototype-object.js @@ -0,0 +1,2 @@ +var y = Object.create(null); +console.log(y); diff --git a/v4-cokapi/backends/javascript/tests/not-enough-args.golden b/v4-cokapi/backends/javascript/tests/not-enough-args.golden new file mode 100644 index 000000000..70fb441f4 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/not-enough-args.golden @@ -0,0 +1,84 @@ +{ code: 'function foo(a, b, c) {\n console.log(a, b, c);\n}\n\nfoo(1, 2);', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(a, b, c) {\n console.log(a, b, c);\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'a', 'b', 'c' ], + encoded_locals: { a: 1, b: 2, c: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 2, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(a, b, c) {\n console.log(a, b, c);\n}', + null, + null ] } }, + { stdout: '1 2 undefined\n', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'a', 'b', 'c', '__return__' ], + encoded_locals: + { a: 1, + b: 2, + c: [ 'JS_SPECIAL_VAL', 'undefined' ], + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 2, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(a, b, c) {\n console.log(a, b, c);\n}', + null, + null ] } }, + { stdout: '1 2 undefined\n', + func_name: '', + stack_to_render: [], + globals: { foo: [ 'REF', 1 ] }, + ordered_globals: [ 'foo' ], + line: 5, + col: 10, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo(a, b, c) {\n console.log(a, b, c);\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/not-enough-args.js b/v4-cokapi/backends/javascript/tests/not-enough-args.js new file mode 100644 index 000000000..fdc600e03 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/not-enough-args.js @@ -0,0 +1,5 @@ +function foo(a, b, c) { + console.log(a, b, c); +} + +foo(1, 2); diff --git a/v4-cokapi/backends/javascript/tests/num-literal.golden b/v4-cokapi/backends/javascript/tests/num-literal.golden new file mode 100644 index 000000000..0fe465047 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/num-literal.golden @@ -0,0 +1,20 @@ +{ code: '123', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: {}, + ordered_globals: [], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: {}, + ordered_globals: [], + line: 1, + col: 3, + event: 'step_line', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/num-literal.js b/v4-cokapi/backends/javascript/tests/num-literal.js new file mode 100644 index 000000000..190a18037 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/num-literal.js @@ -0,0 +1 @@ +123 diff --git a/v4-cokapi/backends/javascript/tests/strict-runtime-error.golden b/v4-cokapi/backends/javascript/tests/strict-runtime-error.golden new file mode 100644 index 000000000..d5ee9d821 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/strict-runtime-error.golden @@ -0,0 +1,30 @@ +{ code: 'var x = 5;\ny = 5; // error in strict mode\nz = x + y;', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x' ], + line: 1, + col: 0, + event: 'step_line', + heap: {} }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 5 }, + ordered_globals: [ 'x' ], + line: 2, + col: 2, + event: 'step_line', + heap: {} }, + { exception_msg: 'ReferenceError: y is not defined', + stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 5 }, + ordered_globals: [ 'x' ], + line: 2, + col: 2, + event: 'exception', + heap: {} } ] } diff --git a/v4-cokapi/backends/javascript/tests/strict-runtime-error.js b/v4-cokapi/backends/javascript/tests/strict-runtime-error.js new file mode 100644 index 000000000..507f488aa --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/strict-runtime-error.js @@ -0,0 +1,3 @@ +var x = 5; +y = 5; // error in strict mode +z = x + y; diff --git a/v4-cokapi/backends/javascript/tests/syntax-error.golden b/v4-cokapi/backends/javascript/tests/syntax-error.golden new file mode 100644 index 000000000..c0ab2f239 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/syntax-error.golden @@ -0,0 +1,6 @@ +{ code: 'var x = 5;\nif (x) {\n console.log(x);\nelse {\n console.log(\'crapo\');\n}', + trace: + [ { event: 'uncaught_exception', + exception_msg: 'Unexpected token else', + line: 4, + col: 1 } ] } diff --git a/v4-cokapi/backends/javascript/tests/syntax-error.js b/v4-cokapi/backends/javascript/tests/syntax-error.js new file mode 100644 index 000000000..0a96c2fd3 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/syntax-error.js @@ -0,0 +1,6 @@ +var x = 5; +if (x) { + console.log(x); +else { + console.log('crapo'); +} diff --git a/v4-cokapi/backends/javascript/tests/syntax-error2.golden b/v4-cokapi/backends/javascript/tests/syntax-error2.golden new file mode 100644 index 000000000..7a6a6b6fa --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/syntax-error2.golden @@ -0,0 +1,6 @@ +{ code: 'function Vector(x, y) {\n this.x = x;\n this.y = y;\n}\n\nVector.prototype.plus = xxxfunction(other) {\n return new Vector(this.x + other.x, this.y + other.y);\n};\n\nVector.prototype.minus = function(other) {\n return new Vector(this.x - other.x, this.y - other.y);\n};\n\nObject.defineProperty(Vector.prototype, "length", {\n get: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n});\n\nconsole.log(new Vector(1, 2).plus(new Vector(2, 3)));\n// → Vector{x: 3, y: 5}\nconsole.log(new Vector(1, 2).minus(new Vector(2, 3)));\n// → Vector{x: -1, y: -1}\nconsole.log(new Vector(3, 4).length);\n// → 5', + trace: + [ { event: 'uncaught_exception', + exception_msg: 'Unexpected token {', + line: 6, + col: 44 } ] } diff --git a/v4-cokapi/backends/javascript/tests/syntax-error2.js b/v4-cokapi/backends/javascript/tests/syntax-error2.js new file mode 100644 index 000000000..6204b845f --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/syntax-error2.js @@ -0,0 +1,25 @@ +function Vector(x, y) { + this.x = x; + this.y = y; +} + +Vector.prototype.plus = xxxfunction(other) { + return new Vector(this.x + other.x, this.y + other.y); +}; + +Vector.prototype.minus = function(other) { + return new Vector(this.x - other.x, this.y - other.y); +}; + +Object.defineProperty(Vector.prototype, "length", { + get: function() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } +}); + +console.log(new Vector(1, 2).plus(new Vector(2, 3))); +// → Vector{x: 3, y: 5} +console.log(new Vector(1, 2).minus(new Vector(2, 3))); +// → Vector{x: -1, y: -1} +console.log(new Vector(3, 4).length); +// → 5 diff --git a/v4-cokapi/backends/javascript/tests/var-shadowing.golden b/v4-cokapi/backends/javascript/tests/var-shadowing.golden new file mode 100644 index 000000000..c189a1323 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/var-shadowing.golden @@ -0,0 +1,299 @@ +{ code: 'var x = 10; // global\nfunction foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}\nfoo();', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: [ 'JS_SPECIAL_VAL', 'undefined' ], foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 1, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 11, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 10 } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 9, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 10 } }, + { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x' ], + encoded_locals: { y: [ 'JS_SPECIAL_VAL', 'undefined' ], 'parent:x': 10 } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 5, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 10 } }, + { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x' ], + encoded_locals: { y: 10, 'parent:x': 10 } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 20 } }, + { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x' ], + encoded_locals: { y: 10, 'parent:x': 20 } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 7, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '20 10\n', + func_name: 'bar', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: false, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 20 } }, + { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x', '__return__' ], + encoded_locals: + { y: 10, + 'parent:x': 20, + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 7, + col: 2, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '20 10\n', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x', '__return__' ], + encoded_locals: + { bar: [ 'REF', 2 ], + x: 20, + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 10, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '20 10\n', + func_name: '', + stack_to_render: [], + globals: { x: 10, foo: [ 'REF', 1 ] }, + ordered_globals: [ 'x', 'foo' ], + line: 11, + col: 6, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n bar();\n}', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/var-shadowing.js b/v4-cokapi/backends/javascript/tests/var-shadowing.js new file mode 100644 index 000000000..84f14184b --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/var-shadowing.js @@ -0,0 +1,11 @@ +var x = 10; // global +function foo() { + var x = 10; + function bar() { + var y = x; + x *= 2; + console.log(x, y); + } + bar(); +} +foo(); diff --git a/v4-cokapi/backends/javascript/tests/var-shadowing2.golden b/v4-cokapi/backends/javascript/tests/var-shadowing2.golden new file mode 100644 index 000000000..ba377214b --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/var-shadowing2.golden @@ -0,0 +1,302 @@ +{ code: 'var x = 10; // global\nfunction foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}\nvar b = foo();\n// x inside of bar should be the x in foo, *not* the global x\nb();', + trace: + [ { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { x: [ 'JS_SPECIAL_VAL', 'undefined' ], + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 1, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: + { x: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 11, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: + { x: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 3, + col: 2, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 10 } } ], + globals: + { x: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 9, + col: 2, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'foo', + stack_to_render: + [ { func_name: 'foo', + frame_id: 2, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'foo_f2', + ordered_varnames: [ 'bar', 'x', '__return__' ], + encoded_locals: { bar: [ 'REF', 2 ], x: 10, __return__: [ 'REF', 2 ] } } ], + globals: + { x: 10, + foo: [ 'REF', 1 ], + b: [ 'JS_SPECIAL_VAL', 'undefined' ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 9, + col: 0, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: '', + stack_to_render: [], + globals: { x: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 13, + col: 0, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x' ], + encoded_locals: { y: [ 'JS_SPECIAL_VAL', 'undefined' ], 'parent:x': 10 } } ], + globals: { x: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 5, + col: 4, + event: 'call', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x' ], + encoded_locals: { y: 10, 'parent:x': 10 } } ], + globals: { x: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 6, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x' ], + encoded_locals: { y: 10, 'parent:x': 20 } } ], + globals: { x: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 7, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '20 10\n', + func_name: 'bar', + stack_to_render: + [ { func_name: 'bar', + frame_id: 3, + is_highlighted: true, + is_parent: false, + is_zombie: false, + parent_frame_id_list: [], + unique_hash: 'bar_f3', + ordered_varnames: [ 'y', 'parent:x', '__return__' ], + encoded_locals: + { y: 10, + 'parent:x': 20, + __return__: [ 'JS_SPECIAL_VAL', 'undefined' ] } } ], + globals: { x: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 7, + col: 2, + event: 'return', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } }, + { stdout: '20 10\n', + func_name: '', + stack_to_render: [], + globals: { x: 10, foo: [ 'REF', 1 ], b: [ 'REF', 2 ] }, + ordered_globals: [ 'x', 'foo', 'b' ], + line: 13, + col: 4, + event: 'step_line', + heap: + { '1': + [ 'JS_FUNCTION', + 'foo', + 'function foo() {\n var x = 10;\n function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }\n return bar;\n}', + null, + null ], + '2': + [ 'JS_FUNCTION', + 'bar', + ' function bar() {\n var y = x;\n x *= 2;\n console.log(x, y);\n }', + null, + null ] } } ] } diff --git a/v4-cokapi/backends/javascript/tests/var-shadowing2.js b/v4-cokapi/backends/javascript/tests/var-shadowing2.js new file mode 100644 index 000000000..0b4853d51 --- /dev/null +++ b/v4-cokapi/backends/javascript/tests/var-shadowing2.js @@ -0,0 +1,13 @@ +var x = 10; // global +function foo() { + var x = 10; + function bar() { + var y = x; + x *= 2; + console.log(x, y); + } + return bar; +} +var b = foo(); +// x inside of bar should be the x in foo, *not* the global x +b(); diff --git a/v4-cokapi/backends/javascript/v8-reference-code/include/v8-debug.h b/v4-cokapi/backends/javascript/v8-reference-code/include/v8-debug.h new file mode 100644 index 000000000..6abf4e095 --- /dev/null +++ b/v4-cokapi/backends/javascript/v8-reference-code/include/v8-debug.h @@ -0,0 +1,270 @@ +// Copyright 2008 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_V8_DEBUG_H_ +#define V8_V8_DEBUG_H_ + +#include "v8.h" + +/** + * Debugger support for the V8 JavaScript engine. + */ +namespace v8 { + +// Debug events which can occur in the V8 JavaScript engine. +enum DebugEvent { + Break = 1, + Exception = 2, + NewFunction = 3, + BeforeCompile = 4, + AfterCompile = 5, + CompileError = 6, + PromiseEvent = 7, + AsyncTaskEvent = 8, + BreakForCommand = 9 +}; + + +class V8_EXPORT Debug { + public: + /** + * A client object passed to the v8 debugger whose ownership will be taken by + * it. v8 is always responsible for deleting the object. + */ + class ClientData { + public: + virtual ~ClientData() {} + }; + + + /** + * A message object passed to the debug message handler. + */ + class Message { + public: + /** + * Check type of message. + */ + virtual bool IsEvent() const = 0; + virtual bool IsResponse() const = 0; + virtual DebugEvent GetEvent() const = 0; + + /** + * Indicate whether this is a response to a continue command which will + * start the VM running after this is processed. + */ + virtual bool WillStartRunning() const = 0; + + /** + * Access to execution state and event data. Don't store these cross + * callbacks as their content becomes invalid. These objects are from the + * debugger event that started the debug message loop. + */ + virtual Handle GetExecutionState() const = 0; + virtual Handle GetEventData() const = 0; + + /** + * Get the debugger protocol JSON. + */ + virtual Handle GetJSON() const = 0; + + /** + * Get the context active when the debug event happened. Note this is not + * the current active context as the JavaScript part of the debugger is + * running in its own context which is entered at this point. + */ + virtual Handle GetEventContext() const = 0; + + /** + * Client data passed with the corresponding request if any. This is the + * client_data data value passed into Debug::SendCommand along with the + * request that led to the message or NULL if the message is an event. The + * debugger takes ownership of the data and will delete it even if there is + * no message handler. + */ + virtual ClientData* GetClientData() const = 0; + + virtual Isolate* GetIsolate() const = 0; + + virtual ~Message() {} + }; + + + /** + * An event details object passed to the debug event listener. + */ + class EventDetails { + public: + /** + * Event type. + */ + virtual DebugEvent GetEvent() const = 0; + + /** + * Access to execution state and event data of the debug event. Don't store + * these cross callbacks as their content becomes invalid. + */ + virtual Handle GetExecutionState() const = 0; + virtual Handle GetEventData() const = 0; + + /** + * Get the context active when the debug event happened. Note this is not + * the current active context as the JavaScript part of the debugger is + * running in its own context which is entered at this point. + */ + virtual Handle GetEventContext() const = 0; + + /** + * Client data passed with the corresponding callback when it was + * registered. + */ + virtual Handle GetCallbackData() const = 0; + + /** + * Client data passed to DebugBreakForCommand function. The + * debugger takes ownership of the data and will delete it even if + * there is no message handler. + */ + virtual ClientData* GetClientData() const = 0; + + virtual ~EventDetails() {} + }; + + /** + * Debug event callback function. + * + * \param event_details object providing information about the debug event + * + * A EventCallback2 does not take possession of the event data, + * and must not rely on the data persisting after the handler returns. + */ + typedef void (*EventCallback)(const EventDetails& event_details); + + /** + * Debug message callback function. + * + * \param message the debug message handler message object + * + * A MessageHandler2 does not take possession of the message data, + * and must not rely on the data persisting after the handler returns. + */ + typedef void (*MessageHandler)(const Message& message); + + /** + * Callback function for the host to ensure debug messages are processed. + */ + typedef void (*DebugMessageDispatchHandler)(); + + static bool SetDebugEventListener(EventCallback that, + Handle data = Handle()); + + // Schedule a debugger break to happen when JavaScript code is run + // in the given isolate. + static void DebugBreak(Isolate* isolate); + + // Remove scheduled debugger break in given isolate if it has not + // happened yet. + static void CancelDebugBreak(Isolate* isolate); + + // Check if a debugger break is scheduled in the given isolate. + static bool CheckDebugBreak(Isolate* isolate); + + // Break execution of JavaScript in the given isolate (this method + // can be invoked from a non-VM thread) for further client command + // execution on a VM thread. Client data is then passed in + // EventDetails to EventCallback2 at the moment when the VM actually + // stops. + static void DebugBreakForCommand(Isolate* isolate, ClientData* data); + + // Message based interface. The message protocol is JSON. + static void SetMessageHandler(MessageHandler handler); + + static void SendCommand(Isolate* isolate, + const uint16_t* command, int length, + ClientData* client_data = NULL); + + /** + * Run a JavaScript function in the debugger. + * \param fun the function to call + * \param data passed as second argument to the function + * With this call the debugger is entered and the function specified is called + * with the execution state as the first argument. This makes it possible to + * get access to information otherwise not available during normal JavaScript + * execution e.g. details on stack frames. Receiver of the function call will + * be the debugger context global object, however this is a subject to change. + * The following example shows a JavaScript function which when passed to + * v8::Debug::Call will return the current line of JavaScript execution. + * + * \code + * function frame_source_line(exec_state) { + * return exec_state.frame(0).sourceLine(); + * } + * \endcode + */ + static Local Call(v8::Handle fun, + Handle data = Handle()); + + /** + * Returns a mirror object for the given object. + */ + static Local GetMirror(v8::Handle obj); + + /** + * Makes V8 process all pending debug messages. + * + * From V8 point of view all debug messages come asynchronously (e.g. from + * remote debugger) but they all must be handled synchronously: V8 cannot + * do 2 things at one time so normal script execution must be interrupted + * for a while. + * + * Generally when message arrives V8 may be in one of 3 states: + * 1. V8 is running script; V8 will automatically interrupt and process all + * pending messages; + * 2. V8 is suspended on debug breakpoint; in this state V8 is dedicated + * to reading and processing debug messages; + * 3. V8 is not running at all or has called some long-working C++ function; + * by default it means that processing of all debug messages will be deferred + * until V8 gets control again; however, embedding application may improve + * this by manually calling this method. + * + * Technically this method in many senses is equivalent to executing empty + * script: + * 1. It does nothing except for processing all pending debug messages. + * 2. It should be invoked with the same precautions and from the same context + * as V8 script would be invoked from, because: + * a. with "evaluate" command it can do whatever normal script can do, + * including all native calls; + * b. no other thread should call V8 while this method is running + * (v8::Locker may be used here). + * + * "Evaluate" debug command behavior currently is not specified in scope + * of this method. + */ + static void ProcessDebugMessages(); + + /** + * Debugger is running in its own context which is entered while debugger + * messages are being dispatched. This is an explicit getter for this + * debugger context. Note that the content of the debugger context is subject + * to change. + */ + static Local GetDebugContext(); + + + /** + * Enable/disable LiveEdit functionality for the given Isolate + * (default Isolate if not provided). V8 will abort if LiveEdit is + * unexpectedly used. LiveEdit is enabled by default. + */ + static void SetLiveEditEnabled(Isolate* isolate, bool enable); +}; + + +} // namespace v8 + + +#undef EXPORT + + +#endif // V8_V8_DEBUG_H_ diff --git a/v4-cokapi/backends/javascript/v8-reference-code/src/debug-debugger.js b/v4-cokapi/backends/javascript/v8-reference-code/src/debug-debugger.js new file mode 100644 index 000000000..09f479e1e --- /dev/null +++ b/v4-cokapi/backends/javascript/v8-reference-code/src/debug-debugger.js @@ -0,0 +1,2590 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +"use strict"; + +// Default number of frames to include in the response to backtrace request. +var kDefaultBacktraceLength = 10; + +var Debug = {}; + +// Regular expression to skip "crud" at the beginning of a source line which is +// not really code. Currently the regular expression matches whitespace and +// comments. +var sourceLineBeginningSkip = /^(?:\s*(?:\/\*.*?\*\/)*)*/; + +// Debug events which can occour in the V8 JavaScript engine. These originate +// from the API include file debug.h. +Debug.DebugEvent = { Break: 1, + Exception: 2, + NewFunction: 3, + BeforeCompile: 4, + AfterCompile: 5, + CompileError: 6, + PromiseEvent: 7, + AsyncTaskEvent: 8, + BreakForCommand: 9 }; + +// Types of exceptions that can be broken upon. +Debug.ExceptionBreak = { Caught : 0, + Uncaught: 1 }; + +// The different types of steps. +Debug.StepAction = { StepOut: 0, + StepNext: 1, + StepIn: 2, + StepMin: 3, + StepInMin: 4, + StepFrame: 5 }; + +// The different types of scripts matching enum ScriptType in objects.h. +Debug.ScriptType = { Native: 0, + Extension: 1, + Normal: 2 }; + +// The different types of script compilations matching enum +// Script::CompilationType in objects.h. +Debug.ScriptCompilationType = { Host: 0, + Eval: 1, + JSON: 2 }; + +// The different script break point types. +Debug.ScriptBreakPointType = { ScriptId: 0, + ScriptName: 1, + ScriptRegExp: 2 }; + +// The different types of breakpoint position alignments. +// Must match BreakPositionAlignment in debug.h. +Debug.BreakPositionAlignment = { + Statement: 0, + BreakPosition: 1 +}; + +function ScriptTypeFlag(type) { + return (1 << type); +} + +// Globals. +var next_response_seq = 0; +var next_break_point_number = 1; +var break_points = []; +var script_break_points = []; +var debugger_flags = { + breakPointsActive: { + value: true, + getValue: function() { return this.value; }, + setValue: function(value) { + this.value = !!value; + %SetDisableBreak(!this.value); + } + }, + breakOnCaughtException: { + getValue: function() { return Debug.isBreakOnException(); }, + setValue: function(value) { + if (value) { + Debug.setBreakOnException(); + } else { + Debug.clearBreakOnException(); + } + } + }, + breakOnUncaughtException: { + getValue: function() { return Debug.isBreakOnUncaughtException(); }, + setValue: function(value) { + if (value) { + Debug.setBreakOnUncaughtException(); + } else { + Debug.clearBreakOnUncaughtException(); + } + } + }, +}; + + +// Create a new break point object and add it to the list of break points. +function MakeBreakPoint(source_position, opt_script_break_point) { + var break_point = new BreakPoint(source_position, opt_script_break_point); + break_points.push(break_point); + return break_point; +} + + +// Object representing a break point. +// NOTE: This object does not have a reference to the function having break +// point as this would cause function not to be garbage collected when it is +// not used any more. We do not want break points to keep functions alive. +function BreakPoint(source_position, opt_script_break_point) { + this.source_position_ = source_position; + if (opt_script_break_point) { + this.script_break_point_ = opt_script_break_point; + } else { + this.number_ = next_break_point_number++; + } + this.hit_count_ = 0; + this.active_ = true; + this.condition_ = null; + this.ignoreCount_ = 0; +} + + +BreakPoint.prototype.number = function() { + return this.number_; +}; + + +BreakPoint.prototype.func = function() { + return this.func_; +}; + + +BreakPoint.prototype.source_position = function() { + return this.source_position_; +}; + + +BreakPoint.prototype.hit_count = function() { + return this.hit_count_; +}; + + +BreakPoint.prototype.active = function() { + if (this.script_break_point()) { + return this.script_break_point().active(); + } + return this.active_; +}; + + +BreakPoint.prototype.condition = function() { + if (this.script_break_point() && this.script_break_point().condition()) { + return this.script_break_point().condition(); + } + return this.condition_; +}; + + +BreakPoint.prototype.ignoreCount = function() { + return this.ignoreCount_; +}; + + +BreakPoint.prototype.script_break_point = function() { + return this.script_break_point_; +}; + + +BreakPoint.prototype.enable = function() { + this.active_ = true; +}; + + +BreakPoint.prototype.disable = function() { + this.active_ = false; +}; + + +BreakPoint.prototype.setCondition = function(condition) { + this.condition_ = condition; +}; + + +BreakPoint.prototype.setIgnoreCount = function(ignoreCount) { + this.ignoreCount_ = ignoreCount; +}; + + +BreakPoint.prototype.isTriggered = function(exec_state) { + // Break point not active - not triggered. + if (!this.active()) return false; + + // Check for conditional break point. + if (this.condition()) { + // If break point has condition try to evaluate it in the top frame. + try { + var mirror = exec_state.frame(0).evaluate(this.condition()); + // If no sensible mirror or non true value break point not triggered. + if (!(mirror instanceof ValueMirror) || !%ToBoolean(mirror.value_)) { + return false; + } + } catch (e) { + // Exception evaluating condition counts as not triggered. + return false; + } + } + + // Update the hit count. + this.hit_count_++; + if (this.script_break_point_) { + this.script_break_point_.hit_count_++; + } + + // If the break point has an ignore count it is not triggered. + if (this.ignoreCount_ > 0) { + this.ignoreCount_--; + return false; + } + + // Break point triggered. + return true; +}; + + +// Function called from the runtime when a break point is hit. Returns true if +// the break point is triggered and supposed to break execution. +function IsBreakPointTriggered(break_id, break_point) { + return break_point.isTriggered(MakeExecutionState(break_id)); +} + + +// Object representing a script break point. The script is referenced by its +// script name or script id and the break point is represented as line and +// column. +function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, + opt_groupId, opt_position_alignment) { + this.type_ = type; + if (type == Debug.ScriptBreakPointType.ScriptId) { + this.script_id_ = script_id_or_name; + } else if (type == Debug.ScriptBreakPointType.ScriptName) { + this.script_name_ = script_id_or_name; + } else if (type == Debug.ScriptBreakPointType.ScriptRegExp) { + this.script_regexp_object_ = new RegExp(script_id_or_name); + } else { + throw new Error("Unexpected breakpoint type " + type); + } + this.line_ = opt_line || 0; + this.column_ = opt_column; + this.groupId_ = opt_groupId; + this.position_alignment_ = IS_UNDEFINED(opt_position_alignment) + ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; + this.hit_count_ = 0; + this.active_ = true; + this.condition_ = null; + this.ignoreCount_ = 0; + this.break_points_ = []; +} + + +//Creates a clone of script breakpoint that is linked to another script. +ScriptBreakPoint.prototype.cloneForOtherScript = function (other_script) { + var copy = new ScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, + other_script.id, this.line_, this.column_, this.groupId_, + this.position_alignment_); + copy.number_ = next_break_point_number++; + script_break_points.push(copy); + + copy.hit_count_ = this.hit_count_; + copy.active_ = this.active_; + copy.condition_ = this.condition_; + copy.ignoreCount_ = this.ignoreCount_; + return copy; +}; + + +ScriptBreakPoint.prototype.number = function() { + return this.number_; +}; + + +ScriptBreakPoint.prototype.groupId = function() { + return this.groupId_; +}; + + +ScriptBreakPoint.prototype.type = function() { + return this.type_; +}; + + +ScriptBreakPoint.prototype.script_id = function() { + return this.script_id_; +}; + + +ScriptBreakPoint.prototype.script_name = function() { + return this.script_name_; +}; + + +ScriptBreakPoint.prototype.script_regexp_object = function() { + return this.script_regexp_object_; +}; + + +ScriptBreakPoint.prototype.line = function() { + return this.line_; +}; + + +ScriptBreakPoint.prototype.column = function() { + return this.column_; +}; + + +ScriptBreakPoint.prototype.actual_locations = function() { + var locations = []; + for (var i = 0; i < this.break_points_.length; i++) { + locations.push(this.break_points_[i].actual_location); + } + return locations; +}; + + +ScriptBreakPoint.prototype.update_positions = function(line, column) { + this.line_ = line; + this.column_ = column; +}; + + +ScriptBreakPoint.prototype.hit_count = function() { + return this.hit_count_; +}; + + +ScriptBreakPoint.prototype.active = function() { + return this.active_; +}; + + +ScriptBreakPoint.prototype.condition = function() { + return this.condition_; +}; + + +ScriptBreakPoint.prototype.ignoreCount = function() { + return this.ignoreCount_; +}; + + +ScriptBreakPoint.prototype.enable = function() { + this.active_ = true; +}; + + +ScriptBreakPoint.prototype.disable = function() { + this.active_ = false; +}; + + +ScriptBreakPoint.prototype.setCondition = function(condition) { + this.condition_ = condition; +}; + + +ScriptBreakPoint.prototype.setIgnoreCount = function(ignoreCount) { + this.ignoreCount_ = ignoreCount; + + // Set ignore count on all break points created from this script break point. + for (var i = 0; i < this.break_points_.length; i++) { + this.break_points_[i].setIgnoreCount(ignoreCount); + } +}; + + +// Check whether a script matches this script break point. Currently this is +// only based on script name. +ScriptBreakPoint.prototype.matchesScript = function(script) { + if (this.type_ == Debug.ScriptBreakPointType.ScriptId) { + return this.script_id_ == script.id; + } else { + // We might want to account columns here as well. + if (!(script.line_offset <= this.line_ && + this.line_ < script.line_offset + script.lineCount())) { + return false; + } + if (this.type_ == Debug.ScriptBreakPointType.ScriptName) { + return this.script_name_ == script.nameOrSourceURL(); + } else if (this.type_ == Debug.ScriptBreakPointType.ScriptRegExp) { + return this.script_regexp_object_.test(script.nameOrSourceURL()); + } else { + throw new Error("Unexpected breakpoint type " + this.type_); + } + } +}; + + +// Set the script break point in a script. +ScriptBreakPoint.prototype.set = function (script) { + var column = this.column(); + var line = this.line(); + // If the column is undefined the break is on the line. To help locate the + // first piece of breakable code on the line try to find the column on the + // line which contains some source. + if (IS_UNDEFINED(column)) { + var source_line = script.sourceLine(this.line()); + + // Allocate array for caching the columns where the actual source starts. + if (!script.sourceColumnStart_) { + script.sourceColumnStart_ = new Array(script.lineCount()); + } + + // Fill cache if needed and get column where the actual source starts. + if (IS_UNDEFINED(script.sourceColumnStart_[line])) { + script.sourceColumnStart_[line] = + source_line.match(sourceLineBeginningSkip)[0].length; + } + column = script.sourceColumnStart_[line]; + } + + // Convert the line and column into an absolute position within the script. + var position = Debug.findScriptSourcePosition(script, this.line(), column); + + // If the position is not found in the script (the script might be shorter + // than it used to be) just ignore it. + if (IS_NULL(position)) return; + + // Create a break point object and set the break point. + var break_point = MakeBreakPoint(position, this); + break_point.setIgnoreCount(this.ignoreCount()); + var actual_position = %SetScriptBreakPoint(script, position, + this.position_alignment_, + break_point); + if (IS_UNDEFINED(actual_position)) { + actual_position = position; + } + var actual_location = script.locationFromPosition(actual_position, true); + break_point.actual_location = { line: actual_location.line, + column: actual_location.column, + script_id: script.id }; + this.break_points_.push(break_point); + return break_point; +}; + + +// Clear all the break points created from this script break point +ScriptBreakPoint.prototype.clear = function () { + var remaining_break_points = []; + for (var i = 0; i < break_points.length; i++) { + if (break_points[i].script_break_point() && + break_points[i].script_break_point() === this) { + %ClearBreakPoint(break_points[i]); + } else { + remaining_break_points.push(break_points[i]); + } + } + break_points = remaining_break_points; + this.break_points_ = []; +}; + + +// Function called from runtime when a new script is compiled to set any script +// break points set in this script. +function UpdateScriptBreakPoints(script) { + for (var i = 0; i < script_break_points.length; i++) { + var break_point = script_break_points[i]; + if ((break_point.type() == Debug.ScriptBreakPointType.ScriptName || + break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) && + break_point.matchesScript(script)) { + break_point.set(script); + } + } +} + + +function GetScriptBreakPoints(script) { + var result = []; + for (var i = 0; i < script_break_points.length; i++) { + if (script_break_points[i].matchesScript(script)) { + result.push(script_break_points[i]); + } + } + return result; +} + + +Debug.setListener = function(listener, opt_data) { + if (!IS_FUNCTION(listener) && !IS_UNDEFINED(listener) && !IS_NULL(listener)) { + throw new Error('Parameters have wrong types.'); + } + %SetDebugEventListener(listener, opt_data); +}; + + +Debug.breakExecution = function(f) { + %Break(); +}; + +Debug.breakLocations = function(f, opt_position_aligment) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + var position_aligment = IS_UNDEFINED(opt_position_aligment) + ? Debug.BreakPositionAlignment.Statement : opt_position_aligment; + return %GetBreakLocations(f, position_aligment); +}; + +// Returns a Script object. If the parameter is a function the return value +// is the script in which the function is defined. If the parameter is a string +// the return value is the script for which the script name has that string +// value. If it is a regexp and there is a unique script whose name matches +// we return that, otherwise undefined. +Debug.findScript = function(func_or_script_name) { + if (IS_FUNCTION(func_or_script_name)) { + return %FunctionGetScript(func_or_script_name); + } else if (IS_REGEXP(func_or_script_name)) { + var scripts = Debug.scripts(); + var last_result = null; + var result_count = 0; + for (var i in scripts) { + var script = scripts[i]; + if (func_or_script_name.test(script.name)) { + last_result = script; + result_count++; + } + } + // Return the unique script matching the regexp. If there are more + // than one we don't return a value since there is no good way to + // decide which one to return. Returning a "random" one, say the + // first, would introduce nondeterminism (or something close to it) + // because the order is the heap iteration order. + if (result_count == 1) { + return last_result; + } else { + return undefined; + } + } else { + return %GetScript(func_or_script_name); + } +}; + +// Returns the script source. If the parameter is a function the return value +// is the script source for the script in which the function is defined. If the +// parameter is a string the return value is the script for which the script +// name has that string value. +Debug.scriptSource = function(func_or_script_name) { + return this.findScript(func_or_script_name).source; +}; + +Debug.source = function(f) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + return %FunctionGetSourceCode(f); +}; + +Debug.disassemble = function(f) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + return %DebugDisassembleFunction(f); +}; + +Debug.disassembleConstructor = function(f) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + return %DebugDisassembleConstructor(f); +}; + +Debug.ExecuteInDebugContext = function(f, without_debugger) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + return %ExecuteInDebugContext(f, !!without_debugger); +}; + +Debug.sourcePosition = function(f) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + return %FunctionGetScriptSourcePosition(f); +}; + + +Debug.findFunctionSourceLocation = function(func, opt_line, opt_column) { + var script = %FunctionGetScript(func); + var script_offset = %FunctionGetScriptSourcePosition(func); + return script.locationFromLine(opt_line, opt_column, script_offset); +}; + + +// Returns the character position in a script based on a line number and an +// optional position within that line. +Debug.findScriptSourcePosition = function(script, opt_line, opt_column) { + var location = script.locationFromLine(opt_line, opt_column); + return location ? location.position : null; +}; + + +Debug.findBreakPoint = function(break_point_number, remove) { + var break_point; + for (var i = 0; i < break_points.length; i++) { + if (break_points[i].number() == break_point_number) { + break_point = break_points[i]; + // Remove the break point from the list if requested. + if (remove) { + break_points.splice(i, 1); + } + break; + } + } + if (break_point) { + return break_point; + } else { + return this.findScriptBreakPoint(break_point_number, remove); + } +}; + +Debug.findBreakPointActualLocations = function(break_point_number) { + for (var i = 0; i < script_break_points.length; i++) { + if (script_break_points[i].number() == break_point_number) { + return script_break_points[i].actual_locations(); + } + } + for (var i = 0; i < break_points.length; i++) { + if (break_points[i].number() == break_point_number) { + return [break_points[i].actual_location]; + } + } + return []; +}; + +Debug.setBreakPoint = function(func, opt_line, opt_column, opt_condition) { + if (!IS_FUNCTION(func)) throw new Error('Parameters have wrong types.'); + // Break points in API functions are not supported. + if (%FunctionIsAPIFunction(func)) { + throw new Error('Cannot set break point in native code.'); + } + // Find source position relative to start of the function + var break_position = + this.findFunctionSourceLocation(func, opt_line, opt_column).position; + var source_position = break_position - this.sourcePosition(func); + // Find the script for the function. + var script = %FunctionGetScript(func); + // Break in builtin JavaScript code is not supported. + if (script.type == Debug.ScriptType.Native) { + throw new Error('Cannot set break point in native code.'); + } + // If the script for the function has a name convert this to a script break + // point. + if (script && script.id) { + // Adjust the source position to be script relative. + source_position += %FunctionGetScriptSourcePosition(func); + // Find line and column for the position in the script and set a script + // break point from that. + var location = script.locationFromPosition(source_position, false); + return this.setScriptBreakPointById(script.id, + location.line, location.column, + opt_condition); + } else { + // Set a break point directly on the function. + var break_point = MakeBreakPoint(source_position); + var actual_position = + %SetFunctionBreakPoint(func, source_position, break_point); + actual_position += this.sourcePosition(func); + var actual_location = script.locationFromPosition(actual_position, true); + break_point.actual_location = { line: actual_location.line, + column: actual_location.column, + script_id: script.id }; + break_point.setCondition(opt_condition); + return break_point.number(); + } +}; + + +Debug.setBreakPointByScriptIdAndPosition = function(script_id, position, + condition, enabled, + opt_position_alignment) +{ + var break_point = MakeBreakPoint(position); + break_point.setCondition(condition); + if (!enabled) { + break_point.disable(); + } + var scripts = this.scripts(); + var position_alignment = IS_UNDEFINED(opt_position_alignment) + ? Debug.BreakPositionAlignment.Statement : opt_position_alignment; + for (var i = 0; i < scripts.length; i++) { + if (script_id == scripts[i].id) { + break_point.actual_position = %SetScriptBreakPoint(scripts[i], position, + position_alignment, break_point); + break; + } + } + return break_point; +}; + + +Debug.enableBreakPoint = function(break_point_number) { + var break_point = this.findBreakPoint(break_point_number, false); + // Only enable if the breakpoint hasn't been deleted: + if (break_point) { + break_point.enable(); + } +}; + + +Debug.disableBreakPoint = function(break_point_number) { + var break_point = this.findBreakPoint(break_point_number, false); + // Only enable if the breakpoint hasn't been deleted: + if (break_point) { + break_point.disable(); + } +}; + + +Debug.changeBreakPointCondition = function(break_point_number, condition) { + var break_point = this.findBreakPoint(break_point_number, false); + break_point.setCondition(condition); +}; + + +Debug.changeBreakPointIgnoreCount = function(break_point_number, ignoreCount) { + if (ignoreCount < 0) { + throw new Error('Invalid argument'); + } + var break_point = this.findBreakPoint(break_point_number, false); + break_point.setIgnoreCount(ignoreCount); +}; + + +Debug.clearBreakPoint = function(break_point_number) { + var break_point = this.findBreakPoint(break_point_number, true); + if (break_point) { + return %ClearBreakPoint(break_point); + } else { + break_point = this.findScriptBreakPoint(break_point_number, true); + if (!break_point) { + throw new Error('Invalid breakpoint'); + } + } +}; + + +Debug.clearAllBreakPoints = function() { + for (var i = 0; i < break_points.length; i++) { + var break_point = break_points[i]; + %ClearBreakPoint(break_point); + } + break_points = []; +}; + + +Debug.disableAllBreakPoints = function() { + // Disable all user defined breakpoints: + for (var i = 1; i < next_break_point_number; i++) { + Debug.disableBreakPoint(i); + } + // Disable all exception breakpoints: + %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); + %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); +}; + + +Debug.findScriptBreakPoint = function(break_point_number, remove) { + var script_break_point; + for (var i = 0; i < script_break_points.length; i++) { + if (script_break_points[i].number() == break_point_number) { + script_break_point = script_break_points[i]; + // Remove the break point from the list if requested. + if (remove) { + script_break_point.clear(); + script_break_points.splice(i,1); + } + break; + } + } + return script_break_point; +}; + + +// Sets a breakpoint in a script identified through id or name at the +// specified source line and column within that line. +Debug.setScriptBreakPoint = function(type, script_id_or_name, + opt_line, opt_column, opt_condition, + opt_groupId, opt_position_alignment) { + // Create script break point object. + var script_break_point = + new ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, + opt_groupId, opt_position_alignment); + + // Assign number to the new script break point and add it. + script_break_point.number_ = next_break_point_number++; + script_break_point.setCondition(opt_condition); + script_break_points.push(script_break_point); + + // Run through all scripts to see if this script break point matches any + // loaded scripts. + var scripts = this.scripts(); + for (var i = 0; i < scripts.length; i++) { + if (script_break_point.matchesScript(scripts[i])) { + script_break_point.set(scripts[i]); + } + } + + return script_break_point.number(); +}; + + +Debug.setScriptBreakPointById = function(script_id, + opt_line, opt_column, + opt_condition, opt_groupId, + opt_position_alignment) { + return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptId, + script_id, opt_line, opt_column, + opt_condition, opt_groupId, + opt_position_alignment); +}; + + +Debug.setScriptBreakPointByName = function(script_name, + opt_line, opt_column, + opt_condition, opt_groupId) { + return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptName, + script_name, opt_line, opt_column, + opt_condition, opt_groupId); +}; + + +Debug.setScriptBreakPointByRegExp = function(script_regexp, + opt_line, opt_column, + opt_condition, opt_groupId) { + return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptRegExp, + script_regexp, opt_line, opt_column, + opt_condition, opt_groupId); +}; + + +Debug.enableScriptBreakPoint = function(break_point_number) { + var script_break_point = this.findScriptBreakPoint(break_point_number, false); + script_break_point.enable(); +}; + + +Debug.disableScriptBreakPoint = function(break_point_number) { + var script_break_point = this.findScriptBreakPoint(break_point_number, false); + script_break_point.disable(); +}; + + +Debug.changeScriptBreakPointCondition = function( + break_point_number, condition) { + var script_break_point = this.findScriptBreakPoint(break_point_number, false); + script_break_point.setCondition(condition); +}; + + +Debug.changeScriptBreakPointIgnoreCount = function( + break_point_number, ignoreCount) { + if (ignoreCount < 0) { + throw new Error('Invalid argument'); + } + var script_break_point = this.findScriptBreakPoint(break_point_number, false); + script_break_point.setIgnoreCount(ignoreCount); +}; + + +Debug.scriptBreakPoints = function() { + return script_break_points; +}; + + +Debug.clearStepping = function() { + %ClearStepping(); +}; + +Debug.setBreakOnException = function() { + return %ChangeBreakOnException(Debug.ExceptionBreak.Caught, true); +}; + +Debug.clearBreakOnException = function() { + return %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); +}; + +Debug.isBreakOnException = function() { + return !!%IsBreakOnException(Debug.ExceptionBreak.Caught); +}; + +Debug.setBreakOnUncaughtException = function() { + return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, true); +}; + +Debug.clearBreakOnUncaughtException = function() { + return %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); +}; + +Debug.isBreakOnUncaughtException = function() { + return !!%IsBreakOnException(Debug.ExceptionBreak.Uncaught); +}; + +Debug.showBreakPoints = function(f, full, opt_position_alignment) { + if (!IS_FUNCTION(f)) throw new Error('Parameters have wrong types.'); + var source = full ? this.scriptSource(f) : this.source(f); + var offset = full ? this.sourcePosition(f) : 0; + var locations = this.breakLocations(f, opt_position_alignment); + if (!locations) return source; + locations.sort(function(x, y) { return x - y; }); + var result = ""; + var prev_pos = 0; + var pos; + for (var i = 0; i < locations.length; i++) { + pos = locations[i] - offset; + result += source.slice(prev_pos, pos); + result += "[B" + i + "]"; + prev_pos = pos; + } + pos = source.length; + result += source.substring(prev_pos, pos); + return result; +}; + + +// Get all the scripts currently loaded. Locating all the scripts is based on +// scanning the heap. +Debug.scripts = function() { + // Collect all scripts in the heap. + return %DebugGetLoadedScripts(); +}; + + +Debug.debuggerFlags = function() { + return debugger_flags; +}; + +Debug.MakeMirror = MakeMirror; + +function MakeExecutionState(break_id) { + return new ExecutionState(break_id); +} + +function ExecutionState(break_id) { + this.break_id = break_id; + this.selected_frame = 0; +} + +ExecutionState.prototype.prepareStep = function(opt_action, opt_count, + opt_callframe) { + var action = Debug.StepAction.StepIn; + if (!IS_UNDEFINED(opt_action)) action = %ToNumber(opt_action); + var count = opt_count ? %ToNumber(opt_count) : 1; + var callFrameId = 0; + if (!IS_UNDEFINED(opt_callframe)) { + callFrameId = opt_callframe.details_.frameId(); + } + + return %PrepareStep(this.break_id, action, count, callFrameId); +}; + +ExecutionState.prototype.evaluateGlobal = function(source, disable_break, + opt_additional_context) { + return MakeMirror(%DebugEvaluateGlobal(this.break_id, source, + Boolean(disable_break), + opt_additional_context)); +}; + +ExecutionState.prototype.frameCount = function() { + return %GetFrameCount(this.break_id); +}; + +ExecutionState.prototype.threadCount = function() { + return %GetThreadCount(this.break_id); +}; + +ExecutionState.prototype.frame = function(opt_index) { + // If no index supplied return the selected frame. + if (opt_index == null) opt_index = this.selected_frame; + if (opt_index < 0 || opt_index >= this.frameCount()) { + throw new Error('Illegal frame index.'); + } + return new FrameMirror(this.break_id, opt_index); +}; + +ExecutionState.prototype.setSelectedFrame = function(index) { + var i = %ToNumber(index); + if (i < 0 || i >= this.frameCount()) throw new Error('Illegal frame index.'); + this.selected_frame = i; +}; + +ExecutionState.prototype.selectedFrame = function() { + return this.selected_frame; +}; + +ExecutionState.prototype.debugCommandProcessor = function(opt_is_running) { + return new DebugCommandProcessor(this, opt_is_running); +}; + + +function MakeBreakEvent(break_id, break_points_hit) { + return new BreakEvent(break_id, break_points_hit); +} + + +function BreakEvent(break_id, break_points_hit) { + this.frame_ = new FrameMirror(break_id, 0); + this.break_points_hit_ = break_points_hit; +} + + +BreakEvent.prototype.eventType = function() { + return Debug.DebugEvent.Break; +}; + + +BreakEvent.prototype.func = function() { + return this.frame_.func(); +}; + + +BreakEvent.prototype.sourceLine = function() { + return this.frame_.sourceLine(); +}; + + +BreakEvent.prototype.sourceColumn = function() { + return this.frame_.sourceColumn(); +}; + + +BreakEvent.prototype.sourceLineText = function() { + return this.frame_.sourceLineText(); +}; + + +BreakEvent.prototype.breakPointsHit = function() { + return this.break_points_hit_; +}; + + +BreakEvent.prototype.toJSONProtocol = function() { + var o = { seq: next_response_seq++, + type: "event", + event: "break", + body: { invocationText: this.frame_.invocationText() } + }; + + // Add script related information to the event if available. + var script = this.func().script(); + if (script) { + o.body.sourceLine = this.sourceLine(), + o.body.sourceColumn = this.sourceColumn(), + o.body.sourceLineText = this.sourceLineText(), + o.body.script = MakeScriptObject_(script, false); + } + + // Add an Array of break points hit if any. + if (this.breakPointsHit()) { + o.body.breakpoints = []; + for (var i = 0; i < this.breakPointsHit().length; i++) { + // Find the break point number. For break points originating from a + // script break point supply the script break point number. + var breakpoint = this.breakPointsHit()[i]; + var script_break_point = breakpoint.script_break_point(); + var number; + if (script_break_point) { + number = script_break_point.number(); + } else { + number = breakpoint.number(); + } + o.body.breakpoints.push(number); + } + } + return JSON.stringify(ObjectToProtocolObject_(o)); +}; + + +function MakeExceptionEvent(break_id, exception, uncaught, promise) { + return new ExceptionEvent(break_id, exception, uncaught, promise); +} + + +function ExceptionEvent(break_id, exception, uncaught, promise) { + this.exec_state_ = new ExecutionState(break_id); + this.exception_ = exception; + this.uncaught_ = uncaught; + this.promise_ = promise; +} + + +ExceptionEvent.prototype.eventType = function() { + return Debug.DebugEvent.Exception; +}; + + +ExceptionEvent.prototype.exception = function() { + return this.exception_; +}; + + +ExceptionEvent.prototype.uncaught = function() { + return this.uncaught_; +}; + + +ExceptionEvent.prototype.promise = function() { + return this.promise_; +}; + + +ExceptionEvent.prototype.func = function() { + return this.exec_state_.frame(0).func(); +}; + + +ExceptionEvent.prototype.sourceLine = function() { + return this.exec_state_.frame(0).sourceLine(); +}; + + +ExceptionEvent.prototype.sourceColumn = function() { + return this.exec_state_.frame(0).sourceColumn(); +}; + + +ExceptionEvent.prototype.sourceLineText = function() { + return this.exec_state_.frame(0).sourceLineText(); +}; + + +ExceptionEvent.prototype.toJSONProtocol = function() { + var o = new ProtocolMessage(); + o.event = "exception"; + o.body = { uncaught: this.uncaught_, + exception: MakeMirror(this.exception_) + }; + + // Exceptions might happen whithout any JavaScript frames. + if (this.exec_state_.frameCount() > 0) { + o.body.sourceLine = this.sourceLine(); + o.body.sourceColumn = this.sourceColumn(); + o.body.sourceLineText = this.sourceLineText(); + + // Add script information to the event if available. + var script = this.func().script(); + if (script) { + o.body.script = MakeScriptObject_(script, false); + } + } else { + o.body.sourceLine = -1; + } + + return o.toJSONProtocol(); +}; + + +function MakeCompileEvent(script, type) { + return new CompileEvent(script, type); +} + + +function CompileEvent(script, type) { + this.script_ = MakeMirror(script); + this.type_ = type; +} + + +CompileEvent.prototype.eventType = function() { + return this.type_; +}; + + +CompileEvent.prototype.script = function() { + return this.script_; +}; + + +CompileEvent.prototype.toJSONProtocol = function() { + var o = new ProtocolMessage(); + o.running = true; + switch (this.type_) { + case Debug.DebugEvent.BeforeCompile: + o.event = "beforeCompile"; + break; + case Debug.DebugEvent.AfterCompile: + o.event = "afterCompile"; + break; + case Debug.DebugEvent.CompileError: + o.event = "compileError"; + break; + } + o.body = {}; + o.body.script = this.script_; + + return o.toJSONProtocol(); +}; + + +function MakeScriptObject_(script, include_source) { + var o = { id: script.id(), + name: script.name(), + lineOffset: script.lineOffset(), + columnOffset: script.columnOffset(), + lineCount: script.lineCount(), + }; + if (!IS_UNDEFINED(script.data())) { + o.data = script.data(); + } + if (include_source) { + o.source = script.source(); + } + return o; +} + + +function MakePromiseEvent(event_data) { + return new PromiseEvent(event_data); +} + + +function PromiseEvent(event_data) { + this.promise_ = event_data.promise; + this.parentPromise_ = event_data.parentPromise; + this.status_ = event_data.status; + this.value_ = event_data.value; +} + + +PromiseEvent.prototype.promise = function() { + return MakeMirror(this.promise_); +} + + +PromiseEvent.prototype.parentPromise = function() { + return MakeMirror(this.parentPromise_); +} + + +PromiseEvent.prototype.status = function() { + return this.status_; +} + + +PromiseEvent.prototype.value = function() { + return MakeMirror(this.value_); +} + + +function MakeAsyncTaskEvent(event_data) { + return new AsyncTaskEvent(event_data); +} + + +function AsyncTaskEvent(event_data) { + this.type_ = event_data.type; + this.name_ = event_data.name; + this.id_ = event_data.id; +} + + +AsyncTaskEvent.prototype.type = function() { + return this.type_; +} + + +AsyncTaskEvent.prototype.name = function() { + return this.name_; +} + + +AsyncTaskEvent.prototype.id = function() { + return this.id_; +} + + +function DebugCommandProcessor(exec_state, opt_is_running) { + this.exec_state_ = exec_state; + this.running_ = opt_is_running || false; +} + + +DebugCommandProcessor.prototype.processDebugRequest = function (request) { + return this.processDebugJSONRequest(request); +}; + + +function ProtocolMessage(request) { + // Update sequence number. + this.seq = next_response_seq++; + + if (request) { + // If message is based on a request this is a response. Fill the initial + // response from the request. + this.type = 'response'; + this.request_seq = request.seq; + this.command = request.command; + } else { + // If message is not based on a request it is a dabugger generated event. + this.type = 'event'; + } + this.success = true; + // Handler may set this field to control debugger state. + this.running = undefined; +} + + +ProtocolMessage.prototype.setOption = function(name, value) { + if (!this.options_) { + this.options_ = {}; + } + this.options_[name] = value; +}; + + +ProtocolMessage.prototype.failed = function(message, opt_details) { + this.success = false; + this.message = message; + if (IS_OBJECT(opt_details)) { + this.error_details = opt_details; + } +}; + + +ProtocolMessage.prototype.toJSONProtocol = function() { + // Encode the protocol header. + var json = {}; + json.seq= this.seq; + if (this.request_seq) { + json.request_seq = this.request_seq; + } + json.type = this.type; + if (this.event) { + json.event = this.event; + } + if (this.command) { + json.command = this.command; + } + if (this.success) { + json.success = this.success; + } else { + json.success = false; + } + if (this.body) { + // Encode the body part. + var bodyJson; + var serializer = MakeMirrorSerializer(true, this.options_); + if (this.body instanceof Mirror) { + bodyJson = serializer.serializeValue(this.body); + } else if (this.body instanceof Array) { + bodyJson = []; + for (var i = 0; i < this.body.length; i++) { + if (this.body[i] instanceof Mirror) { + bodyJson.push(serializer.serializeValue(this.body[i])); + } else { + bodyJson.push(ObjectToProtocolObject_(this.body[i], serializer)); + } + } + } else { + bodyJson = ObjectToProtocolObject_(this.body, serializer); + } + json.body = bodyJson; + json.refs = serializer.serializeReferencedObjects(); + } + if (this.message) { + json.message = this.message; + } + if (this.error_details) { + json.error_details = this.error_details; + } + json.running = this.running; + return JSON.stringify(json); +}; + + +DebugCommandProcessor.prototype.createResponse = function(request) { + return new ProtocolMessage(request); +}; + + +DebugCommandProcessor.prototype.processDebugJSONRequest = function( + json_request) { + var request; // Current request. + var response; // Generated response. + try { + try { + // Convert the JSON string to an object. + request = JSON.parse(json_request); + + // Create an initial response. + response = this.createResponse(request); + + if (!request.type) { + throw new Error('Type not specified'); + } + + if (request.type != 'request') { + throw new Error("Illegal type '" + request.type + "' in request"); + } + + if (!request.command) { + throw new Error('Command not specified'); + } + + if (request.arguments) { + var args = request.arguments; + // TODO(yurys): remove request.arguments.compactFormat check once + // ChromeDevTools are switched to 'inlineRefs' + if (args.inlineRefs || args.compactFormat) { + response.setOption('inlineRefs', true); + } + if (!IS_UNDEFINED(args.maxStringLength)) { + response.setOption('maxStringLength', args.maxStringLength); + } + } + + var key = request.command.toLowerCase(); + var handler = DebugCommandProcessor.prototype.dispatch_[key]; + if (IS_FUNCTION(handler)) { + %_CallFunction(this, request, response, handler); + } else { + throw new Error('Unknown command "' + request.command + '" in request'); + } + } catch (e) { + // If there is no response object created one (without command). + if (!response) { + response = this.createResponse(); + } + response.success = false; + response.message = %ToString(e); + } + + // Return the response as a JSON encoded string. + try { + if (!IS_UNDEFINED(response.running)) { + // Response controls running state. + this.running_ = response.running; + } + response.running = this.running_; + return response.toJSONProtocol(); + } catch (e) { + // Failed to generate response - return generic error. + return '{"seq":' + response.seq + ',' + + '"request_seq":' + request.seq + ',' + + '"type":"response",' + + '"success":false,' + + '"message":"Internal error: ' + %ToString(e) + '"}'; + } + } catch (e) { + // Failed in one of the catch blocks above - most generic error. + return '{"seq":0,"type":"response","success":false,"message":"Internal error"}'; + } +}; + + +DebugCommandProcessor.prototype.continueRequest_ = function(request, response) { + // Check for arguments for continue. + if (request.arguments) { + var count = 1; + var action = Debug.StepAction.StepIn; + + // Pull out arguments. + var stepaction = request.arguments.stepaction; + var stepcount = request.arguments.stepcount; + + // Get the stepcount argument if any. + if (stepcount) { + count = %ToNumber(stepcount); + if (count < 0) { + throw new Error('Invalid stepcount argument "' + stepcount + '".'); + } + } + + // Get the stepaction argument. + if (stepaction) { + if (stepaction == 'in') { + action = Debug.StepAction.StepIn; + } else if (stepaction == 'min') { + action = Debug.StepAction.StepMin; + } else if (stepaction == 'next') { + action = Debug.StepAction.StepNext; + } else if (stepaction == 'out') { + action = Debug.StepAction.StepOut; + } else { + throw new Error('Invalid stepaction argument "' + stepaction + '".'); + } + } + + // Set up the VM for stepping. + this.exec_state_.prepareStep(action, count); + } + + // VM should be running after executing this request. + response.running = true; +}; + + +DebugCommandProcessor.prototype.breakRequest_ = function(request, response) { + // Ignore as break command does not do anything when broken. +}; + + +DebugCommandProcessor.prototype.setBreakPointRequest_ = + function(request, response) { + // Check for legal request. + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + // Pull out arguments. + var type = request.arguments.type; + var target = request.arguments.target; + var line = request.arguments.line; + var column = request.arguments.column; + var enabled = IS_UNDEFINED(request.arguments.enabled) ? + true : request.arguments.enabled; + var condition = request.arguments.condition; + var ignoreCount = request.arguments.ignoreCount; + var groupId = request.arguments.groupId; + + // Check for legal arguments. + if (!type || IS_UNDEFINED(target)) { + response.failed('Missing argument "type" or "target"'); + return; + } + + // Either function or script break point. + var break_point_number; + if (type == 'function') { + // Handle function break point. + if (!IS_STRING(target)) { + response.failed('Argument "target" is not a string value'); + return; + } + var f; + try { + // Find the function through a global evaluate. + f = this.exec_state_.evaluateGlobal(target).value(); + } catch (e) { + response.failed('Error: "' + %ToString(e) + + '" evaluating "' + target + '"'); + return; + } + if (!IS_FUNCTION(f)) { + response.failed('"' + target + '" does not evaluate to a function'); + return; + } + + // Set function break point. + break_point_number = Debug.setBreakPoint(f, line, column, condition); + } else if (type == 'handle') { + // Find the object pointed by the specified handle. + var handle = parseInt(target, 10); + var mirror = LookupMirror(handle); + if (!mirror) { + return response.failed('Object #' + handle + '# not found'); + } + if (!mirror.isFunction()) { + return response.failed('Object #' + handle + '# is not a function'); + } + + // Set function break point. + break_point_number = Debug.setBreakPoint(mirror.value(), + line, column, condition); + } else if (type == 'script') { + // set script break point. + break_point_number = + Debug.setScriptBreakPointByName(target, line, column, condition, + groupId); + } else if (type == 'scriptId') { + break_point_number = + Debug.setScriptBreakPointById(target, line, column, condition, groupId); + } else if (type == 'scriptRegExp') { + break_point_number = + Debug.setScriptBreakPointByRegExp(target, line, column, condition, + groupId); + } else { + response.failed('Illegal type "' + type + '"'); + return; + } + + // Set additional break point properties. + var break_point = Debug.findBreakPoint(break_point_number); + if (ignoreCount) { + Debug.changeBreakPointIgnoreCount(break_point_number, ignoreCount); + } + if (!enabled) { + Debug.disableBreakPoint(break_point_number); + } + + // Add the break point number to the response. + response.body = { type: type, + breakpoint: break_point_number }; + + // Add break point information to the response. + if (break_point instanceof ScriptBreakPoint) { + if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { + response.body.type = 'scriptId'; + response.body.script_id = break_point.script_id(); + } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { + response.body.type = 'scriptName'; + response.body.script_name = break_point.script_name(); + } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { + response.body.type = 'scriptRegExp'; + response.body.script_regexp = break_point.script_regexp_object().source; + } else { + throw new Error("Internal error: Unexpected breakpoint type: " + + break_point.type()); + } + response.body.line = break_point.line(); + response.body.column = break_point.column(); + response.body.actual_locations = break_point.actual_locations(); + } else { + response.body.type = 'function'; + response.body.actual_locations = [break_point.actual_location]; + } +}; + + +DebugCommandProcessor.prototype.changeBreakPointRequest_ = function( + request, response) { + // Check for legal request. + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + // Pull out arguments. + var break_point = %ToNumber(request.arguments.breakpoint); + var enabled = request.arguments.enabled; + var condition = request.arguments.condition; + var ignoreCount = request.arguments.ignoreCount; + + // Check for legal arguments. + if (!break_point) { + response.failed('Missing argument "breakpoint"'); + return; + } + + // Change enabled state if supplied. + if (!IS_UNDEFINED(enabled)) { + if (enabled) { + Debug.enableBreakPoint(break_point); + } else { + Debug.disableBreakPoint(break_point); + } + } + + // Change condition if supplied + if (!IS_UNDEFINED(condition)) { + Debug.changeBreakPointCondition(break_point, condition); + } + + // Change ignore count if supplied + if (!IS_UNDEFINED(ignoreCount)) { + Debug.changeBreakPointIgnoreCount(break_point, ignoreCount); + } +}; + + +DebugCommandProcessor.prototype.clearBreakPointGroupRequest_ = function( + request, response) { + // Check for legal request. + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + // Pull out arguments. + var group_id = request.arguments.groupId; + + // Check for legal arguments. + if (!group_id) { + response.failed('Missing argument "groupId"'); + return; + } + + var cleared_break_points = []; + var new_script_break_points = []; + for (var i = 0; i < script_break_points.length; i++) { + var next_break_point = script_break_points[i]; + if (next_break_point.groupId() == group_id) { + cleared_break_points.push(next_break_point.number()); + next_break_point.clear(); + } else { + new_script_break_points.push(next_break_point); + } + } + script_break_points = new_script_break_points; + + // Add the cleared break point numbers to the response. + response.body = { breakpoints: cleared_break_points }; +}; + + +DebugCommandProcessor.prototype.clearBreakPointRequest_ = function( + request, response) { + // Check for legal request. + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + // Pull out arguments. + var break_point = %ToNumber(request.arguments.breakpoint); + + // Check for legal arguments. + if (!break_point) { + response.failed('Missing argument "breakpoint"'); + return; + } + + // Clear break point. + Debug.clearBreakPoint(break_point); + + // Add the cleared break point number to the response. + response.body = { breakpoint: break_point }; +}; + + +DebugCommandProcessor.prototype.listBreakpointsRequest_ = function( + request, response) { + var array = []; + for (var i = 0; i < script_break_points.length; i++) { + var break_point = script_break_points[i]; + + var description = { + number: break_point.number(), + line: break_point.line(), + column: break_point.column(), + groupId: break_point.groupId(), + hit_count: break_point.hit_count(), + active: break_point.active(), + condition: break_point.condition(), + ignoreCount: break_point.ignoreCount(), + actual_locations: break_point.actual_locations() + }; + + if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { + description.type = 'scriptId'; + description.script_id = break_point.script_id(); + } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) { + description.type = 'scriptName'; + description.script_name = break_point.script_name(); + } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) { + description.type = 'scriptRegExp'; + description.script_regexp = break_point.script_regexp_object().source; + } else { + throw new Error("Internal error: Unexpected breakpoint type: " + + break_point.type()); + } + array.push(description); + } + + response.body = { + breakpoints: array, + breakOnExceptions: Debug.isBreakOnException(), + breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() + }; +}; + + +DebugCommandProcessor.prototype.disconnectRequest_ = + function(request, response) { + Debug.disableAllBreakPoints(); + this.continueRequest_(request, response); +}; + + +DebugCommandProcessor.prototype.setExceptionBreakRequest_ = + function(request, response) { + // Check for legal request. + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + // Pull out and check the 'type' argument: + var type = request.arguments.type; + if (!type) { + response.failed('Missing argument "type"'); + return; + } + + // Initialize the default value of enable: + var enabled; + if (type == 'all') { + enabled = !Debug.isBreakOnException(); + } else if (type == 'uncaught') { + enabled = !Debug.isBreakOnUncaughtException(); + } + + // Pull out and check the 'enabled' argument if present: + if (!IS_UNDEFINED(request.arguments.enabled)) { + enabled = request.arguments.enabled; + if ((enabled != true) && (enabled != false)) { + response.failed('Illegal value for "enabled":"' + enabled + '"'); + } + } + + // Now set the exception break state: + if (type == 'all') { + %ChangeBreakOnException(Debug.ExceptionBreak.Caught, enabled); + } else if (type == 'uncaught') { + %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, enabled); + } else { + response.failed('Unknown "type":"' + type + '"'); + } + + // Add the cleared break point number to the response. + response.body = { 'type': type, 'enabled': enabled }; +}; + + +DebugCommandProcessor.prototype.backtraceRequest_ = function( + request, response) { + // Get the number of frames. + var total_frames = this.exec_state_.frameCount(); + + // Create simple response if there are no frames. + if (total_frames == 0) { + response.body = { + totalFrames: total_frames + }; + return; + } + + // Default frame range to include in backtrace. + var from_index = 0; + var to_index = kDefaultBacktraceLength; + + // Get the range from the arguments. + if (request.arguments) { + if (request.arguments.fromFrame) { + from_index = request.arguments.fromFrame; + } + if (request.arguments.toFrame) { + to_index = request.arguments.toFrame; + } + if (request.arguments.bottom) { + var tmp_index = total_frames - from_index; + from_index = total_frames - to_index; + to_index = tmp_index; + } + if (from_index < 0 || to_index < 0) { + return response.failed('Invalid frame number'); + } + } + + // Adjust the index. + to_index = Math.min(total_frames, to_index); + + if (to_index <= from_index) { + var error = 'Invalid frame range'; + return response.failed(error); + } + + // Create the response body. + var frames = []; + for (var i = from_index; i < to_index; i++) { + frames.push(this.exec_state_.frame(i)); + } + response.body = { + fromFrame: from_index, + toFrame: to_index, + totalFrames: total_frames, + frames: frames + }; +}; + + +DebugCommandProcessor.prototype.frameRequest_ = function(request, response) { + // No frames no source. + if (this.exec_state_.frameCount() == 0) { + return response.failed('No frames'); + } + + // With no arguments just keep the selected frame. + if (request.arguments) { + var index = request.arguments.number; + if (index < 0 || this.exec_state_.frameCount() <= index) { + return response.failed('Invalid frame number'); + } + + this.exec_state_.setSelectedFrame(request.arguments.number); + } + response.body = this.exec_state_.frame(); +}; + + +DebugCommandProcessor.prototype.resolveFrameFromScopeDescription_ = + function(scope_description) { + // Get the frame for which the scope or scopes are requested. + // With no frameNumber argument use the currently selected frame. + if (scope_description && !IS_UNDEFINED(scope_description.frameNumber)) { + frame_index = scope_description.frameNumber; + if (frame_index < 0 || this.exec_state_.frameCount() <= frame_index) { + throw new Error('Invalid frame number'); + } + return this.exec_state_.frame(frame_index); + } else { + return this.exec_state_.frame(); + } +}; + + +// Gets scope host object from request. It is either a function +// ('functionHandle' argument must be specified) or a stack frame +// ('frameNumber' may be specified and the current frame is taken by default). +DebugCommandProcessor.prototype.resolveScopeHolder_ = + function(scope_description) { + if (scope_description && "functionHandle" in scope_description) { + if (!IS_NUMBER(scope_description.functionHandle)) { + throw new Error('Function handle must be a number'); + } + var function_mirror = LookupMirror(scope_description.functionHandle); + if (!function_mirror) { + throw new Error('Failed to find function object by handle'); + } + if (!function_mirror.isFunction()) { + throw new Error('Value of non-function type is found by handle'); + } + return function_mirror; + } else { + // No frames no scopes. + if (this.exec_state_.frameCount() == 0) { + throw new Error('No scopes'); + } + + // Get the frame for which the scopes are requested. + var frame = this.resolveFrameFromScopeDescription_(scope_description); + return frame; + } +} + + +DebugCommandProcessor.prototype.scopesRequest_ = function(request, response) { + var scope_holder = this.resolveScopeHolder_(request.arguments); + + // Fill all scopes for this frame or function. + var total_scopes = scope_holder.scopeCount(); + var scopes = []; + for (var i = 0; i < total_scopes; i++) { + scopes.push(scope_holder.scope(i)); + } + response.body = { + fromScope: 0, + toScope: total_scopes, + totalScopes: total_scopes, + scopes: scopes + }; +}; + + +DebugCommandProcessor.prototype.scopeRequest_ = function(request, response) { + // Get the frame or function for which the scope is requested. + var scope_holder = this.resolveScopeHolder_(request.arguments); + + // With no scope argument just return top scope. + var scope_index = 0; + if (request.arguments && !IS_UNDEFINED(request.arguments.number)) { + scope_index = %ToNumber(request.arguments.number); + if (scope_index < 0 || scope_holder.scopeCount() <= scope_index) { + return response.failed('Invalid scope number'); + } + } + + response.body = scope_holder.scope(scope_index); +}; + + +// Reads value from protocol description. Description may be in form of type +// (for singletons), raw value (primitive types supported in JSON), +// string value description plus type (for primitive values) or handle id. +// Returns raw value or throws exception. +DebugCommandProcessor.resolveValue_ = function(value_description) { + if ("handle" in value_description) { + var value_mirror = LookupMirror(value_description.handle); + if (!value_mirror) { + throw new Error("Failed to resolve value by handle, ' #" + + mapping.handle + "# not found"); + } + return value_mirror.value(); + } else if ("stringDescription" in value_description) { + if (value_description.type == BOOLEAN_TYPE) { + return Boolean(value_description.stringDescription); + } else if (value_description.type == NUMBER_TYPE) { + return Number(value_description.stringDescription); + } if (value_description.type == STRING_TYPE) { + return String(value_description.stringDescription); + } else { + throw new Error("Unknown type"); + } + } else if ("value" in value_description) { + return value_description.value; + } else if (value_description.type == UNDEFINED_TYPE) { + return UNDEFINED; + } else if (value_description.type == NULL_TYPE) { + return null; + } else { + throw new Error("Failed to parse value description"); + } +}; + + +DebugCommandProcessor.prototype.setVariableValueRequest_ = + function(request, response) { + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + if (IS_UNDEFINED(request.arguments.name)) { + response.failed('Missing variable name'); + } + var variable_name = request.arguments.name; + + var scope_description = request.arguments.scope; + + // Get the frame or function for which the scope is requested. + var scope_holder = this.resolveScopeHolder_(scope_description); + + if (IS_UNDEFINED(scope_description.number)) { + response.failed('Missing scope number'); + } + var scope_index = %ToNumber(scope_description.number); + + var scope = scope_holder.scope(scope_index); + + var new_value = + DebugCommandProcessor.resolveValue_(request.arguments.newValue); + + scope.setVariableValue(variable_name, new_value); + + var new_value_mirror = MakeMirror(new_value); + + response.body = { + newValue: new_value_mirror + }; +}; + + +DebugCommandProcessor.prototype.evaluateRequest_ = function(request, response) { + if (!request.arguments) { + return response.failed('Missing arguments'); + } + + // Pull out arguments. + var expression = request.arguments.expression; + var frame = request.arguments.frame; + var global = request.arguments.global; + var disable_break = request.arguments.disable_break; + var additional_context = request.arguments.additional_context; + + // The expression argument could be an integer so we convert it to a + // string. + try { + expression = String(expression); + } catch(e) { + return response.failed('Failed to convert expression argument to string'); + } + + // Check for legal arguments. + if (!IS_UNDEFINED(frame) && global) { + return response.failed('Arguments "frame" and "global" are exclusive'); + } + + var additional_context_object; + if (additional_context) { + additional_context_object = {}; + for (var i = 0; i < additional_context.length; i++) { + var mapping = additional_context[i]; + + if (!IS_STRING(mapping.name)) { + return response.failed("Context element #" + i + + " doesn't contain name:string property"); + } + + var raw_value = DebugCommandProcessor.resolveValue_(mapping); + additional_context_object[mapping.name] = raw_value; + } + } + + // Global evaluate. + if (global) { + // Evaluate in the native context. + response.body = this.exec_state_.evaluateGlobal( + expression, Boolean(disable_break), additional_context_object); + return; + } + + // Default value for disable_break is true. + if (IS_UNDEFINED(disable_break)) { + disable_break = true; + } + + // No frames no evaluate in frame. + if (this.exec_state_.frameCount() == 0) { + return response.failed('No frames'); + } + + // Check whether a frame was specified. + if (!IS_UNDEFINED(frame)) { + var frame_number = %ToNumber(frame); + if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { + return response.failed('Invalid frame "' + frame + '"'); + } + // Evaluate in the specified frame. + response.body = this.exec_state_.frame(frame_number).evaluate( + expression, Boolean(disable_break), additional_context_object); + return; + } else { + // Evaluate in the selected frame. + response.body = this.exec_state_.frame().evaluate( + expression, Boolean(disable_break), additional_context_object); + return; + } +}; + + +DebugCommandProcessor.prototype.lookupRequest_ = function(request, response) { + if (!request.arguments) { + return response.failed('Missing arguments'); + } + + // Pull out arguments. + var handles = request.arguments.handles; + + // Check for legal arguments. + if (IS_UNDEFINED(handles)) { + return response.failed('Argument "handles" missing'); + } + + // Set 'includeSource' option for script lookup. + if (!IS_UNDEFINED(request.arguments.includeSource)) { + includeSource = %ToBoolean(request.arguments.includeSource); + response.setOption('includeSource', includeSource); + } + + // Lookup handles. + var mirrors = {}; + for (var i = 0; i < handles.length; i++) { + var handle = handles[i]; + var mirror = LookupMirror(handle); + if (!mirror) { + return response.failed('Object #' + handle + '# not found'); + } + mirrors[handle] = mirror; + } + response.body = mirrors; +}; + + +DebugCommandProcessor.prototype.referencesRequest_ = + function(request, response) { + if (!request.arguments) { + return response.failed('Missing arguments'); + } + + // Pull out arguments. + var type = request.arguments.type; + var handle = request.arguments.handle; + + // Check for legal arguments. + if (IS_UNDEFINED(type)) { + return response.failed('Argument "type" missing'); + } + if (IS_UNDEFINED(handle)) { + return response.failed('Argument "handle" missing'); + } + if (type != 'referencedBy' && type != 'constructedBy') { + return response.failed('Invalid type "' + type + '"'); + } + + // Lookup handle and return objects with references the object. + var mirror = LookupMirror(handle); + if (mirror) { + if (type == 'referencedBy') { + response.body = mirror.referencedBy(); + } else { + response.body = mirror.constructedBy(); + } + } else { + return response.failed('Object #' + handle + '# not found'); + } +}; + + +DebugCommandProcessor.prototype.sourceRequest_ = function(request, response) { + // No frames no source. + if (this.exec_state_.frameCount() == 0) { + return response.failed('No source'); + } + + var from_line; + var to_line; + var frame = this.exec_state_.frame(); + if (request.arguments) { + // Pull out arguments. + from_line = request.arguments.fromLine; + to_line = request.arguments.toLine; + + if (!IS_UNDEFINED(request.arguments.frame)) { + var frame_number = %ToNumber(request.arguments.frame); + if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { + return response.failed('Invalid frame "' + frame + '"'); + } + frame = this.exec_state_.frame(frame_number); + } + } + + // Get the script selected. + var script = frame.func().script(); + if (!script) { + return response.failed('No source'); + } + + // Get the source slice and fill it into the response. + var slice = script.sourceSlice(from_line, to_line); + if (!slice) { + return response.failed('Invalid line interval'); + } + response.body = {}; + response.body.source = slice.sourceText(); + response.body.fromLine = slice.from_line; + response.body.toLine = slice.to_line; + response.body.fromPosition = slice.from_position; + response.body.toPosition = slice.to_position; + response.body.totalLines = script.lineCount(); +}; + + +DebugCommandProcessor.prototype.scriptsRequest_ = function(request, response) { + var types = ScriptTypeFlag(Debug.ScriptType.Normal); + var includeSource = false; + var idsToInclude = null; + if (request.arguments) { + // Pull out arguments. + if (!IS_UNDEFINED(request.arguments.types)) { + types = %ToNumber(request.arguments.types); + if (isNaN(types) || types < 0) { + return response.failed('Invalid types "' + + request.arguments.types + '"'); + } + } + + if (!IS_UNDEFINED(request.arguments.includeSource)) { + includeSource = %ToBoolean(request.arguments.includeSource); + response.setOption('includeSource', includeSource); + } + + if (IS_ARRAY(request.arguments.ids)) { + idsToInclude = {}; + var ids = request.arguments.ids; + for (var i = 0; i < ids.length; i++) { + idsToInclude[ids[i]] = true; + } + } + + var filterStr = null; + var filterNum = null; + if (!IS_UNDEFINED(request.arguments.filter)) { + var num = %ToNumber(request.arguments.filter); + if (!isNaN(num)) { + filterNum = num; + } + filterStr = request.arguments.filter; + } + } + + // Collect all scripts in the heap. + var scripts = %DebugGetLoadedScripts(); + + response.body = []; + + for (var i = 0; i < scripts.length; i++) { + if (idsToInclude && !idsToInclude[scripts[i].id]) { + continue; + } + if (filterStr || filterNum) { + var script = scripts[i]; + var found = false; + if (filterNum && !found) { + if (script.id && script.id === filterNum) { + found = true; + } + } + if (filterStr && !found) { + if (script.name && script.name.indexOf(filterStr) >= 0) { + found = true; + } + } + if (!found) continue; + } + if (types & ScriptTypeFlag(scripts[i].type)) { + response.body.push(MakeMirror(scripts[i])); + } + } +}; + + +DebugCommandProcessor.prototype.threadsRequest_ = function(request, response) { + // Get the number of threads. + var total_threads = this.exec_state_.threadCount(); + + // Get information for all threads. + var threads = []; + for (var i = 0; i < total_threads; i++) { + var details = %GetThreadDetails(this.exec_state_.break_id, i); + var thread_info = { current: details[0], + id: details[1] + }; + threads.push(thread_info); + } + + // Create the response body. + response.body = { + totalThreads: total_threads, + threads: threads + }; +}; + + +DebugCommandProcessor.prototype.suspendRequest_ = function(request, response) { + response.running = false; +}; + + +DebugCommandProcessor.prototype.versionRequest_ = function(request, response) { + response.body = { + V8Version: %GetV8Version() + }; +}; + + +DebugCommandProcessor.prototype.changeLiveRequest_ = function( + request, response) { + if (!request.arguments) { + return response.failed('Missing arguments'); + } + var script_id = request.arguments.script_id; + var preview_only = !!request.arguments.preview_only; + + var scripts = %DebugGetLoadedScripts(); + + var the_script = null; + for (var i = 0; i < scripts.length; i++) { + if (scripts[i].id == script_id) { + the_script = scripts[i]; + } + } + if (!the_script) { + response.failed('Script not found'); + return; + } + + var change_log = new Array(); + + if (!IS_STRING(request.arguments.new_source)) { + throw "new_source argument expected"; + } + + var new_source = request.arguments.new_source; + + var result_description; + try { + result_description = Debug.LiveEdit.SetScriptSource(the_script, + new_source, preview_only, change_log); + } catch (e) { + if (e instanceof Debug.LiveEdit.Failure && "details" in e) { + response.failed(e.message, e.details); + return; + } + throw e; + } + response.body = {change_log: change_log, result: result_description}; + + if (!preview_only && !this.running_ && result_description.stack_modified) { + response.body.stepin_recommended = true; + } +}; + + +DebugCommandProcessor.prototype.restartFrameRequest_ = function( + request, response) { + if (!request.arguments) { + return response.failed('Missing arguments'); + } + var frame = request.arguments.frame; + + // No frames to evaluate in frame. + if (this.exec_state_.frameCount() == 0) { + return response.failed('No frames'); + } + + var frame_mirror; + // Check whether a frame was specified. + if (!IS_UNDEFINED(frame)) { + var frame_number = %ToNumber(frame); + if (frame_number < 0 || frame_number >= this.exec_state_.frameCount()) { + return response.failed('Invalid frame "' + frame + '"'); + } + // Restart specified frame. + frame_mirror = this.exec_state_.frame(frame_number); + } else { + // Restart selected frame. + frame_mirror = this.exec_state_.frame(); + } + + var result_description = Debug.LiveEdit.RestartFrame(frame_mirror); + response.body = {result: result_description}; +}; + + +DebugCommandProcessor.prototype.debuggerFlagsRequest_ = function(request, + response) { + // Check for legal request. + if (!request.arguments) { + response.failed('Missing arguments'); + return; + } + + // Pull out arguments. + var flags = request.arguments.flags; + + response.body = { flags: [] }; + if (!IS_UNDEFINED(flags)) { + for (var i = 0; i < flags.length; i++) { + var name = flags[i].name; + var debugger_flag = debugger_flags[name]; + if (!debugger_flag) { + continue; + } + if ('value' in flags[i]) { + debugger_flag.setValue(flags[i].value); + } + response.body.flags.push({ name: name, value: debugger_flag.getValue() }); + } + } else { + for (var name in debugger_flags) { + var value = debugger_flags[name].getValue(); + response.body.flags.push({ name: name, value: value }); + } + } +}; + + +DebugCommandProcessor.prototype.v8FlagsRequest_ = function(request, response) { + var flags = request.arguments.flags; + if (!flags) flags = ''; + %SetFlags(flags); +}; + + +DebugCommandProcessor.prototype.gcRequest_ = function(request, response) { + var type = request.arguments.type; + if (!type) type = 'all'; + + var before = %GetHeapUsage(); + %CollectGarbage(type); + var after = %GetHeapUsage(); + + response.body = { "before": before, "after": after }; +}; + + +DebugCommandProcessor.prototype.dispatch_ = (function() { + var proto = DebugCommandProcessor.prototype; + return { + "continue": proto.continueRequest_, + "break" : proto.breakRequest_, + "setbreakpoint" : proto.setBreakPointRequest_, + "changebreakpoint": proto.changeBreakPointRequest_, + "clearbreakpoint": proto.clearBreakPointRequest_, + "clearbreakpointgroup": proto.clearBreakPointGroupRequest_, + "disconnect": proto.disconnectRequest_, + "setexceptionbreak": proto.setExceptionBreakRequest_, + "listbreakpoints": proto.listBreakpointsRequest_, + "backtrace": proto.backtraceRequest_, + "frame": proto.frameRequest_, + "scopes": proto.scopesRequest_, + "scope": proto.scopeRequest_, + "setvariablevalue": proto.setVariableValueRequest_, + "evaluate": proto.evaluateRequest_, + "lookup": proto.lookupRequest_, + "references": proto.referencesRequest_, + "source": proto.sourceRequest_, + "scripts": proto.scriptsRequest_, + "threads": proto.threadsRequest_, + "suspend": proto.suspendRequest_, + "version": proto.versionRequest_, + "changelive": proto.changeLiveRequest_, + "restartframe": proto.restartFrameRequest_, + "flags": proto.debuggerFlagsRequest_, + "v8flag": proto.v8FlagsRequest_, + "gc": proto.gcRequest_, + }; +})(); + + +// Check whether the previously processed command caused the VM to become +// running. +DebugCommandProcessor.prototype.isRunning = function() { + return this.running_; +}; + + +DebugCommandProcessor.prototype.systemBreak = function(cmd, args) { + return %SystemBreak(); +}; + + +/** + * Convert an Object to its debugger protocol representation. The representation + * may be serilized to a JSON object using JSON.stringify(). + * This implementation simply runs through all string property names, converts + * each property value to a protocol value and adds the property to the result + * object. For type "object" the function will be called recursively. Note that + * circular structures will cause infinite recursion. + * @param {Object} object The object to format as protocol object. + * @param {MirrorSerializer} mirror_serializer The serializer to use if any + * mirror objects are encountered. + * @return {Object} Protocol object value. + */ +function ObjectToProtocolObject_(object, mirror_serializer) { + var content = {}; + for (var key in object) { + // Only consider string keys. + if (typeof key == 'string') { + // Format the value based on its type. + var property_value_json = ValueToProtocolValue_(object[key], + mirror_serializer); + // Add the property if relevant. + if (!IS_UNDEFINED(property_value_json)) { + content[key] = property_value_json; + } + } + } + + return content; +} + + +/** + * Convert an array to its debugger protocol representation. It will convert + * each array element to a protocol value. + * @param {Array} array The array to format as protocol array. + * @param {MirrorSerializer} mirror_serializer The serializer to use if any + * mirror objects are encountered. + * @return {Array} Protocol array value. + */ +function ArrayToProtocolArray_(array, mirror_serializer) { + var json = []; + for (var i = 0; i < array.length; i++) { + json.push(ValueToProtocolValue_(array[i], mirror_serializer)); + } + return json; +} + + +/** + * Convert a value to its debugger protocol representation. + * @param {*} value The value to format as protocol value. + * @param {MirrorSerializer} mirror_serializer The serializer to use if any + * mirror objects are encountered. + * @return {*} Protocol value. + */ +function ValueToProtocolValue_(value, mirror_serializer) { + // Format the value based on its type. + var json; + switch (typeof value) { + case 'object': + if (value instanceof Mirror) { + json = mirror_serializer.serializeValue(value); + } else if (IS_ARRAY(value)){ + json = ArrayToProtocolArray_(value, mirror_serializer); + } else { + json = ObjectToProtocolObject_(value, mirror_serializer); + } + break; + + case 'boolean': + case 'string': + case 'number': + json = value; + break; + + default: + json = null; + } + return json; +} + +Debug.TestApi = { + CommandProcessorResolveValue: DebugCommandProcessor.resolveValue_ +}; diff --git a/v4-cokapi/backends/javascript/v8-reference-code/src/debug.cc b/v4-cokapi/backends/javascript/v8-reference-code/src/debug.cc new file mode 100644 index 000000000..93ef1cfc0 --- /dev/null +++ b/v4-cokapi/backends/javascript/v8-reference-code/src/debug.cc @@ -0,0 +1,3501 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "src/v8.h" + +#include "src/api.h" +#include "src/arguments.h" +#include "src/bootstrapper.h" +#include "src/code-stubs.h" +#include "src/codegen.h" +#include "src/compilation-cache.h" +#include "src/compiler.h" +#include "src/debug.h" +#include "src/deoptimizer.h" +#include "src/execution.h" +#include "src/full-codegen.h" +#include "src/global-handles.h" +#include "src/isolate-inl.h" +#include "src/list.h" +#include "src/log.h" +#include "src/messages.h" +#include "src/natives.h" + +#include "include/v8-debug.h" + +namespace v8 { +namespace internal { + +Debug::Debug(Isolate* isolate) + : debug_context_(Handle()), + event_listener_(Handle()), + event_listener_data_(Handle()), + message_handler_(NULL), + command_received_(0), + command_queue_(isolate->logger(), kQueueInitialSize), + event_command_queue_(isolate->logger(), kQueueInitialSize), + is_active_(false), + is_suppressed_(false), + live_edit_enabled_(true), // TODO(yangguo): set to false by default. + has_break_points_(false), + break_disabled_(false), + in_debug_event_listener_(false), + break_on_exception_(false), + break_on_uncaught_exception_(false), + script_cache_(NULL), + debug_info_list_(NULL), + isolate_(isolate) { + ThreadInit(); +} + + +static v8::Handle GetDebugEventContext(Isolate* isolate) { + Handle context = isolate->debug()->debugger_entry()->GetContext(); + // Isolate::context() may have been NULL when "script collected" event + // occured. + if (context.is_null()) return v8::Local(); + Handle native_context(context->native_context()); + return v8::Utils::ToLocal(native_context); +} + + +BreakLocationIterator::BreakLocationIterator(Handle debug_info, + BreakLocatorType type) { + debug_info_ = debug_info; + type_ = type; + reloc_iterator_ = NULL; + reloc_iterator_original_ = NULL; + Reset(); // Initialize the rest of the member variables. +} + + +BreakLocationIterator::~BreakLocationIterator() { + DCHECK(reloc_iterator_ != NULL); + DCHECK(reloc_iterator_original_ != NULL); + delete reloc_iterator_; + delete reloc_iterator_original_; +} + + +// Check whether a code stub with the specified major key is a possible break +// point location when looking for source break locations. +static bool IsSourceBreakStub(Code* code) { + CodeStub::Major major_key = CodeStub::GetMajorKey(code); + return major_key == CodeStub::CallFunction; +} + + +// Check whether a code stub with the specified major key is a possible break +// location. +static bool IsBreakStub(Code* code) { + CodeStub::Major major_key = CodeStub::GetMajorKey(code); + return major_key == CodeStub::CallFunction; +} + + +void BreakLocationIterator::Next() { + DisallowHeapAllocation no_gc; + DCHECK(!RinfoDone()); + + // Iterate through reloc info for code and original code stopping at each + // breakable code target. + bool first = break_point_ == -1; + while (!RinfoDone()) { + if (!first) RinfoNext(); + first = false; + if (RinfoDone()) return; + + // Whenever a statement position or (plain) position is passed update the + // current value of these. + if (RelocInfo::IsPosition(rmode())) { + if (RelocInfo::IsStatementPosition(rmode())) { + statement_position_ = static_cast( + rinfo()->data() - debug_info_->shared()->start_position()); + } + // Always update the position as we don't want that to be before the + // statement position. + position_ = static_cast( + rinfo()->data() - debug_info_->shared()->start_position()); + DCHECK(position_ >= 0); + DCHECK(statement_position_ >= 0); + } + + // Check for break at return. + if (RelocInfo::IsJSReturn(rmode())) { + // Set the positions to the end of the function. + if (debug_info_->shared()->HasSourceCode()) { + position_ = debug_info_->shared()->end_position() - + debug_info_->shared()->start_position() - 1; + } else { + position_ = 0; + } + statement_position_ = position_; + break_point_++; + return; + } + + if (RelocInfo::IsCodeTarget(rmode())) { + // Check for breakable code target. Look in the original code as setting + // break points can cause the code targets in the running (debugged) code + // to be of a different kind than in the original code. + Address target = original_rinfo()->target_address(); + Code* code = Code::GetCodeFromTargetAddress(target); + + if (RelocInfo::IsConstructCall(rmode()) || code->is_call_stub()) { + break_point_++; + return; + } + + // Skip below if we only want locations for calls and returns. + if (type_ == CALLS_AND_RETURNS) continue; + + if ((code->is_inline_cache_stub() && !code->is_binary_op_stub() && + !code->is_compare_ic_stub() && !code->is_to_boolean_ic_stub())) { + break_point_++; + return; + } + if (code->kind() == Code::STUB) { + if (IsDebuggerStatement()) { + break_point_++; + return; + } else if (type_ == ALL_BREAK_LOCATIONS) { + if (IsBreakStub(code)) { + break_point_++; + return; + } + } else { + DCHECK(type_ == SOURCE_BREAK_LOCATIONS); + if (IsSourceBreakStub(code)) { + break_point_++; + return; + } + } + } + } + + if (IsDebugBreakSlot() && type_ != CALLS_AND_RETURNS) { + // There is always a possible break point at a debug break slot. + break_point_++; + return; + } + } +} + + +void BreakLocationIterator::Next(int count) { + while (count > 0) { + Next(); + count--; + } +} + + +// Find the break point at the supplied address, or the closest one before +// the address. +void BreakLocationIterator::FindBreakLocationFromAddress(Address pc) { + // Run through all break points to locate the one closest to the address. + int closest_break_point = 0; + int distance = kMaxInt; + while (!Done()) { + // Check if this break point is closer that what was previously found. + if (this->pc() <= pc && pc - this->pc() < distance) { + closest_break_point = break_point(); + distance = static_cast(pc - this->pc()); + // Check whether we can't get any closer. + if (distance == 0) break; + } + Next(); + } + + // Move to the break point found. + Reset(); + Next(closest_break_point); +} + + +// Find the break point closest to the supplied source position. +void BreakLocationIterator::FindBreakLocationFromPosition(int position, + BreakPositionAlignment alignment) { + // Run through all break points to locate the one closest to the source + // position. + int closest_break_point = 0; + int distance = kMaxInt; + + while (!Done()) { + int next_position; + switch (alignment) { + case STATEMENT_ALIGNED: + next_position = this->statement_position(); + break; + case BREAK_POSITION_ALIGNED: + next_position = this->position(); + break; + default: + UNREACHABLE(); + next_position = this->statement_position(); + } + // Check if this break point is closer that what was previously found. + if (position <= next_position && next_position - position < distance) { + closest_break_point = break_point(); + distance = next_position - position; + // Check whether we can't get any closer. + if (distance == 0) break; + } + Next(); + } + + // Move to the break point found. + Reset(); + Next(closest_break_point); +} + + +void BreakLocationIterator::Reset() { + // Create relocation iterators for the two code objects. + if (reloc_iterator_ != NULL) delete reloc_iterator_; + if (reloc_iterator_original_ != NULL) delete reloc_iterator_original_; + reloc_iterator_ = new RelocIterator( + debug_info_->code(), + ~RelocInfo::ModeMask(RelocInfo::CODE_AGE_SEQUENCE)); + reloc_iterator_original_ = new RelocIterator( + debug_info_->original_code(), + ~RelocInfo::ModeMask(RelocInfo::CODE_AGE_SEQUENCE)); + + // Position at the first break point. + break_point_ = -1; + position_ = 1; + statement_position_ = 1; + Next(); +} + + +bool BreakLocationIterator::Done() const { + return RinfoDone(); +} + + +void BreakLocationIterator::SetBreakPoint(Handle break_point_object) { + // If there is not already a real break point here patch code with debug + // break. + if (!HasBreakPoint()) SetDebugBreak(); + DCHECK(IsDebugBreak() || IsDebuggerStatement()); + // Set the break point information. + DebugInfo::SetBreakPoint(debug_info_, code_position(), + position(), statement_position(), + break_point_object); +} + + +void BreakLocationIterator::ClearBreakPoint(Handle break_point_object) { + // Clear the break point information. + DebugInfo::ClearBreakPoint(debug_info_, code_position(), break_point_object); + // If there are no more break points here remove the debug break. + if (!HasBreakPoint()) { + ClearDebugBreak(); + DCHECK(!IsDebugBreak()); + } +} + + +void BreakLocationIterator::SetOneShot() { + // Debugger statement always calls debugger. No need to modify it. + if (IsDebuggerStatement()) return; + + // If there is a real break point here no more to do. + if (HasBreakPoint()) { + DCHECK(IsDebugBreak()); + return; + } + + // Patch code with debug break. + SetDebugBreak(); +} + + +void BreakLocationIterator::ClearOneShot() { + // Debugger statement always calls debugger. No need to modify it. + if (IsDebuggerStatement()) return; + + // If there is a real break point here no more to do. + if (HasBreakPoint()) { + DCHECK(IsDebugBreak()); + return; + } + + // Patch code removing debug break. + ClearDebugBreak(); + DCHECK(!IsDebugBreak()); +} + + +void BreakLocationIterator::SetDebugBreak() { + // Debugger statement always calls debugger. No need to modify it. + if (IsDebuggerStatement()) return; + + // If there is already a break point here just return. This might happen if + // the same code is flooded with break points twice. Flooding the same + // function twice might happen when stepping in a function with an exception + // handler as the handler and the function is the same. + if (IsDebugBreak()) return; + + if (RelocInfo::IsJSReturn(rmode())) { + // Patch the frame exit code with a break point. + SetDebugBreakAtReturn(); + } else if (IsDebugBreakSlot()) { + // Patch the code in the break slot. + SetDebugBreakAtSlot(); + } else { + // Patch the IC call. + SetDebugBreakAtIC(); + } + DCHECK(IsDebugBreak()); +} + + +void BreakLocationIterator::ClearDebugBreak() { + // Debugger statement always calls debugger. No need to modify it. + if (IsDebuggerStatement()) return; + + if (RelocInfo::IsJSReturn(rmode())) { + // Restore the frame exit code. + ClearDebugBreakAtReturn(); + } else if (IsDebugBreakSlot()) { + // Restore the code in the break slot. + ClearDebugBreakAtSlot(); + } else { + // Patch the IC call. + ClearDebugBreakAtIC(); + } + DCHECK(!IsDebugBreak()); +} + + +bool BreakLocationIterator::IsStepInLocation(Isolate* isolate) { + if (RelocInfo::IsConstructCall(original_rmode())) { + return true; + } else if (RelocInfo::IsCodeTarget(rmode())) { + HandleScope scope(debug_info_->GetIsolate()); + Address target = original_rinfo()->target_address(); + Handle target_code(Code::GetCodeFromTargetAddress(target)); + if (target_code->kind() == Code::STUB) { + return CodeStub::GetMajorKey(*target_code) == CodeStub::CallFunction; + } + return target_code->is_call_stub(); + } + return false; +} + + +void BreakLocationIterator::PrepareStepIn(Isolate* isolate) { +#ifdef DEBUG + HandleScope scope(isolate); + // Step in can only be prepared if currently positioned on an IC call, + // construct call or CallFunction stub call. + Address target = rinfo()->target_address(); + Handle target_code(Code::GetCodeFromTargetAddress(target)); + // All the following stuff is needed only for assertion checks so the code + // is wrapped in ifdef. + Handle maybe_call_function_stub = target_code; + if (IsDebugBreak()) { + Address original_target = original_rinfo()->target_address(); + maybe_call_function_stub = + Handle(Code::GetCodeFromTargetAddress(original_target)); + } + bool is_call_function_stub = + (maybe_call_function_stub->kind() == Code::STUB && + CodeStub::GetMajorKey(*maybe_call_function_stub) == + CodeStub::CallFunction); + + // Step in through construct call requires no changes to the running code. + // Step in through getters/setters should already be prepared as well + // because caller of this function (Debug::PrepareStep) is expected to + // flood the top frame's function with one shot breakpoints. + // Step in through CallFunction stub should also be prepared by caller of + // this function (Debug::PrepareStep) which should flood target function + // with breakpoints. + DCHECK(RelocInfo::IsConstructCall(rmode()) || + target_code->is_inline_cache_stub() || + is_call_function_stub); +#endif +} + + +// Check whether the break point is at a position which will exit the function. +bool BreakLocationIterator::IsExit() const { + return (RelocInfo::IsJSReturn(rmode())); +} + + +bool BreakLocationIterator::HasBreakPoint() { + return debug_info_->HasBreakPoint(code_position()); +} + + +// Check whether there is a debug break at the current position. +bool BreakLocationIterator::IsDebugBreak() { + if (RelocInfo::IsJSReturn(rmode())) { + return IsDebugBreakAtReturn(); + } else if (IsDebugBreakSlot()) { + return IsDebugBreakAtSlot(); + } else { + return Debug::IsDebugBreak(rinfo()->target_address()); + } +} + + +// Find the builtin to use for invoking the debug break +static Handle DebugBreakForIC(Handle code, RelocInfo::Mode mode) { + Isolate* isolate = code->GetIsolate(); + + // Find the builtin debug break function matching the calling convention + // used by the call site. + if (code->is_inline_cache_stub()) { + switch (code->kind()) { + case Code::CALL_IC: + return isolate->builtins()->CallICStub_DebugBreak(); + + case Code::LOAD_IC: + return isolate->builtins()->LoadIC_DebugBreak(); + + case Code::STORE_IC: + return isolate->builtins()->StoreIC_DebugBreak(); + + case Code::KEYED_LOAD_IC: + return isolate->builtins()->KeyedLoadIC_DebugBreak(); + + case Code::KEYED_STORE_IC: + return isolate->builtins()->KeyedStoreIC_DebugBreak(); + + case Code::COMPARE_NIL_IC: + return isolate->builtins()->CompareNilIC_DebugBreak(); + + default: + UNREACHABLE(); + } + } + if (RelocInfo::IsConstructCall(mode)) { + if (code->has_function_cache()) { + return isolate->builtins()->CallConstructStub_Recording_DebugBreak(); + } else { + return isolate->builtins()->CallConstructStub_DebugBreak(); + } + } + if (code->kind() == Code::STUB) { + DCHECK(CodeStub::GetMajorKey(*code) == CodeStub::CallFunction); + return isolate->builtins()->CallFunctionStub_DebugBreak(); + } + + UNREACHABLE(); + return Handle::null(); +} + + +void BreakLocationIterator::SetDebugBreakAtIC() { + // Patch the original code with the current address as the current address + // might have changed by the inline caching since the code was copied. + original_rinfo()->set_target_address(rinfo()->target_address()); + + RelocInfo::Mode mode = rmode(); + if (RelocInfo::IsCodeTarget(mode)) { + Address target = rinfo()->target_address(); + Handle target_code(Code::GetCodeFromTargetAddress(target)); + + // Patch the code to invoke the builtin debug break function matching the + // calling convention used by the call site. + Handle dbgbrk_code = DebugBreakForIC(target_code, mode); + rinfo()->set_target_address(dbgbrk_code->entry()); + } +} + + +void BreakLocationIterator::ClearDebugBreakAtIC() { + // Patch the code to the original invoke. + rinfo()->set_target_address(original_rinfo()->target_address()); +} + + +bool BreakLocationIterator::IsDebuggerStatement() { + return RelocInfo::DEBUG_BREAK == rmode(); +} + + +bool BreakLocationIterator::IsDebugBreakSlot() { + return RelocInfo::DEBUG_BREAK_SLOT == rmode(); +} + + +Object* BreakLocationIterator::BreakPointObjects() { + return debug_info_->GetBreakPointObjects(code_position()); +} + + +// Clear out all the debug break code. This is ONLY supposed to be used when +// shutting down the debugger as it will leave the break point information in +// DebugInfo even though the code is patched back to the non break point state. +void BreakLocationIterator::ClearAllDebugBreak() { + while (!Done()) { + ClearDebugBreak(); + Next(); + } +} + + +bool BreakLocationIterator::RinfoDone() const { + DCHECK(reloc_iterator_->done() == reloc_iterator_original_->done()); + return reloc_iterator_->done(); +} + + +void BreakLocationIterator::RinfoNext() { + reloc_iterator_->next(); + reloc_iterator_original_->next(); +#ifdef DEBUG + DCHECK(reloc_iterator_->done() == reloc_iterator_original_->done()); + if (!reloc_iterator_->done()) { + DCHECK(rmode() == original_rmode()); + } +#endif +} + + +// Threading support. +void Debug::ThreadInit() { + thread_local_.break_count_ = 0; + thread_local_.break_id_ = 0; + thread_local_.break_frame_id_ = StackFrame::NO_ID; + thread_local_.last_step_action_ = StepNone; + thread_local_.last_statement_position_ = RelocInfo::kNoPosition; + thread_local_.step_count_ = 0; + thread_local_.last_fp_ = 0; + thread_local_.queued_step_count_ = 0; + thread_local_.step_into_fp_ = 0; + thread_local_.step_out_fp_ = 0; + // TODO(isolates): frames_are_dropped_? + base::NoBarrier_Store(&thread_local_.current_debug_scope_, + static_cast(NULL)); + thread_local_.restarter_frame_function_pointer_ = NULL; +} + + +char* Debug::ArchiveDebug(char* storage) { + char* to = storage; + MemCopy(to, reinterpret_cast(&thread_local_), sizeof(ThreadLocal)); + ThreadInit(); + return storage + ArchiveSpacePerThread(); +} + + +char* Debug::RestoreDebug(char* storage) { + char* from = storage; + MemCopy(reinterpret_cast(&thread_local_), from, sizeof(ThreadLocal)); + return storage + ArchiveSpacePerThread(); +} + + +int Debug::ArchiveSpacePerThread() { + return sizeof(ThreadLocal); +} + + +ScriptCache::ScriptCache(Isolate* isolate) : HashMap(HashMap::PointersMatch), + isolate_(isolate) { + Heap* heap = isolate_->heap(); + HandleScope scope(isolate_); + + // Perform a GC to get rid of all unreferenced scripts. + heap->CollectAllGarbage(Heap::kMakeHeapIterableMask, "ScriptCache"); + + // Scan heap for Script objects. + HeapIterator iterator(heap); + DisallowHeapAllocation no_allocation; + + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { + if (obj->IsScript() && Script::cast(obj)->HasValidSource()) { + Add(Handle